diff --git a/README.md b/README.md index add2c8b2..23aa6953 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,11 @@ The following parameters can be set in config files or in env variables: - AMAZON.IS_LOCAL_DB: Use Amazon DynamoDB Local or server. - AMAZON.DYNAMODB_URL: The local url if using Amazon DynamoDB Local - AMAZON.ATTACHMENT_S3_BUCKET: the AWS S3 bucket to store attachments +- ES: config object for Elasticsearch +- ES.HOST: Elasticsearch host +- ES.API_VERSION: Elasticsearch API version +- ES.ES_INDEX: Elasticsearch index name +- ES.ES_TYPE: Elasticsearch index type - FILE_UPLOAD_SIZE_LIMIT: the file upload size limit in bytes - CHALLENGES_API_URL: TC challenges API base URL - GROUPS_API_URL: TC groups API base URL @@ -67,7 +72,7 @@ Go to `mock-api` folder and run command `npm run start` to start the mock-api li 1. Drop/delete tables: `npm run drop-tables` 2. Creating tables: `npm run create-tables` 3. Seed/Insert data to tables: `npm run seed-tables` -4. Initialize database in default environment: `npm run init-db` +4. Initialize/Clear database in default environment: `npm run init-db` 5. View table data in default environment: `npm run view-data `, ModelName can be `Challenge`, `ChallengeType`, `ChallengeSetting`, `AuditLog`, `Phase`, `TimelineTemplate`or `Attachment` ### Notes diff --git a/config/default.js b/config/default.js index cb37066f..68e92d10 100644 --- a/config/default.js +++ b/config/default.js @@ -29,6 +29,15 @@ module.exports = { ATTACHMENT_S3_BUCKET: process.env.ATTACHMENT_S3_BUCKET || 'my-testing-bucket-12345', S3_API_VERSION: process.env.S3_API_VERSION || '2006-03-01' }, + + ES: { + // above AWS_REGION is used if we use AWS ES + HOST: process.env.ES_HOST || 'localhost:9200', + API_VERSION: process.env.ES_API_VERSION || '6.3', + ES_INDEX: process.env.ES_INDEX || 'challenge', + ES_TYPE: process.env.ES_TYPE || '_doc' // ES 6.x accepts only 1 Type per index and it's mandatory to define it + }, + // in bytes FILE_UPLOAD_SIZE_LIMIT: process.env.FILE_UPLOAD_SIZE_LIMIT ? Number(process.env.FILE_UPLOAD_SIZE_LIMIT) : 50 * 1024 * 1024, // 50M diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b9005213..906d9394 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -53,6 +53,23 @@ paths: parameters: - $ref: '#/parameters/page' - $ref: '#/parameters/perPage' + - name: id + in: query + description: Filter by id, exact match + required: false + type: string + format: UUID + - name: typeId + in: query + description: Filter by type id, exact match + required: false + type: string + format: UUID + - name: track + in: query + description: Filter by track, case-insensitive, partial matches are allowed. + required: false + type: string - name: name in: query description: Filter by name, case-insensitive, partial matches are allowed. @@ -60,32 +77,83 @@ paths: type: string - name: description in: query - description: Filter by description. Partial matches are allowed. + description: Filter by description, case-insensitive, partial matches are allowed. + required: false + type: string + - name: timelineTemplateId + in: query + description: Filter by timeline template id, exact match + required: false + type: string + format: UUID + - name: reviewType + in: query + description: Filter by review type, case-insensitive, partial matches are allowed. + required: false + type: string + - name: tag + in: query + description: Filter by tag name, case-insensitive, partial matches are allowed. + required: false + type: string + - name: projectId + in: query + description: Filter by project id, exact match. + required: false + type: integer + - name: forumId + in: query + description: Filter by forum id, exact match. + required: false + type: integer + - name: legacyId + in: query + description: Filter by legacy id, exact match. + required: false + type: integer + - name: status + in: query + description: Filter by status, case-insensitive, partial matches are allowed. + required: false + type: string + enum: ['Draft', 'Canceled', 'Active', 'Completed'] + - name: group + in: query + description: Filter by group name, case-insensitive, partial matches are allowed. required: false type: string - name: createdDateStart in: query - description: Filter by createdDate (lower bound of date range) + description: Filter by created date (lower bound of date range) required: false type: string + format: date-time - name: createdDateEnd in: query - description: Filter by createdDate (upper bound of date range) + description: Filter by created date (upper bound of date range) required: false type: string + format: date-time - name: updatedDateStart in: query - description: Filter by updatedDate (lower bound of date range) + description: Filter by updated date (lower bound of date range) required: false type: string + format: date-time - name: updatedDateEnd in: query - description: Filter by updatedDate (upper bound of date range) + description: Filter by updated date (upper bound of date range) required: false type: string + format: date-time - name: createdBy in: query - description: Filter by 'createdBy' field + description: Filter by 'createdBy' field, case-insensitive, partial matches are allowed. + required: false + type: string + - name: updatedBy + in: query + description: Filter by 'updatedBy' field, case-insensitive, partial matches are allowed. required: false type: string responses: diff --git a/docs/topcoder-challenge-api.postman_collection.json b/docs/topcoder-challenge-api.postman_collection.json index 5210300b..06d0f21b 100644 --- a/docs/topcoder-challenge-api.postman_collection.json +++ b/docs/topcoder-challenge-api.postman_collection.json @@ -877,6 +877,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -938,6 +942,10 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?invalid=-NAME-&page=2&perPage=2", "host": [ @@ -999,6 +1007,10 @@ "value": "Bearer invalid" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -1055,6 +1067,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -1116,6 +1132,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -1177,6 +1197,10 @@ "value": "Bearer {{m2m_challenge_settings_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -1238,6 +1262,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings?name=-NAME-&page=2&perPage=2", "host": [ @@ -1305,6 +1333,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGA_ID}}", "host": [ @@ -1353,6 +1385,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGB_ID}}", "host": [ @@ -1401,6 +1437,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/invalid-id", "host": [ @@ -1444,6 +1484,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGB_ID}}", "host": [ @@ -1492,6 +1536,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGB_ID}}", "host": [ @@ -1540,6 +1588,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGB_ID}}", "host": [ @@ -1588,6 +1640,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/11111111-a41a-4b80-b6dd-90f3816ada99", "host": [ @@ -1636,6 +1692,10 @@ "value": "Bearer {{m2m_challenge_settings_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGA_ID}}", "host": [ @@ -1684,6 +1744,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeSettings/{{SETTINGA_ID}}", "host": [ @@ -3040,6 +3104,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes?name=-name-&description=cri&isActive=true", "host": [ @@ -3096,6 +3164,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes?isActive=true&page=2&perPage=2", "host": [ @@ -3152,6 +3224,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes?invalid=test", "host": [ @@ -3206,6 +3282,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes/{{TYPEA_ID}}", "host": [ @@ -3249,6 +3329,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes/{{TYPEB_ID}}", "host": [ @@ -3292,6 +3376,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes/invalid-id", "host": [ @@ -3335,6 +3423,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeTypes/{{SETTINGA_ID}}", "host": [ @@ -5008,6 +5100,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases?name=ph", "host": [ @@ -5061,6 +5157,10 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases", "host": [ @@ -5108,6 +5208,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases?invalid=test", "host": [ @@ -5156,6 +5260,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases", "host": [ @@ -5203,6 +5311,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases", "host": [ @@ -5250,6 +5362,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases", "host": [ @@ -5297,6 +5413,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases", "host": [ @@ -5344,6 +5464,10 @@ "value": "Bearer {{m2m_challenge_phases_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases?name=ph", "host": [ @@ -5397,6 +5521,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases?name=ph", "host": [ @@ -5456,6 +5584,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEA_ID}}", "host": [ @@ -5504,6 +5636,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEB_ID}}", "host": [ @@ -5552,6 +5688,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/invalid-id", "host": [ @@ -5595,6 +5735,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEB_ID}}", "host": [ @@ -5643,6 +5787,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEB_ID}}", "host": [ @@ -5691,6 +5839,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEB_ID}}", "host": [ @@ -5739,6 +5891,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{PHASEB_ID}}", "host": [ @@ -5787,6 +5943,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{TYPEA_ID}}", "host": [ @@ -5835,6 +5995,10 @@ "value": "Bearer {{m2m_challenge_phases_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{TEST_PHASE_M2M_ID}}", "host": [ @@ -5883,6 +6047,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengePhases/{{TEST_PHASE_M2M_ID}}", "host": [ @@ -8030,6 +8198,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8083,6 +8255,10 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=LA", "host": [ @@ -8136,6 +8312,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?invalid=test", "host": [ @@ -8184,6 +8364,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8237,6 +8421,10 @@ "value": "Bearer invalid" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8290,6 +8478,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8343,6 +8535,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8396,6 +8592,10 @@ "value": "Bearer {{m2m_timeline_templates_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8449,6 +8649,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates?name=1", "host": [ @@ -8508,6 +8712,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEA_ID}}", "host": [ @@ -8556,6 +8764,10 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEB_ID}}", "host": [ @@ -8604,6 +8816,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/invalid-id", "host": [ @@ -8652,6 +8868,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEA_ID}}", "host": [ @@ -8700,6 +8920,10 @@ "value": "Bearer invalid" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEA_ID}}", "host": [ @@ -8743,6 +8967,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEA_ID}}", "host": [ @@ -8791,6 +9019,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEMPLATEA_ID}}", "host": [ @@ -8839,6 +9071,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{SETTINGA_ID}}", "host": [ @@ -8887,6 +9123,10 @@ "value": "Bearer {{m2m_timeline_templates_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEST_TEMPLATE_M2M_ID}}", "host": [ @@ -8935,6 +9175,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/timelineTemplates/{{TEST_TEMPLATE_M2M_ID}}", "host": [ @@ -11389,7 +11633,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11439,7 +11683,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11488,7 +11732,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11537,7 +11781,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11586,7 +11830,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11629,7 +11873,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11678,7 +11922,7 @@ { "key": "wrong", "type": "file", - "src": [] + "src": "" } ] }, @@ -11728,7 +11972,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11777,7 +12021,7 @@ { "key": "attachment", "type": "file", - "src": [] + "src": "" } ] }, @@ -11826,6 +12070,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}/attachments/{{ATTACHMENT_ID1}}", "host": [ @@ -11866,6 +12114,10 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}/attachments/{{ATTACHMENT_ID2}}", "host": [ @@ -11906,6 +12158,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}/attachments/{{ATTACHMENT_ID2}}", "host": [ @@ -11946,6 +12202,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{TYPEA_ID}}/attachments/{{ATTACHMENT_ID1}}", "host": [ @@ -11986,6 +12246,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}/attachments/{{ATTACHMENT_ID1}}", "host": [ @@ -12026,6 +12290,10 @@ "value": "Bearer invalid" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}/attachments/{{ATTACHMENT_ID1}}", "host": [ @@ -12066,6 +12334,10 @@ "value": "Bearer {{copilot2_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}/attachments/{{ATTACHMENT_ID2}}", "host": [ @@ -12100,6 +12372,10 @@ "request": { "method": "GET", "header": [], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}/attachments/{{ATTACHMENT_ID2}}", "host": [ @@ -12140,6 +12416,10 @@ "value": "Bearer {{m2m_challenge_attachments_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{TEST_CHALLENGE_M2M_ID}}/attachments/{{TEST_ATTACHMENT_M2M_ID}}", "host": [ @@ -12180,6 +12460,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{TEST_CHALLENGE_M2M_ID}}/attachments/{{TEST_ATTACHMENT_M2M_ID}}", "host": [ @@ -12258,8 +12542,12 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?page=1&perPage=10&id={{ES_CHALLENGE_ID}}&typeId={{ES_TYPE_ID}}&track=coDE&name=TEST&description=a b&timelineTemplateId={{ES_TIMELINE_TEMPLATE_ID}}&reviewType=code&tag=tag2&projectId=12&forumId=45&legacyId=55&status=Active&group=g1&createdDateStart=2017-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z&updatedDateStart=2017-02-22T00:00:00Z&updatedDateEnd=2028-02-22T00:00:00Z&createdBy=admin&updatedBy=user", "host": [ "{{URL}}" ], @@ -12267,22 +12555,89 @@ "challenges" ], "query": [ + { + "key": "page", + "value": "1" + }, { "key": "perPage", "value": "10" }, { - "key": "createdBy", - "value": "TonyJ", - "disabled": true + "key": "id", + "value": "{{ES_CHALLENGE_ID}}" + }, + { + "key": "typeId", + "value": "{{ES_TYPE_ID}}" + }, + { + "key": "track", + "value": "coDE" + }, + { + "key": "name", + "value": "TEST" + }, + { + "key": "description", + "value": "a b" + }, + { + "key": "timelineTemplateId", + "value": "{{ES_TIMELINE_TEMPLATE_ID}}" + }, + { + "key": "reviewType", + "value": "code" + }, + { + "key": "tag", + "value": "tag2" + }, + { + "key": "projectId", + "value": "12" + }, + { + "key": "forumId", + "value": "45" + }, + { + "key": "legacyId", + "value": "55" + }, + { + "key": "status", + "value": "Active" + }, + { + "key": "group", + "value": "g1" }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2017-02-22T00:00:00Z" }, { "key": "createdDateEnd", "value": "2022-03-22T00:00:00Z" + }, + { + "key": "updatedDateStart", + "value": "2017-02-22T00:00:00Z" + }, + { + "key": "updatedDateEnd", + "value": "2028-02-22T00:00:00Z" + }, + { + "key": "createdBy", + "value": "admin" + }, + { + "key": "updatedBy", + "value": "user" } ] } @@ -12324,8 +12679,12 @@ "value": "Bearer {{copilot1_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2017-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ "{{URL}}" ], @@ -12344,7 +12703,7 @@ }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2017-02-22T00:00:00Z" }, { "key": "createdDateEnd", @@ -12390,8 +12749,12 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2017-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ "{{URL}}" ], @@ -12410,7 +12773,7 @@ }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2017-02-22T00:00:00Z" }, { "key": "createdDateEnd", @@ -12451,8 +12814,12 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2017-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ "{{URL}}" ], @@ -12471,7 +12838,7 @@ }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2017-02-22T00:00:00Z" }, { "key": "createdDateEnd", @@ -12512,6 +12879,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges?perPage=10&createdDateStart=abc&createdDateEnd=2022-03-22T00:00:00Z", "host": [ @@ -12573,6 +12944,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges?invalid=test-", "host": [ @@ -12626,8 +13001,12 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2016-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ "{{URL}}" ], @@ -12646,7 +13025,7 @@ }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2016-02-22T00:00:00Z" }, { "key": "createdDateEnd", @@ -12692,8 +13071,12 @@ "value": "Bearer {{m2m_challenge_attachments_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", + "raw": "{{URL}}/challenges?perPage=10&createdDateStart=2017-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ "{{URL}}" ], @@ -12712,7 +13095,7 @@ }, { "key": "createdDateStart", - "value": "2019-02-22T00:00:00Z" + "value": "2017-02-22T00:00:00Z" }, { "key": "createdDateEnd", @@ -12729,6 +13112,157 @@ { "name": "get challenge", "item": [ + { + "name": "get ES challenge by admin", + "event": [ + { + "listen": "test", + "script": { + "id": "c1b8d8ca-64df-494c-9b8a-8507058e8692", + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Accept", + "type": "text", + "value": "application/json" + }, + { + "key": "Content-Type", + "type": "text", + "value": "application/json" + }, + { + "key": "Authorization", + "value": "Bearer {{admin_token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{URL}}/challenges/{{ES_CHALLENGE_ID}}", + "host": [ + "{{URL}}" + ], + "path": [ + "challenges", + "{{ES_CHALLENGE_ID}}" + ] + } + }, + "response": [] + }, + { + "name": "get ES challenge by M2M", + "event": [ + { + "listen": "test", + "script": { + "id": "c1b8d8ca-64df-494c-9b8a-8507058e8692", + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Accept", + "type": "text", + "value": "application/json" + }, + { + "key": "Content-Type", + "type": "text", + "value": "application/json" + }, + { + "key": "Authorization", + "type": "text", + "value": "Bearer {{m2m_challenges_read}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{URL}}/challenges/{{ES_CHALLENGE_ID}}", + "host": [ + "{{URL}}" + ], + "path": [ + "challenges", + "{{ES_CHALLENGE_ID}}" + ] + } + }, + "response": [] + }, + { + "name": "failure get ES challenge by anonymous user", + "event": [ + { + "listen": "test", + "script": { + "id": "c1b8d8ca-64df-494c-9b8a-8507058e8692", + "exec": [ + "pm.test(\"Status code is 403\", function () {", + " pm.response.to.have.status(403);", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Accept", + "type": "text", + "value": "application/json" + }, + { + "key": "Content-Type", + "type": "text", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{URL}}/challenges/{{ES_CHALLENGE_ID}}", + "host": [ + "{{URL}}" + ], + "path": [ + "challenges", + "{{ES_CHALLENGE_ID}}" + ] + } + }, + "response": [] + }, { "name": "get challenge 1 by anonymous user", "event": [ @@ -12759,6 +13293,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}", "host": [ @@ -12807,6 +13345,10 @@ "type": "text" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -12855,6 +13397,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -12903,6 +13449,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -12946,6 +13496,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/invalid-id", "host": [ @@ -12989,6 +13543,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{TYPEA_ID}}", "host": [ @@ -13037,6 +13595,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -13085,6 +13647,10 @@ "value": "Bearer {{m2m_challenge_attachments_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -13133,6 +13699,10 @@ "value": "Bearer invalid" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID2}}", "host": [ @@ -13190,7 +13760,59 @@ ], "body": { "mode": "raw", - "raw": "{\n\t\"typeId\": \"{{TEST_TYPE_ID1}}\",\n\t\"track\": \"test-track\",\n\t\"name\": \"test-create\",\n\t\"description\": \"test-description\",\n\t\"timelineTemplateId\": \"{{TEMPLATEA_ID}}\",\n\t\"phases\": [\n\t\t{\n \t\"id\": \"{{PHASEA_ID}}\",\n \t\"name\": \"new-phase-1\",\n \t\"isActive\": true,\n \t\"duration\": 1000000\n },\n {\n \t\"id\": \"{{PHASEB_ID}}\",\n \t\"name\": \"new-PHASE-2\",\n \t\"description\": \"add-description-in-put\",\n\t \t\"predecessor\": \"{{PHASEA_ID}}\",\n \t\t\"isActive\": true,\n\t \t\"duration\": 10000000\n }\n\t],\n\t\"prizeSets\": [\n\t\t{\n\t\t\t\"type\": \"Challenge prizes\",\n\t\t\t\"description\": \"desc\",\n\t\t\t\"prizes\": [\n\t\t {\n\t\t \"description\": \"desc-first\",\n\t\t \"type\": \"first place\",\n\t\t \"value\": 600\n\t\t },\n\t\t {\n\t\t \"description\": \"desc-second\",\n\t\t \"type\": \"second place\",\n\t\t \"value\": 300\n\t\t }\n\t\t ]\n\t\t}\n\t],\n\t\"reviewType\": \"review type 2\",\n\t\"tags\": [\"tag1\", \"tag3\", \"tag4\"],\n\t\"projectId\": 123123,\n\t\"forumId\": 456456,\n\t\"status\": \"Active\",\n\t\"attachmentIds\": [\"{{ATTACHMENT_ID1}}\"]\n}" + "raw": "{\n\t\"typeId\": \"{{TEST_TYPE_ID1}}\",\n\t\"track\": \"test-track\",\n\t\"name\": \"test-create\",\n\t\"description\": \"test-description\",\n\t\"timelineTemplateId\": \"{{TEMPLATEA_ID}}\",\n\t\"phases\": [\n\t\t{\n \t\"id\": \"{{PHASEA_ID}}\",\n \t\"name\": \"new-phase-1\",\n \t\"isActive\": true,\n \t\"duration\": 1000000\n },\n {\n \t\"id\": \"{{PHASEB_ID}}\",\n \t\"name\": \"new-PHASE-2\",\n \t\"description\": \"add-description-in-put\",\n\t \t\"predecessor\": \"{{PHASEA_ID}}\",\n \t\t\"isActive\": true,\n\t \t\"duration\": 10000000\n }\n\t],\n\t\"prizeSets\": [\n\t\t{\n\t\t\t\"type\": \"Challenge prizes\",\n\t\t\t\"description\": \"desc\",\n\t\t\t\"prizes\": [\n\t\t {\n\t\t \"description\": \"desc-first\",\n\t\t \"type\": \"first place\",\n\t\t \"value\": 600\n\t\t },\n\t\t {\n\t\t \"description\": \"desc-second\",\n\t\t \"type\": \"second place\",\n\t\t \"value\": 300\n\t\t }\n\t\t ]\n\t\t}\n\t],\n\t\"reviewType\": \"review type 2\",\n\t\"tags\": [\"tag1\", \"tag3\", \"tag4\"],\n\t\"projectId\": 123123,\n\t\"forumId\": 456456,\n\t\"legacyId\": 112233,\n\t\"status\": \"Active\"\n}" + }, + "url": { + "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}", + "host": [ + "{{URL}}" + ], + "path": [ + "challenges", + "{{CHALLENGE_ID1}}" + ] + } + }, + "response": [] + }, + { + "name": "update challenge 1 with attachment by M2M", + "event": [ + { + "listen": "test", + "script": { + "id": "03483bad-dfb2-45d1-bf42-35dd3bd46dad", + "exec": [ + "pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [ + { + "key": "Accept", + "type": "text", + "value": "application/json" + }, + { + "key": "Content-Type", + "type": "text", + "value": "application/json" + }, + { + "key": "Authorization", + "type": "text", + "value": "Bearer {{m2m_challenges_update}}" + } + ], + "body": { + "mode": "raw", + "raw": "{\n\t\"typeId\": \"{{TEST_TYPE_ID1}}\",\n\t\"track\": \"test-track\",\n\t\"name\": \"test-create\",\n\t\"description\": \"test-description\",\n\t\"timelineTemplateId\": \"{{TEMPLATEA_ID}}\",\n\t\"phases\": [\n\t\t{\n \t\"id\": \"{{PHASEA_ID}}\",\n \t\"name\": \"new-phase-1\",\n \t\"isActive\": true,\n \t\"duration\": 1000000\n },\n {\n \t\"id\": \"{{PHASEB_ID}}\",\n \t\"name\": \"new-PHASE-2\",\n \t\"description\": \"add-description-in-put\",\n\t \t\"predecessor\": \"{{PHASEA_ID}}\",\n \t\t\"isActive\": true,\n\t \t\"duration\": 10000000\n }\n\t],\n\t\"prizeSets\": [\n\t\t{\n\t\t\t\"type\": \"Challenge prizes\",\n\t\t\t\"description\": \"desc\",\n\t\t\t\"prizes\": [\n\t\t {\n\t\t \"description\": \"desc-first\",\n\t\t \"type\": \"first place\",\n\t\t \"value\": 600\n\t\t },\n\t\t {\n\t\t \"description\": \"desc-second\",\n\t\t \"type\": \"second place\",\n\t\t \"value\": 300\n\t\t }\n\t\t ]\n\t\t}\n\t],\n\t\"reviewType\": \"review type 2\",\n\t\"tags\": [\"tag1\", \"tag3\", \"tag4\"],\n\t\"projectId\": 123123,\n\t\"forumId\": 456456,\n\t\"legacyId\": 112233,\n\t\"status\": \"Active\",\n\t\"attachmentIds\": [\"{{ATTACHMENT_ID1}}\"]\n}" }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}", @@ -13716,7 +14338,7 @@ ], "body": { "mode": "raw", - "raw": "{\n\t\"typeId\": \"{{TEST_TYPE_ID4}}\",\n\t\"track\": \"update-new-track\",\n\t\"name\": \"update-name\",\n\t\"phases\": [\n\t\t{\n \t\"id\": \"{{PHASEA_ID}}\",\n \t\"name\": \"new-phase-1\",\n \t\"isActive\": true,\n \t\"duration\": 5000000\n },\n {\n \t\"id\": \"{{PHASEB_ID}}\",\n \t\"name\": \"new-PHASE-2\",\n \t\"description\": \"add-description-in-put\",\n\t \t\"predecessor\": \"{{PHASEA_ID}}\",\n \t\t\"isActive\": true,\n\t \t\"duration\": 6000000\n }\n\t],\n\t\"tags\": [\"tag1\"],\n\t\"forumId\": 456456,\n\t\"status\": \"Completed\",\n\t\"groups\": [],\n\t\"attachmentIds\": []\n}" + "raw": "{\n\t\"legacyId\": 789789\n}" }, "url": { "raw": "{{URL}}/challenges/{{CHALLENGE_ID1}}", @@ -14190,6 +14812,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ @@ -14271,6 +14897,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID2}}&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z&createdBy=ghostar", "host": [ @@ -14341,6 +14971,10 @@ "value": "Bearer {{user_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&fieldName=n&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2019-03-22T00:00:00Z&createdBy=tonyj", "host": [ @@ -14410,6 +15044,10 @@ "value": "Bearer {{expire_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&fieldName=n&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2019-03-22T00:00:00Z&createdBy=tonyj", "host": [ @@ -14479,6 +15117,10 @@ "value": "Bearer {{admin_token}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&invalid=n&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2019-03-22T00:00:00Z&createdBy=tonyj", "host": [ @@ -14548,6 +15190,10 @@ "value": "Bearer {{m2m_challenge_audit_logs_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ @@ -14629,6 +15275,10 @@ "value": "Bearer {{m2m_challenges_read}}" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/challengeAuditLogs?challengeId={{CHALLENGE_ID1}}&createdDateStart=2019-02-22T00:00:00Z&createdDateEnd=2022-03-22T00:00:00Z", "host": [ @@ -14710,6 +15360,10 @@ "value": "application/json" } ], + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{URL}}/health", "host": [ @@ -14747,4 +15401,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/docs/topcoder-challenge-api.postman_environment.json b/docs/topcoder-challenge-api.postman_environment.json index 25eb40bb..7ab5960e 100644 --- a/docs/topcoder-challenge-api.postman_environment.json +++ b/docs/topcoder-challenge-api.postman_environment.json @@ -1,5 +1,5 @@ { - "id": "1313001a-a495-4416-b89b-89a914759267", + "id": "e393fed9-558b-405c-a845-d454483173ba", "name": "topcoder-challenge-api", "values": [ { @@ -29,27 +29,27 @@ }, { "key": "TYPEA_ID", - "value": "0ce8bdb5-0d92-4eb0-a4d8-ce08c49c386d", + "value": "0494bf18-93fb-4320-bd54-f23465b649b6", "enabled": true }, { "key": "TYPEB_ID", - "value": "82de3cff-6097-4cb0-a34b-3981e9e0bd28", + "value": "c61db679-8b9c-4ddc-b41e-889dd035cd47", "enabled": true }, { "key": "CHALLENGE_ID1", - "value": "2d0b90b6-136d-4f4d-a970-5d25862c7a6a", + "value": "870caf5f-3f54-4761-a0fe-a3e378d5ce0b", "enabled": true }, { "key": "SETTINGA_ID", - "value": "5f41fd63-a3fc-4395-970e-efd48614072a", + "value": "7bb8a726-278b-498f-89e1-2c6caabd7932", "enabled": true }, { "key": "SETTINGB_ID", - "value": "26590cb7-cf9e-4f0e-8e8b-2fc508d1038d", + "value": "2c6dfd54-38d2-4a42-a3b3-0bff809b71f3", "enabled": true }, { @@ -69,92 +69,92 @@ }, { "key": "TEST_SETTING_ID1", - "value": "0e64b53b-d5fa-410f-971f-c6f0005f4dae", + "value": "2a0868e3-9ee3-4d55-8ed4-079a7434e60d", "enabled": true }, { "key": "TEST_SETTING_ID2", - "value": "cb342da3-b8a1-4d24-9bda-60cb9ac379d4", + "value": "6685bfcc-146c-49a6-889c-314f777d1a70", "enabled": true }, { "key": "TEST_SETTING_ID3", - "value": "53586963-3faa-47af-b750-3217a9a0f702", + "value": "3d604840-e455-45a7-9b7e-f0064f690859", "enabled": true }, { "key": "TEST_SETTING_ID4", - "value": "8cd84a26-575f-4127-b147-99e59f309887", + "value": "533d61ea-7664-4ee3-b022-bc822aa45760", "enabled": true }, { "key": "TEST_SETTING_ID5", - "value": "ec9b9d67-72c4-4483-8c86-5478cb436d4b", + "value": "1ec89dfe-4ec1-4322-b072-229953686b11", "enabled": true }, { "key": "TEST_TYPE_ID1", - "value": "c60cc083-e4f5-44fd-a06c-6c9f16b76fe2", + "value": "82cee579-5b69-42d1-8042-6f26dd3a3557", "enabled": true }, { "key": "TEST_TYPE_ID2", - "value": "9872c39e-5035-4b0a-819c-773ef8f80159", + "value": "c422774e-10a8-436e-a9d9-919dec503e1b", "enabled": true }, { "key": "TEST_TYPE_ID3", - "value": "f938415a-3a5d-491b-bccf-2357b9f6fbba", + "value": "23c78c3c-b3ee-425e-bfa6-125d3b569122", "enabled": true }, { "key": "TEST_TYPE_ID4", - "value": "aad0d068-27c5-4684-b762-ccf83963aca3", + "value": "871a55af-fe91-4cd4-b6ac-36c81b7e445c", "enabled": true }, { "key": "TEST_TYPE_ID5", - "value": "60337999-a47b-430b-aad7-babe82e3c567", + "value": "7e9e040a-b8b1-4acc-85ec-1b24cd03b150", "enabled": true }, { "key": "PHASEA_ID", - "value": "a1f0cc6d-fe19-497f-8b29-809a0e7a11b5", + "value": "2050437f-7f3c-4bf6-ba50-657249da5523", "enabled": true }, { "key": "PHASEB_ID", - "value": "fc75d892-9d42-47d7-9f78-e039898e43da", + "value": "14f9364b-da63-48f8-beb4-f6c4aa801b29", "enabled": true }, { "key": "PHASEC_ID", - "value": "0769e231-f609-4ff4-bfda-95d0395ba1ed", + "value": "eb223cfb-fc81-493b-a081-a3c549057392", "enabled": true }, { "key": "PHASED_ID", - "value": "fe39da38-3666-43f6-a968-08829f08638c", + "value": "27315009-e8c5-4dd5-8953-239c011df3d0", "enabled": true }, { "key": "TEMPLATEA_ID", - "value": "6a4d829d-0922-4e3b-8c77-4ef4cd15d1d7", + "value": "fad5a22f-cb7d-4316-ba52-6e22934b960e", "enabled": true }, { "key": "TEMPLATEB_ID", - "value": "8ad1e168-feeb-4265-a2e2-5255a8e00b2a", + "value": "8b9eb3a0-454a-43a3-a45e-67aa9a08be7d", "enabled": true }, { "key": "TEMPLATEC_ID", - "value": "ee6b3a27-f734-4610-9e93-ce484f310565", + "value": "a640a736-875d-4af9-b7a8-7bab5fc6ff71", "enabled": true }, { "key": "ATTACHMENT_ID1", - "value": "59230def-0158-44c5-a9cc-c3cd5bd283ad", + "value": "2193b392-394d-44c3-9257-1f3c4907558b", "enabled": true }, { @@ -259,22 +259,22 @@ }, { "key": "TEST_SETTING_M2M_ID", - "value": "", + "value": "cbac1bc8-749b-4e8b-9ff5-cfc129342e22", "enabled": true }, { "key": "TEST_TYPE_M2M_ID", - "value": "", + "value": "e0d5202c-e9e5-4ec2-a218-3c08688813a5", "enabled": true }, { "key": "TEST_PHASE_M2M_ID", - "value": "", + "value": "06f2e9f2-656e-4862-838c-75e793fd2f8c", "enabled": true }, { "key": "TEST_TEMPLATE_M2M_ID", - "value": "", + "value": "ba402af0-b13a-4772-9550-d0988635672b", "enabled": true }, { @@ -286,9 +286,36 @@ "key": "TEST_ATTACHMENT_M2M_ID", "value": "", "enabled": true + }, + { + "key": "ES_CHALLENGE_ID", + "value": "173803d3-019e-4033-b1cf-d7205c7f774c", + "description": { + "content": "", + "type": "text/plain" + }, + "enabled": true + }, + { + "key": "ES_TYPE_ID", + "value": "45415132-79fa-4d13-a9ac-71f50020dc10", + "description": { + "content": "", + "type": "text/plain" + }, + "enabled": true + }, + { + "key": "ES_TIMELINE_TEMPLATE_ID", + "value": "8e17090c-465b-4c17-b6d9-dfa16300b0aa", + "description": { + "content": "", + "type": "text/plain" + }, + "enabled": true } ], "_postman_variable_scope": "environment", - "_postman_exported_at": "2019-06-06T05:22:00.094Z", - "_postman_exported_using": "Postman/7.1.1" + "_postman_exported_at": "2019-06-16T20:45:25.574Z", + "_postman_exported_using": "Postman/6.4.4" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6d3c0904..e37e73f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,83 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" - } - }, - "@types/express-jwt": { - "version": "0.0.34", - "resolved": "https://registry.npmjs.org/@types/express-jwt/-/express-jwt-0.0.34.tgz", - "integrity": "sha1-/b7kxq9cCiRu8qkz9VGZc8dxfwI=", - "requires": { - "@types/express": "*", - "@types/express-unless": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.4.tgz", - "integrity": "sha512-x/8h6FHm14rPWnW2HP5likD/rsqJ3t/77OWx2PLxym0hXbeBWQmcPyHmwX+CtCQpjIfgrUdEoDFcLPwPZWiqzQ==", - "requires": { - "@types/node": "*", - "@types/range-parser": "*" - } - }, - "@types/express-unless": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@types/express-unless/-/express-unless-0.5.1.tgz", - "integrity": "sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==", - "requires": { - "@types/express": "*" - } - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==" - }, "@types/node": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.0.tgz", "integrity": "sha512-D5Rt+HXgEywr3RQJcGlZUCTCx1qVbCZpVk3/tOOA6spLNZdGm8BU+zRgdRYDoF1pO3RuXLxADzMrF903JlQXqg==" }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" - } - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -102,6 +30,14 @@ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "requires": { + "humanize-ms": "^1.2.1" + } + }, "ajv": { "version": "6.10.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", @@ -128,14 +64,12 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "argparse": { "version": "1.0.10", @@ -188,9 +122,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "auth0-js": { - "version": "9.10.2", - "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.10.2.tgz", - "integrity": "sha512-tvVcL14jTrPq7c535rVLDKHNPW7cW0LKGqeiJA8psa+OGZ0AXv49jLxE+vjxNN6y508JE2bi7p9bhdlJ2pKSRA==", + "version": "9.10.4", + "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-9.10.4.tgz", + "integrity": "sha512-FKwwA0E9NDrn/MxCzeftA5wx6YCos9wINhuvXeFHDdx+Lis7ykR46kBXJF4+dYjDdC5QhQ7W0cAp6bBS5gS75Q==", "requires": { "base64-js": "^1.2.0", "idtoken-verifier": "^1.2.0", @@ -202,9 +136,9 @@ } }, "aws-sdk": { - "version": "2.453.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.453.0.tgz", - "integrity": "sha512-UsofQeX8XVElr4+bqw47jOZUGNiwUdFVTNyOdOHcK14RHH2ySsve6JWyvQT8L2rS//XQP1OBIQo20PAl1Zf7ig==", + "version": "2.476.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.476.0.tgz", + "integrity": "sha512-GBvp/VjKu5YAiwzLVyfUajq43BXBvxhNUz6D27mG/ttceeFdQxMkZbAHSk36vH7rtECGIgRTw5ok8BoHVCTGuw==", "requires": { "buffer": "4.9.1", "events": "1.1.1", @@ -228,12 +162,12 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" } }, "babel-code-frame": { @@ -245,30 +179,6 @@ "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } } }, "babel-runtime": { @@ -306,9 +216,9 @@ } }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" }, "body-parser": { "version": "1.19.0", @@ -334,11 +244,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -412,34 +317,15 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "chardet": { @@ -567,9 +453,12 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -577,9 +466,9 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-signature": { "version": "1.0.6", @@ -592,9 +481,9 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" }, "core-util-is": { "version": "1.0.2", @@ -637,11 +526,11 @@ } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "debug-log": { @@ -759,9 +648,9 @@ } }, "dynamoose": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/dynamoose/-/dynamoose-1.7.2.tgz", - "integrity": "sha512-cRXX+ixgFYeLHIYA/rvVu+byPPHHfkUrO26IgUyqd/6apyGnAUtKAOeCEsS6M7fjVouuavxl+Va51cexRcCOkw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/dynamoose/-/dynamoose-1.8.0.tgz", + "integrity": "sha512-UHR4Mf3AY+u7XHvfYWtx8ClfKMCm4ZSJ6BAx1sVtKv2uDdnfTHqxIgkIuyYtwRuykzeHIeSSAUdP8PGM+RdcXw==", "requires": { "@types/node": "11.11.0", "aws-sdk": "2.395.0", @@ -795,6 +684,11 @@ "requires": { "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -820,6 +714,16 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "elasticsearch": { + "version": "15.5.0", + "resolved": "https://registry.npmjs.org/elasticsearch/-/elasticsearch-15.5.0.tgz", + "integrity": "sha512-ZGKKaDkOFAap61ObBNkAxhYXCcAbRfkI4NVoSeLGnTD6/cItvY2j9LII/VV8/zclGe1x5m6DsVp47E4ze4aAeQ==", + "requires": { + "agentkeepalive": "^3.4.1", + "chalk": "^1.0.0", + "lodash": "^4.17.10" + } + }, "enabled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", @@ -880,6 +784,11 @@ "is-symbol": "^1.0.2" } }, + "es6-promise-polyfill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz", + "integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4=" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -888,8 +797,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { "version": "5.4.0", @@ -937,6 +845,32 @@ "text-table": "^0.2.0" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -950,6 +884,24 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -983,12 +935,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -1010,12 +956,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -1065,12 +1005,6 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -1193,64 +1127,42 @@ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1258,63 +1170,13 @@ "requires": { "ms": "2.0.0" } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, "express-fileupload": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.1.4.tgz", - "integrity": "sha512-/Fu4+pVQ1lED3jb17kqAjxYS3b/m0WWUSWBOCxBjdXc41SpXV1lUVc3LGAFLaLf6EkcUMzeAYRNJ7dWW9n/Jmw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.1.5.tgz", + "integrity": "sha512-ZYxGkXm9y1dSMgbW+lwvtqld+dulYm3OU1GQF9n6NNEwulHTPUsz4mHGG5/LiUszz5jnh/j8AcpLFUdaj8UUtQ==", "requires": { "busboy": "^0.2.14" } @@ -1334,11 +1196,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -1409,16 +1266,16 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "dependencies": { @@ -1429,16 +1286,6 @@ "requires": { "ms": "2.0.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, @@ -1495,11 +1342,11 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { - "debug": "^3.2.6" + "debug": "=3.1.0" } }, "forever-agent": { @@ -1621,7 +1468,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -1654,6 +1500,11 @@ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "http-aws-es": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/http-aws-es/-/http-aws-es-6.0.0.tgz", + "integrity": "sha512-g+qp7J110/m4aHrR3iit4akAlnW0UljZ6oTq/rCcbsI8KP9x+95vqUtx49M2XQ2JMpwJio3B6gDYx+E8WDxqiA==" + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1681,6 +1532,14 @@ "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.3.2.tgz", "integrity": "sha512-nDUtj0ltIt08tGi2VWSpSzNNFye0v3YSe9lX3lIqLTuVvvRiYCvs4QQBSHo0eomFYw1wlUuofurUAlTm+vHnXg==" }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1690,14 +1549,15 @@ } }, "idtoken-verifier": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.2.0.tgz", - "integrity": "sha512-8jmmFHwdPz8L73zGNAXHHOV9yXNC+Z0TUBN5rafpoaFaLFltlIFr1JkQa3FYAETP23eSsulVw0sBiwrE8jqbUg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/idtoken-verifier/-/idtoken-verifier-1.3.1.tgz", + "integrity": "sha512-o0aplv9JqTuHz9jywi3fXXAHUWZ0nEWSjS1qBawLU74C+iqScORwBFXoac2zVoggE1hTaImikE8vALkZQu9I3Q==", "requires": { "base64-js": "^1.2.0", "crypto-js": "^3.1.9-1", + "es6-promise-polyfill": "^1.2.0", + "isomorphic-unfetch": "^3.0.0", "jsbn": "^0.1.0", - "superagent": "^3.8.2", "url-join": "^1.1.0" }, "dependencies": { @@ -1758,6 +1618,52 @@ "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "ipaddr.js": { @@ -1771,9 +1677,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" }, "is-callable": { "version": "1.1.4", @@ -1859,6 +1765,15 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, + "isomorphic-unfetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.0.0.tgz", + "integrity": "sha512-V0tmJSYfkKokZ5mgl0cmfQMTb7MLHsBMngTkbLY0eXvKqiVRRoZP04Ly+KhKrJfKtzC9E6Pp15Jo+bwh7Vi2XQ==", + "requires": { + "node-fetch": "^2.2.0", + "unfetch": "^4.0.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -1955,6 +1870,13 @@ "lodash.once": "^4.0.0", "ms": "^2.1.1", "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "jsprim": { @@ -1988,16 +1910,16 @@ } }, "jwks-rsa": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.5.0.tgz", - "integrity": "sha512-Te8gKgrBktDVsf5HB6nxCYYqjAkCiuHgiOa5ZUSN3rYO8CeRkQePZkegsxVA3xOXiJsapIE8nd+ejvA35k6yOg==", - "requires": { - "@types/express-jwt": "0.0.34", - "debug": "^2.2.0", - "limiter": "^1.1.0", - "lru-memoizer": "^1.6.0", - "ms": "^2.0.0", - "request": "^2.73.0" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-1.5.1.tgz", + "integrity": "sha512-FcH0mrrfS/5CDArzw7y4AIsNJ15SkAb8XTmfEnpUDmEsUf/4KfSQifff7hYEyrZuKnhisn4L9Pme4fb/ZoHKqQ==", + "requires": { + "debug": "^2.6.9", + "jsonwebtoken": "^8.5.1", + "limiter": "^1.1.4", + "lru-memoizer": "^1.12.0", + "ms": "^2.1.1", + "request": "^2.88.0" }, "dependencies": { "debug": { @@ -2014,6 +1936,11 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -2146,6 +2073,13 @@ "fecha": "^2.3.3", "ms": "^2.1.1", "triple-beam": "^1.3.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "loose-envify": { @@ -2198,9 +2132,9 @@ "integrity": "sha1-bMWtOGJByrjniv+WT4cCjuyS2sU=" }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.40.0", @@ -2256,9 +2190,9 @@ "optional": true }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "mute-stream": { "version": "0.0.7", @@ -2278,9 +2212,9 @@ } }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "optional": true }, "natural-compare": { @@ -2306,6 +2240,11 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2595,9 +2534,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.1.32", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.32.tgz", + "integrity": "sha512-MHACAkHpihU/REGGPLj4sEfc/XKW2bheigvHO1dUqjaKigMp1C8+WLQYRGgeKFMsw5PMfegZcaN8IDXK/cD0+g==" }, "punycode": { "version": "1.3.2", @@ -2739,9 +2678,9 @@ } }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -2823,9 +2762,9 @@ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -2834,12 +2773,12 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { "debug": { @@ -2848,45 +2787,31 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "setprototypeof": { @@ -3043,6 +2968,23 @@ "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string_decoder": { @@ -3051,20 +2993,11 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -3123,8 +3056,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "symbol-observable": { "version": "1.0.1", @@ -3144,6 +3076,37 @@ "lodash": "^4.17.4", "slice-ansi": "1.0.0", "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "tc-bus-api-wrapper": { @@ -3196,11 +3159,6 @@ "topo": "3.x.x" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "tc-core-library-js": { "version": "github:appirio-tech/tc-core-library-js#d16413db30b1eed21c0cf426e185bedb2329ddab", "from": "github:appirio-tech/tc-core-library-js#v2.6", @@ -3361,6 +3319,11 @@ "mime-types": "~2.1.24" } }, + "unfetch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.1.0.tgz", + "integrity": "sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg==" + }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -3477,9 +3440,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", diff --git a/package.json b/package.json index 7aeddb1b..2b35c1f0 100644 --- a/package.json +++ b/package.json @@ -19,17 +19,19 @@ "standard": "^12.0.1" }, "dependencies": { - "aws-sdk": "^2.445.0", - "axios": "^0.18.0", + "aws-sdk": "^2.466.0", + "axios": "^0.19.0", "bluebird": "^3.5.1", "body-parser": "^1.15.1", - "config": "^3.0.0", + "config": "^3.0.1", "cors": "^2.7.1", "dynamoose": "^1.6.4", + "elasticsearch": "^15.1.1", "express": "^4.14.0", "express-fileupload": "^1.1.4", "express-interceptor": "^1.2.0", "get-parameter-names": "^0.3.0", + "http-aws-es": "^6.0.0", "http-status-codes": "^1.3.0", "joi": "^14.0.0", "jsonwebtoken": "^8.3.0", diff --git a/src/common/helper.js b/src/common/helper.js index 9c8cfcbd..69cf39ea 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -13,10 +13,14 @@ const m2mAuth = require('tc-core-library-js').auth.m2m const m2m = m2mAuth(_.pick(config, ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME'])) const axios = require('axios') const busApi = require('tc-bus-api-wrapper') +const elasticsearch = require('elasticsearch') // Bus API Client let busApiClient +// Elasticsearch client +let esClient + AWS.config.update({ s3: config.AMAZON.S3_API_VERSION, accessKeyId: config.AMAZON.AWS_ACCESS_KEY_ID, @@ -464,6 +468,35 @@ async function postBusEvent (topic, payload) { }) } +/** + * Get ES Client + * @return {Object} Elasticsearch Client Instance + */ +function getESClient () { + if (esClient) { + return esClient + } + const esHost = config.get('ES.HOST') + // AWS ES configuration is different from other providers + if (/.*amazonaws.*/.test(esHost)) { + esClient = elasticsearch.Client({ + apiVersion: config.get('ES.API_VERSION'), + hosts: esHost, + connectionClass: require('http-aws-es'), // eslint-disable-line global-require + amazonES: { + region: config.get('AMAZON.AWS_REGION'), + credentials: new AWS.EnvironmentCredentials('AWS') + } + }) + } else { + esClient = new elasticsearch.Client({ + apiVersion: config.get('ES.API_VERSION'), + hosts: esHost + }) + } + return esClient +} + module.exports = { wrapExpress, autoWrapExpress, @@ -485,5 +518,6 @@ module.exports = { getChallengeResources, getUserGroups, ensureNoDuplicateOrNullElements, - postBusEvent + postBusEvent, + getESClient } diff --git a/src/services/ChallengeService.js b/src/services/ChallengeService.js index 988f5582..494ad642 100644 --- a/src/services/ChallengeService.js +++ b/src/services/ChallengeService.js @@ -5,11 +5,13 @@ const _ = require('lodash') const Joi = require('joi') const uuid = require('uuid/v4') +const config = require('config') const helper = require('../common/helper') const logger = require('../common/logger') const errors = require('../common/errors') const constants = require('../../app-constants') const models = require('../models') +const HttpStatus = require('http-status-codes') /** * Filter challenges by groups access @@ -56,18 +58,55 @@ async function ensureAccessibleByGroupsAccess (currentUser, challenge) { * @returns {Object} the search result */ async function searchChallenges (currentUser, criteria) { - const list = await helper.scan('Challenge') - let records = _.filter(list, e => helper.partialMatch(criteria.name, e.name) && - helper.partialMatch(criteria.description, e.description) && - (_.isUndefined(criteria.createdDateStart) || criteria.createdDateStart.getTime() <= e.created.getTime()) && - (_.isUndefined(criteria.createdDateEnd) || criteria.createdDateEnd.getTime() >= e.created.getTime()) && - (_.isUndefined(criteria.updatedDateStart) || (!_.isUndefined(e.updated) && criteria.updatedDateStart.getTime() <= e.updated.getTime())) && - (_.isUndefined(criteria.updatedDateEnd) || (!_.isUndefined(e.updated) && criteria.updatedDateEnd.getTime() >= e.updated.getTime())) && - (_.isUndefined(criteria.createdBy) || criteria.createdBy.toLowerCase() === e.createdBy.toLowerCase()) - ) - records = await filterChallengesByGroupsAccess(currentUser, records) - const total = records.length - const result = records.slice((criteria.page - 1) * criteria.perPage, criteria.page * criteria.perPage) + // construct ES query + const boolQuery = [] + _.forIn(_.omit(criteria, ['page', 'perPage', 'tag', 'group', 'createdDateStart', 'createdDateEnd', + 'updatedDateStart', 'updatedDateEnd']), (value, key) => { + const filter = { match_phrase: {} } + filter.match_phrase[key] = value + boolQuery.push(filter) + }) + if (criteria.tag) { + boolQuery.push({ match_phrase: { tags: criteria.tag } }) + } + if (criteria.group) { + boolQuery.push({ match_phrase: { groups: criteria.group } }) + } + if (criteria.createdDateStart) { + boolQuery.push({ range: { created: { gte: criteria.createdDateStart } } }) + } + if (criteria.createdDateEnd) { + boolQuery.push({ range: { created: { lte: criteria.createdDateEnd } } }) + } + if (criteria.updatedDateStart) { + boolQuery.push({ range: { updated: { gte: criteria.updatedDateStart } } }) + } + if (criteria.updatedDateEnd) { + boolQuery.push({ range: { updated: { lte: criteria.updatedDateEnd } } }) + } + + const esQuery = { + index: config.get('ES.ES_INDEX'), + type: config.get('ES.ES_TYPE'), + size: criteria.perPage, + from: (criteria.page - 1) * criteria.perPage, // Es Index starts from 0 + body: { + query: { + bool: { + filter: boolQuery + } + }, + sort: [{ 'created': { 'order': 'asc' } }] + } + } + + // get ES client + const esClient = helper.getESClient() + // Search with constructed query + const docs = await esClient.search(esQuery) + // Extract data from hits + const total = docs.hits.total + const result = _.map(docs.hits.hits, item => item._source) const typeList = await helper.scan('ChallengeType') const typeMap = new Map() @@ -87,13 +126,25 @@ searchChallenges.schema = { criteria: Joi.object().keys({ page: Joi.page(), perPage: Joi.perPage(), + id: Joi.optionalId(), + typeId: Joi.optionalId(), + track: Joi.string(), name: Joi.string(), description: Joi.string(), + timelineTemplateId: Joi.optionalId(), + reviewType: Joi.string(), + tag: Joi.string(), + projectId: Joi.number().integer().positive(), + forumId: Joi.number().integer().positive(), + legacyId: Joi.number().integer().positive(), + status: Joi.string().valid(_.values(constants.challengeStatuses)), + group: Joi.string(), createdDateStart: Joi.date(), createdDateEnd: Joi.date(), updatedDateStart: Joi.date(), updatedDateEnd: Joi.date(), - createdBy: Joi.string() + createdBy: Joi.string(), + updatedBy: Joi.string() }) } @@ -187,6 +238,7 @@ createChallenge.schema = { reviewType: Joi.string().required(), tags: Joi.array().items(Joi.string().required()).min(1).required(), // tag names projectId: Joi.number().integer().positive().required(), + legacyId: Joi.number().integer().positive(), forumId: Joi.number().integer().positive(), startDate: Joi.date().required(), status: Joi.string().valid(_.values(constants.challengeStatuses)).required(), @@ -228,7 +280,24 @@ async function populateSettings (data) { * @returns {Object} the challenge with given id */ async function getChallenge (currentUser, id) { - const challenge = await helper.getById('Challenge', id) + const esClient = helper.getESClient() + + // get challenge from Elasticsearch + let challenge + try { + challenge = await esClient.getSource({ + index: config.get('ES.ES_INDEX'), + type: config.get('ES.ES_TYPE'), + id + }) + } catch (e) { + if (e.statusCode === HttpStatus.NOT_FOUND) { + throw new errors.NotFoundError(`Challenge of id ${id} is not found.`) + } else { + throw e + } + } + // check groups authorization await ensureAccessibleByGroupsAccess(currentUser, challenge) @@ -347,7 +416,7 @@ async function update (currentUser, challengeId, data, isFull) { newAttachments = await helper.getByIds('Attachment', data.attachmentIds || []) } - if (challenge.createdBy.toLowerCase() !== currentUser.handle.toLowerCase() && !currentUser.isMachine && !helper.hasAdminRole(currentUser)) { + if (!currentUser.isMachine && !helper.hasAdminRole(currentUser) && challenge.createdBy.toLowerCase() !== currentUser.handle.toLowerCase()) { throw new errors.ForbiddenError(`Only M2M, admin or challenge's copilot can perform modification.`) } @@ -433,7 +502,7 @@ async function update (currentUser, challengeId, data, isFull) { oldValue, newValue, created: new Date(), - createdBy: currentUser.handle + createdBy: currentUser.handle || currentUser.sub }) } } @@ -448,9 +517,11 @@ async function update (currentUser, challengeId, data, isFull) { oldValue: JSON.stringify(challenge.challengeSettings), newValue: 'NULL', created: new Date(), - createdBy: currentUser.handle + createdBy: currentUser.handle || currentUser.sub }) delete challenge.challengeSettings + // send null to Elasticsearch to clear the field + data.challengeSettings = null } if (isFull && _.isUndefined(data.attachmentIds) && challenge.attachments) { if (!updateDetails['$DELETE']) { @@ -464,9 +535,11 @@ async function update (currentUser, challengeId, data, isFull) { oldValue: JSON.stringify(challenge.attachments), newValue: 'NULL', created: new Date(), - createdBy: currentUser.handle + createdBy: currentUser.handle || currentUser.sub }) delete challenge.attachments + // send null to Elasticsearch to clear the field + data.attachments = null } if (isFull && _.isUndefined(data.groups) && challenge.groups) { if (!updateDetails['$DELETE']) { @@ -480,9 +553,29 @@ async function update (currentUser, challengeId, data, isFull) { oldValue: JSON.stringify(challenge.groups), newValue: 'NULL', created: new Date(), - createdBy: currentUser.handle + createdBy: currentUser.handle || currentUser.sub }) delete challenge.groups + // send null to Elasticsearch to clear the field + data.groups = null + } + if (isFull && _.isUndefined(data.legacyId) && challenge.legacyId) { + if (!updateDetails['$DELETE']) { + updateDetails['$DELETE'] = {} + } + updateDetails['$DELETE'].legacyId = null + auditLogs.push({ + id: uuid(), + challengeId, + fieldName: 'legacyId', + oldValue: JSON.stringify(challenge.legacyId), + newValue: 'NULL', + created: new Date(), + createdBy: currentUser.handle || currentUser.sub + }) + delete challenge.legacyId + // send null to Elasticsearch to clear the field + data.legacyId = null } await models.Challenge.update({ id: challengeId }, updateDetails) @@ -494,6 +587,7 @@ async function update (currentUser, challengeId, data, isFull) { _.assign(challenge, data) if (!_.isUndefined(newAttachments)) { challenge.attachments = newAttachments + data.attachments = newAttachments } // delete unused attachments @@ -553,6 +647,7 @@ fullyUpdateChallenge.schema = { reviewType: Joi.string().required(), tags: Joi.array().items(Joi.string().required()).min(1).required(), // tag names projectId: Joi.number().integer().positive().required(), + legacyId: Joi.number().integer().positive(), forumId: Joi.number().integer().positive(), startDate: Joi.date(), status: Joi.string().valid(_.values(constants.challengeStatuses)).required(), @@ -607,6 +702,7 @@ partiallyUpdateChallenge.schema = { tags: Joi.array().items(Joi.string().required()).min(1), // tag names projectId: Joi.number().integer().positive(), forumId: Joi.number().integer().positive(), + legacyId: Joi.number().integer().positive(), status: Joi.string().valid(_.values(constants.challengeStatuses)), attachmentIds: Joi.array().items(Joi.optionalId()), groups: Joi.array().items(Joi.string()) // group names