diff --git a/config.js b/config.js index e5b3452..874048e 100644 --- a/config.js +++ b/config.js @@ -3,16 +3,19 @@ module.exports = { jwksUri: process.env.AZUREAD_JWK_URI, issuer: process.env.AZUREAD_ISSUER_URI, audience: process.env.AZUREAD_CLIENTID - }, - AZUREAD_ALLOWEDGROUPS: process.env.AZUREAD_ALLOWEDGROUPS, - APIKEYS: process.env.APIKEYS, - APIKEYS_MINIMUM_LENGTH: process.env.APIKEYS_MINIMUM_LENGTH || 24, - AZURE_BLOB_CONNECTIONSTRING: process.env.AZURE_BLOB_CONNECTIONSTRING, - AZURE_BLOB_CONTAINERNAME: process.env.AZURE_BLOB_CONTAINERNAME, - BYPASS_REGISTRATION_THRESHOLD: process.env.BYPASS_REGISTRATION_THRESHOLD, - VTFK_MATRIKKELPROXY_BASEURL: process.env.VTFK_MATRIKKELPROXY_BASEURL, - VTFK_MATRIKKELPROXY_APIKEY: process.env.VTFK_MATRIKKELPROXY_APIKEY, - VTFK_PDFGENERATOR_ENDPOINT: process.env.VTFK_PDFGENERATOR_ENDPOINT, - VTFK_P360_ARCHIVE_ENDPOINT: process.env.VTFK_P360_ARCHIVE_ENDPOINT, - VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY: process.env.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY -} \ No newline at end of file + }, + AZUREAD_ALLOWEDGROUPS: process.env.AZUREAD_ALLOWEDGROUPS, + APIKEYS: process.env.APIKEYS, + APIKEYS_MINIMUM_LENGTH: process.env.APIKEYS_MINIMUM_LENGTH || 24, + AZURE_BLOB_CONNECTIONSTRING: process.env.AZURE_BLOB_CONNECTIONSTRING, + AZURE_BLOB_CONTAINERNAME: process.env.AZURE_BLOB_CONTAINERNAME, + BYPASS_REGISTRATION_THRESHOLD: process.env.BYPASS_REGISTRATION_THRESHOLD, + VTFK_MATRIKKELPROXY_BASEURL: process.env.VTFK_MATRIKKELPROXY_BASEURL, + VTFK_MATRIKKELPROXY_APIKEY: process.env.VTFK_MATRIKKELPROXY_APIKEY, + VTFK_PDFGENERATOR_ENDPOINT: process.env.VTFK_PDFGENERATOR_ENDPOINT, + VTFK_P360_ARCHIVE_ENDPOINT: process.env.VTFK_P360_ARCHIVE_ENDPOINT, + VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY: process.env.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY, + VTFK_STATISTICS_KEY: process.env.VTFK_STATISTICS_KEY, + VTFK_STATISTICS_URL: process.env.VTFK_STATISTICS_URL, + TEAMS_WEBHOOK_URL: process.env.TEAMS_WEBHOOK_URL +} diff --git a/func-completedispatch/index.js b/func-completedispatch/index.js index 8039795..8f251c6 100644 --- a/func-completedispatch/index.js +++ b/func-completedispatch/index.js @@ -1,27 +1,27 @@ const Dispatches = require('../sharedcode/models/dispatches.js') -const getDb = require('../sharedcode/connections/masseutsendelseDB.js'); -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { - // Get the ID from the request + // Get the ID from the request const id = context.bindingData.id - if(!id) throw new HTTPError(400, 'You cannot complete a dispatch without providing an id'); + if (!id) throw new HTTPError(400, 'You cannot complete a dispatch without providing an id') // Authentication / Authorization - const requestor = await require('../sharedcode/auth/auth').auth(req); + const requestor = await require('../sharedcode/auth/auth').auth(req) - // Await the DB conection + // Await the DB conection await getDb() - // Get the existing disptach object - let existingDispatch = await Dispatches.findById(id).lean() - if(!existingDispatch) throw new HTTPError(404, `Dispatch with id ${id} could not be found`) - if(existingDispatch.status !== 'approved') throw new HTTPError(404, `Cannot complete a dispatch that is not approved`) + // Get the existing disptach object + const existingDispatch = await Dispatches.findById(id).lean() + if (!existingDispatch) throw new HTTPError(404, `Dispatch with id ${id} could not be found`) + if (existingDispatch.status !== 'approved') throw new HTTPError(404, 'Cannot complete a dispatch that is not approved') // Set completed information - let completedData = { + const completedData = { status: 'completed', owners: [], excludedOwners: [], @@ -32,13 +32,13 @@ module.exports = async function (context, req) { modifiedByDepartment: requestor.department, modifiedById: requestor.id } - if(req.body?.e18Id) completedData.e18Id = req.body.e18Id; + if (req.body?.e18Id) completedData.e18Id = req.body.e18Id + + // Update the dispatch + const updatedDispatch = await Dispatches.findByIdAndUpdate(id, completedData, { new: true }) - // Update the dispatch - const updatedDispatch = await Dispatches.findByIdAndUpdate(id, completedData, { new: true}) - return await azfHandleResponse(updatedDispatch, context, req) } catch (err) { return await azfHandleError(err, context, req) } -} \ No newline at end of file +} diff --git a/func-editdispatches/index.js b/func-editdispatches/index.js index b4445dc..456395a 100644 --- a/func-editdispatches/index.js +++ b/func-editdispatches/index.js @@ -1,102 +1,102 @@ - const Dispatches = require('../sharedcode/models/dispatches.js') - const getDb = require('../sharedcode/connections/masseutsendelseDB.js'); - const utils = require('@vtfk/utilities'); - const HTTPError = require('../sharedcode/vtfk-errors/httperror'); - const validate = require('../sharedcode/validators/dispatches').validate; - const blobClient = require('@vtfk/azure-blob-client'); - const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); - - module.exports = async function (context, req) { +const Dispatches = require('../sharedcode/models/dispatches.js') +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const utils = require('@vtfk/utilities') +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const validate = require('../sharedcode/validators/dispatches').validate +const blobClient = require('@vtfk/azure-blob-client') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') + +module.exports = async function (context, req) { try { // Strip away som fields that should not bed set by the request. - req.body = utils.removeKeys(req.body, ['validatedArchivenumber', 'createdTimestamp', 'createdBy', 'createdById', 'createdByDepartment', 'modifiedTimestamp', 'modifiedBy', 'modifiedById', 'modifiedByDepartment']); - delete req.body._id; + req.body = utils.removeKeys(req.body, ['validatedArchivenumber', 'createdTimestamp', 'createdBy', 'createdById', 'createdByDepartment', 'modifiedTimestamp', 'modifiedBy', 'modifiedById', 'modifiedByDepartment']) + delete req.body._id // Authentication / Authorization - const requestor = await require('../sharedcode/auth/auth').auth(req); + const requestor = await require('../sharedcode/auth/auth').auth(req) // Update modified by - req.body.modifiedBy = requestor.name; - req.body.modifiedById = requestor.id; - req.body.modifiedTimestamp = new Date(); - req.body.modifiedByEmail = requestor.email; - req.body.modifiedByDepartment = requestor.department; + req.body.modifiedBy = requestor.name + req.body.modifiedById = requestor.id + req.body.modifiedTimestamp = new Date() + req.body.modifiedByEmail = requestor.email + req.body.modifiedByDepartment = requestor.department // Figure out if any items should be unset - let unsets = {}; - if(Object.keys(req.body).length === 2 && !req.body.template) unsets.template = 1; - if(req.body.attachments && !req.body.template) unsets.template = 1; + const unsets = {} + if (Object.keys(req.body).length === 2 && !req.body.template) unsets.template = 1 + if (req.body.attachments && !req.body.template) unsets.template = 1 // Get ID from request const id = context.bindingData.id - - // Await the Db conection + + // Await the Db conection await getDb() - // Get the existing disptach object - let existingDispatch = await Dispatches.findById(id).lean() - if(!existingDispatch) throw new HTTPError(404, `Dispatch with id ${id} could not be found` ) + // Get the existing disptach object + const existingDispatch = await Dispatches.findById(id).lean() + if (!existingDispatch) throw new HTTPError(404, `Dispatch with id ${id} could not be found`) // If the status is running or completed, only status is allowed to be updated - if(existingDispatch.status === 'inprogress' && req.body.status !== 'completed') throw new HTTPError(400, 'No changes can be done to a running dispatch except setting it to completed'); - if(existingDispatch.status === 'inprogress' && req.body.status === 'completed') { - const result = await Dispatches.findByIdAndUpdate(id, { status: 'completed' }, { new: true}); + if (existingDispatch.status === 'inprogress' && req.body.status !== 'completed') throw new HTTPError(400, 'No changes can be done to a running dispatch except setting it to completed') + if (existingDispatch.status === 'inprogress' && req.body.status === 'completed') { + const result = await Dispatches.findByIdAndUpdate(id, { status: 'completed' }, { new: true }) return context.res.status(201).send(result) } // Failsafe - if(existingDispatch.status === 'inprogress' || existingDispatch.status === 'completed') throw new HTTPError(400, 'No changes can be done to running or completed dispatches'); + if (existingDispatch.status === 'inprogress' || existingDispatch.status === 'completed') throw new HTTPError(400, 'No changes can be done to running or completed dispatches') // Update fields - req.body.validatedArchivenumber = existingDispatch.validatedArchivenumber; + req.body.validatedArchivenumber = existingDispatch.validatedArchivenumber // Set approval information - if(existingDispatch.status === 'notapproved' && req.body.status === 'approved') { - req.body.approvedBy = requestor.name; - req.body.approvedById = requestor.id; - req.body.approvedByEmail = requestor.email; - req.body.approvedTimestamp = new Date(); + if (existingDispatch.status === 'notapproved' && req.body.status === 'approved') { + req.body.approvedBy = requestor.name + req.body.approvedById = requestor.id + req.body.approvedByEmail = requestor.email + req.body.approvedTimestamp = new Date() } - if(req.body.status === 'notapproved') { - req.body.approvedBy = ''; - req.body.approvedById = ''; - req.body.approvedTimestamp = ''; + if (req.body.status === 'notapproved') { + req.body.approvedBy = '' + req.body.approvedById = '' + req.body.approvedTimestamp = '' } // Validate dispatch against schenarios that cannot be described by schema // const toValidate = {...existingDispatch, ...req.body} - await validate(req.body); - req.body.validatedArchivenumber = req.body.archivenumber; + await validate(req.body) + req.body.validatedArchivenumber = req.body.archivenumber // Validate attachments - const allowedExtensions = ['pdf', 'xlsx', 'xls', 'rtf', 'msg', 'ppt', 'pptx', 'docx', 'doc', 'png', 'jpg', 'jpeg']; - if(req.body.attachments && Array.isArray(req.body.attachments) && req.body.attachments.length > 0) { + const allowedExtensions = ['pdf', 'xlsx', 'xls', 'rtf', 'msg', 'ppt', 'pptx', 'docx', 'doc', 'png', 'jpg', 'jpeg'] + if (req.body.attachments && Array.isArray(req.body.attachments) && req.body.attachments.length > 0) { req.body.attachments.forEach((i) => { - const split = i.name.split('.'); - if(split.length === 1) throw new HTTPError(400, 'All filenames must have an extension') - const extension = split[split.length - 1]; - if(!allowedExtensions.includes(extension.toLowerCase())) throw new HTTPError(400, `The file extension ${extension} is not allowed`); + const split = i.name.split('.') + if (split.length === 1) throw new HTTPError(400, 'All filenames must have an extension') + const extension = split[split.length - 1] + if (!allowedExtensions.includes(extension.toLowerCase())) throw new HTTPError(400, `The file extension ${extension} is not allowed`) blobClient.unallowedPathCharacters.forEach((char) => { - if(i.name.includes(char)) throw new HTTPError(400, `${i} cannot contain illegal character ${char}`); + if (i.name.includes(char)) throw new HTTPError(400, `${i} cannot contain illegal character ${char}`) }) }) } - // Update the dispatch - const updatedDispatch = await Dispatches.findByIdAndUpdate(id, { ...req.body, $unset: unsets }, { new: true}) + // Update the dispatch + const updatedDispatch = await Dispatches.findByIdAndUpdate(id, { ...req.body, $unset: unsets }, { new: true }) // Figure out the names of existing and requested attachments - const existingNames = existingDispatch.attachments ? existingDispatch.attachments.map((i) => i.name) : []; - const requestNames = req.body.attachments ? req.body.attachments.map((i) => i.name) : []; + const existingNames = existingDispatch.attachments ? existingDispatch.attachments.map((i) => i.name) : [] + const requestNames = req.body.attachments ? req.body.attachments.map((i) => i.name) : [] // Check for attachments to add - if(req.body.attachments) { - const attachmentsToAdd = req.body.attachments.filter((i) => !existingNames.includes(i.name) || i.data); - const attachmentsToRemove = existingNames.filter((i) => !requestNames.includes(i)); - + if (req.body.attachments) { + const attachmentsToAdd = req.body.attachments.filter((i) => !existingNames.includes(i.name) || i.data) + const attachmentsToRemove = existingNames.filter((i) => !requestNames.includes(i)) + // Upload attachments if applicable - if(process.env.NODE_ENV !== 'test') attachmentsToAdd.forEach(async (i) => { await blobClient.save(`${id}/${i.name}`, i.data); }) + if (process.env.NODE_ENV !== 'test') attachmentsToAdd.forEach(async (i) => { await blobClient.save(`${id}/${i.name}`, i.data) }) // Remove attachments if applicable - if(process.env.NODE_ENV !== 'test') attachmentsToRemove.forEach(async (i) => { await blobClient.remove(`${id}/${i}`); }) + if (process.env.NODE_ENV !== 'test') attachmentsToRemove.forEach(async (i) => { await blobClient.remove(`${id}/${i}`) }) } // Return the dispatch diff --git a/func-getBrreg/index.js b/func-getBrreg/index.js index 2c585df..ba986bc 100644 --- a/func-getBrreg/index.js +++ b/func-getBrreg/index.js @@ -1,17 +1,17 @@ -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); -const axios = require('axios'); +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') +const axios = require('axios') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) // Get ID from request const id = context.bindingData.id - if(!id) throw new HTTPError(400, 'No dispatch id was provided'); + if (!id) throw new HTTPError(400, 'No dispatch id was provided') // Make the request - const response = await axios.get(`https://data.brreg.no/enhetsregisteret/api/enheter/${id}`); + const response = await axios.get(`https://data.brreg.no/enhetsregisteret/api/enheter/${id}`) // Return the brreg info return await azfHandleResponse(response.data, context, req) diff --git a/func-getblob/index.js b/func-getblob/index.js index 76cacd4..d8794b3 100644 --- a/func-getblob/index.js +++ b/func-getblob/index.js @@ -1,29 +1,29 @@ const HTTPError = require('../sharedcode/vtfk-errors/httperror') -const blobClient = require('@vtfk/azure-blob-client'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const blobClient = require('@vtfk/azure-blob-client') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); - + await require('../sharedcode/auth/auth').auth(req) + // Input validation - if (!context.bindingData.id) throw new HTTPError(400, 'dispatchId must be specified'); - if (!context.bindingData.name) throw new HTTPError(400, 'name must be specified'); + if (!context.bindingData.id) throw new HTTPError(400, 'dispatchId must be specified') + if (!context.bindingData.name) throw new HTTPError(400, 'name must be specified') // Retreive the file let file = '' - if(process.env.NODE_ENV !== 'test') { + if (process.env.NODE_ENV !== 'test') { file = await blobClient.get(`${context.bindingData.id}/${context.bindingData.name}`) if (!file || !file.data) throw new HTTPError(404, 'No files found, check if you passed the right filename and/or the right dispatchId') } else { file = context.bindingData.file - if(!context.bindingData.file) throw new HTTPError(400, 'No Files found') + if (!context.bindingData.file) throw new HTTPError(400, 'No Files found') } - + // Return the file return await azfHandleResponse(file, context, req) } catch (err) { return await azfHandleError(err, context, req) } -} \ No newline at end of file +} diff --git a/func-getdispatches/index.js b/func-getdispatches/index.js index 522dfe9..c278955 100644 --- a/func-getdispatches/index.js +++ b/func-getdispatches/index.js @@ -1,22 +1,22 @@ const Dispatches = require('../sharedcode/models/dispatches.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) - // Await the DB connection + // Await the DB connection await getDb() // Find all disptaches - let dispatches = []; + let dispatches = [] if (req.query?.full === true || req.query?.full === 'true') dispatches = await Dispatches.find({}) else dispatches = await Dispatches.find({}).select('-owners -excludedOwners -matrikkelUnitsWithoutOwners') // If no dispatches was found - if (!dispatches) dispatches = []; + if (!dispatches) dispatches = [] // Return the disptaches return await azfHandleResponse(dispatches, context, req) diff --git a/func-getdispatchesbyid/index.js b/func-getdispatchesbyid/index.js index 713fc21..b093f14 100644 --- a/func-getdispatchesbyid/index.js +++ b/func-getdispatchesbyid/index.js @@ -1,28 +1,27 @@ const Dispatches = require('../sharedcode/models/dispatches.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); - +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) // Get ID from request const id = context.bindingData.id - if(!id) throw new HTTPError(400, 'No dispatch id was provided'); + if (!id) throw new HTTPError(400, 'No dispatch id was provided') // Await the database await getDb() - //Find Dispatch by ID - let disptach = await Dispatches.findById(id) + // Find Dispatch by ID + const disptach = await Dispatches.findById(id) if (!disptach) throw new HTTPError(404, `Disptach with id ${id} could no be found`) - //Return the dispatch object - let disptachById = await Dispatches.findById(id, req.body, { new: true }) - + // Return the dispatch object + const disptachById = await Dispatches.findById(id, req.body, { new: true }) + return await azfHandleResponse(disptachById, context, req) } catch (err) { return await azfHandleError(err, context, req) diff --git a/func-gethandlejobs/function.json b/func-gethandlejobs/function.json new file mode 100644 index 0000000..3d61ba6 --- /dev/null +++ b/func-gethandlejobs/function.json @@ -0,0 +1,10 @@ +{ + "bindings": [ + { + "name": "myTimer", + "type": "timerTrigger", + "direction": "in", + "schedule": "0 */10 * * * *" + } + ] +} \ No newline at end of file diff --git a/func-gethandlejobs/index.js b/func-gethandlejobs/index.js new file mode 100644 index 0000000..b172e6e --- /dev/null +++ b/func-gethandlejobs/index.js @@ -0,0 +1,506 @@ +// Models +const Jobs = require('../sharedcode/models/jobs.js') +const Dispatches = require('../sharedcode/models/dispatches.js') + +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const { logger, logConfig } = require('@vtfk/logger') +const { syncRecipient, createCaseDocument, addAttachment, dispatchDocuments } = require('../sharedcode/vtfk/archive.js') +const { createStatistics } = require('../sharedcode/vtfk/statistics.js') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') +const { alertTeams } = require('../sharedcode/vtfk/alertTeams.js') + +logConfig({ + prefix: 'azf-masseutsendelse-api - gethandlejobs' +}) + +module.exports = async function (context, req) { + try { + // logger('info', 'Checking AUTH') + // await require('../sharedcode/auth/auth.js').auth(req) + // Await the DB connection + logger('info', 'Connecting to DB') + await getDb() + // Find the jobs + logger('info', 'Looking for jobs to handle') + const jobs = await Jobs.findOne({ + $or: [ + { 'status.syncRecipients': 'waiting' }, + { 'status.createCaseDocument': 'waiting' }, + { 'status.uploadAttachments': 'waiting' }, + { 'status.issueDispatch': 'waiting' }, + { 'status.createStatistics': 'waiting' }, + { 'status.syncRecipients': 'inprogress' }, + { 'status.createCaseDocument': 'inprogress' }, + { 'status.uploadAttachments': 'inprogress' }, + { 'status.issueDispatch': 'inprogress' }, + { 'status.createStatistics': 'inprogress' } + ] + }) + // Handle if no jobs. + if (!jobs) { + logger('info', 'No jobs to handle found, exit') + // await alertTeams([], 'completed', [] , 'job', context.executionContext.functionName) + // await alertTeams({}, 'completed', {}, 'This job is done', 'et endpoint') Dette er ikke teams webhooken glad i + return await azfHandleResponse('No jobs found', context, req) + } + + const taskArr = [] + const failedJobsArr = [] + let stopHandling = false + + const jobId = jobs._id + logger('info', `Found a job with id: ${jobId}`) + logger('info', 'Checking the job status') + for (const job in jobs.status) { + if (Object.hasOwnProperty.call(jobs.status, job)) { + const status = jobs.status[job] + // Check if any jobs have failed + if (status === 'failed') { + if (job === 'syncRecipients' || job === 'createCaseDocument' || job === 'uploadAttachments' || job === 'issueDispatch') { + logger('info', `The job: ${job} have status failed.`) + stopHandling = true + } + const failedJobsObj = { [job]: jobs.tasks[job] } + for (const task of failedJobsObj[job]) { + if (task.status === 'failed') { + failedJobsArr.push({ [job]: task }) + } + } + // Update the job with the failed tasks + logger('info', `Updating the failedJobs array for ${jobId}`) + try { + const filter = { _id: jobId } + const update = { + $push: { + failedTasks: failedJobsArr + } + } + await Jobs.findOneAndUpdate(filter, update, { + new: true, + upsert: true + }) + logger('info', `The failedJobs array for ${jobId} have been updated`) + logger('error', `The job: ${job} with mongoDB id: ${jobId} have failed 7 times and the whole job is stopped!`) + await alertTeams('Job failed 7 times, please look at it!', 'error', failedJobsArr, [], context.executionContext.functionName) + } catch (error) { + await alertTeams(JSON.stringify(error), 'error', 'pushing failed job to mongodb', [], jobId, context.executionContext.functionName) + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + throw new Error(JSON.stringify(error), 'error', 'pushing failed job to mongodb', jobId, context.executionContext.functionName) + } + } + // Find the job + if (status === 'waiting' || status === 'inprogress') { + if (((job === 'createCaseDocument' || job === 'issueDispatch' || job === 'uploadAttachments') && stopHandling === true) || (job === 'issueDispatch' && stopHandling === true)) { + await alertTeams(`Current job: ${job} and stopHandling is: ${stopHandling}. DispatchID: ${jobId}. You need to look into it!`) + } else { + logger('info', 'Pushing the tasks to the task array.') + const jobsObj = { [job]: jobs.tasks[job] } + taskArr.push(jobsObj) + } + } + } + } + // Håndter den første jobben, sett den til completed om alt gikk bra. Kjør på nytt om 5min. + const currentJob = Object.keys(taskArr[0]) + for (const job in currentJob) { + if (Object.hasOwnProperty.call(currentJob, job)) { + const jobToHandle = currentJob[job] + logger('info', `Current Job: ${jobToHandle}`) + if (jobToHandle === 'syncRecipients') { + // Handle the job + try { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const updatedTask = [] + let numbOfFailedTasks = 0 + logger('info', 'Checking each task of currentTask') + for (const task of currentTasks) { + const ssn = task.ssn + const method = task.method + const doc = await Jobs.findOne({ _id: jobId }) + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + const currentTaskIndex = doc.tasks.syncRecipients.findIndex(task => task.ssn === ssn) + logger('info', `Working with the task with index: ${currentTaskIndex}.`) + if (task.status === 'waiting' || task.status === 'inprogress' || task.status === 'failed') { + if (task.status === 'failed' && task.retry === 7) { + logger('info', `The task with index: ${currentTaskIndex} have failed 7 times. Whole job is set to failed`) + const filter = { _id: jobId } + const update = { + 'status.syncRecipients': 'failed' + } + updatedDispatch = await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + try { + logger('info', `Syncing recipient using: ${method}`) + const res = await syncRecipient(ssn, method) + logger('info', 'Recipient synced') + if (currentTaskIndex !== -1) { + if (doc.tasks.syncRecipients[currentTaskIndex].status === 'completed') { + // Push completed tasks to the updatedTask array. + updatedTask.push(doc.tasks.syncRecipients[currentTaskIndex]) + } else { + doc.tasks.syncRecipients[currentTaskIndex].status = 'completed' + const data = Object.assign({}, doc.tasks.syncRecipients[currentTaskIndex], { res }) + // Update the correct object with status "completed" and with the data. + updatedTask.push(data) + } + } else { + logger('error', `Failed Syncing recipient using: ${method} in job: ${job} with mongoDB id: ${jobId}`) + await alertTeams(`Failed Syncing recipient using: ${method} in job: ${job}`, 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } catch (error) { + try { + logger('info', 'Handling the failed task, updating') + numbOfFailedTasks += 1 + await alertTeams(JSON.stringify(error.response.data), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + logger('error', `The job: ${job} with mongoDB id: ${jobId} failed. Task with the index ${currentTaskIndex} failed. Check the teams warning for more info!`) + const errorObj = { + msg: error.response.data, + retry: doc.tasks.syncRecipients[currentTaskIndex]?.retry ? doc.tasks.syncRecipients[currentTaskIndex].retry += 1 : 1 + } + logger('info', `Task with the index: ${currentTaskIndex} is set to failed`) + doc.tasks.syncRecipients[currentTaskIndex].status = 'failed' + const data = Object.assign({}, doc.tasks.syncRecipients[currentTaskIndex], errorObj) + // Update the correct object with status "failed" and with the data. + updatedTask.push(data) + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } + } else if (task.status === 'completed') { + updatedTask.push(doc.tasks.syncRecipients[currentTaskIndex]) + } + } + const filter = { _id: jobId } + const update = { + 'status.syncRecipients': numbOfFailedTasks === 0 ? 'completed' : 'inprogress', + 'tasks.syncRecipients': updatedTask + } + logger('info', `Updating the job with the id: ${jobId}`) + updatedDispatch = await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'createCaseDocument') { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + // Current case we're working with. + const currentCase = doc.tasks.createCaseDocument[0] + // Array of attachments that needs the documentNumber retunren from the createCaseDocumnet Job. + const uploadAttachmentsCopy = doc.tasks.uploadAttachments + // Define the retry prop if not found. If found assume we already tried to finish the job but failed and add 1 to the count. + currentCase?.retry ? currentCase.retry += 1 : currentCase.retry = 0 + try { + if (currentTasks[0]?.retry === 7) { + const filter = { _id: jobId } + const update = { + 'status.createCaseDocument': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } else { + // There's only one casedocument for each task. Index[0] Is fine. + logger('info', 'Creating the case object') + const caseObj = { + method: currentTasks[0].method, + title: currentTasks[0].data.parameter.title, + caseNumber: currentTasks[0].data.parameter.caseNumber, + date: currentTasks[0].data.parameter.date, + contacts: currentTasks[0].data.parameter.contacts, + attachments: currentTasks[0].data.parameter.attachments, + paragraph: currentTasks[0].data.parameter.paragraph, + responsiblePersonEmail: currentTasks[0].data.parameter.responsiblePersonEmail + } + // Make the request + logger('info', 'Trying to create the case document') + const caseDoc = await createCaseDocument( + caseObj.method, + caseObj.title, + caseObj.caseNumber, + caseObj.date, + caseObj.contacts, + caseObj.attachments, + caseObj.paragraph, + caseObj.responsiblePersonEmail + ) + logger('info', 'Case document created') + // Just for testing + // const caseDocSampleReturn = { Recno: 212144, DocumentNumber: '23/00024-10' } + + for (const attachment of uploadAttachmentsCopy) { + attachment.dataMapping = caseDoc.DocumentNumber + } + + const filter = { _id: jobId } + const update = { + 'status.createCaseDocument': 'completed', + 'tasks.createCaseDocument': currentCase, + 'tasks.uploadAttachments': uploadAttachmentsCopy + } + logger('info', `Updating job with id: ${jobId}`) + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', `Job with id: ${jobId} updated`) + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'createCaseDocument', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'uploadAttachments') { + // Handle the job + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + // Array of attachments that needs the documentNumber retunren from the createCaseDocumnet Job. + const issueDispatchCopy = doc.tasks.issueDispatch + const attachments = [] + let currentTaskIndex + try { + for (const attachment of currentTasks) { + // method, documentNumber, base64, format, title + const title = attachment.data.parameter.title + currentTaskIndex = currentTasks.findIndex(task => task.data.parameter.title === title) + logger('info', `Handling current attachment: ${title}, with index: ${currentTaskIndex}`) + // Failsafe, check if any jobs have failed 7 times or more + if (currentTasks[currentTaskIndex]?.retry >= 7) { + // Update the DB + try { + const filter = { _id: jobId } + const update = { + 'status.uploadAttachments': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } catch (error) { + logger('error', `Failed to update the status of: ${jobToHandle} with the job id: ${jobId}`) + await alertTeams(`Failed to update the status of: ${jobToHandle}`, 'error', 'uploadAttachments', [], jobId, context.executionContext.functionName) + } + throw new Error('Task have failed 7 times or more') + } + + // NB! Ikke gå videre før attachemnt 0 er lagt til! Dette blir hoveddokumentet + logger('info', 'Checking if the first attachment is added') + if (currentTasks[0].status === 'completed') { + logger('info', 'The first attachment is added, handling the rest') + if (currentTasks[currentTaskIndex]?.status) { + if (currentTasks[currentTaskIndex].status !== 'completed') { + currentTasks[currentTaskIndex].status = 'inprogress' + } + } else { + currentTasks[currentTaskIndex].status = 'inprogress' + } + } else { + currentTasks[currentTaskIndex].status = 'inprogress' + } + if (currentTasks[currentTaskIndex].status === 'inprogress') { + logger('info', 'Adding attachment') + const addedAttachment = await addAttachment( + attachment.data.system, + attachment.dataMapping, + attachment.data.parameter.base64, + attachment.data.parameter.format, + attachment.data.parameter.title + ) + logger('info', 'Attachment added') + issueDispatchCopy[0].dataMapping = addedAttachment.DocumentNumber + currentTasks[currentTaskIndex].response = addedAttachment + currentTasks[currentTaskIndex].status = 'completed' + } + } + attachments.push(...currentTasks) + + // Check if all the jobs is completed. + logger('info', 'Checking if all the attachments have been added') + let completedTasks = 0 + for (const task of attachments) { + if (task.status === 'completed') { + completedTasks += 1 + } + } + logger('info', `Number of attachments: ${attachments.length}, attachments added: ${completedTasks}`) + + // Push the changes to the DB + logger('info', 'Updating the changes made to the job') + const filter = { _id: jobId } + const update = { + 'tasks.issueDispatch': issueDispatchCopy, + 'status.uploadAttachments': attachments.length === completedTasks ? 'completed' : 'inprogress', + 'tasks.uploadAttachments': attachments + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'The job have been updated') + } catch (error) { + currentTasks[currentTaskIndex].status = 'failed' + currentTasks[currentTaskIndex].retry ? currentTasks[currentTaskIndex].retry += 1 : currentTasks[currentTaskIndex].retry = 1 + currentTasks[currentTaskIndex].error = error?.response?.data ? { ...error.response.data } : error + + if (currentTasks[currentTaskIndex].retry === 7) { + const filter = { _id: jobId } + const update = { + 'status.uploadAttachments': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + if (currentTasks[currentTaskIndex].status === 'failed') { + const filter = { _id: jobId } + const update = { + 'tasks.uploadAttachments': currentTasks + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(error?.response?.data ? JSON.stringify({ ...error.response.data }) : JSON.stringify(error), 'error', 'uploadAttachments', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'issueDispatch') { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + const issueDispatchCopy = doc.tasks.issueDispatch + const documentsArray = [] + for (const documents of currentTasks) { + logger('info', `Document(s) to issue: ${documents.dataMapping}`) + documentsArray.push(documents.dataMapping) + } + try { + logger('info', `Dispatching docmunets: ${documentsArray}`) + const dispatchDocument = await dispatchDocuments(documentsArray, 'archive') + if (dispatchDocument.Successful) { + // Handle success + logger('info', `Dispatch successful for documents: ${documentsArray}`) + issueDispatchCopy[0].status = 'completed' + issueDispatchCopy[0].response = dispatchDocument + try { + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': 'completed', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } else { + if (!issueDispatchCopy[0].retry) issueDispatchCopy[0].retry = 0 + // Handle fail + logger('info', `Dispatch failed for documents: ${documentsArray}`) + issueDispatchCopy[0].status = 'failed' + issueDispatchCopy[0].retry += 1 + issueDispatchCopy[0].response = dispatchDocument + try { + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': issueDispatchCopy[0].retry >= 7 ? 'failed' : 'waiting', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'createStatistics') { + // Handle the job + try { + const DispatchDoc = await Dispatches.findOne({ _id: jobId }) + const jobDoc = await Jobs.findOne({ _id: jobId }) + logger('info', 'Creating statistics') + const privatepersons = jobDoc.tasks.syncRecipients.filter(t => t.method === 'SyncPrivatePerson').length + const enterprises = jobDoc.tasks.syncRecipients.filter(t => t.method === 'SyncEnterprise').length + logger('info', 'Pushing statistics to the DB') + const statRes = await createStatistics(DispatchDoc.createdByDepartment, jobId, privatepersons, enterprises) + if (statRes.acknowledged) { + logger('info', 'Statistics successfully pushed to the DB') + const filter = { _id: jobId } + const update = { + 'status.createStatistics': 'completed', + 'tasks.createStatistics': [{ + status: 'completed', + privatepersons, + enterprises, + response: statRes + }] + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'The job is updated and all tasks is completed! Removing the job from the jobs collection') + await Jobs.findOneAndDelete({ _id: jobId }) + logger('info', 'The job has successfully been deleted') + await alertTeams([], 'completed', [], 'Job has been completed and removed from the jobs collection', jobId, context.executionContext.functionName) + } else { + logger('info', 'Failed pushing statistics to the DB') + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': issueDispatchCopy[0].retry >= 7 ? 'failed' : 'waiting', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'createStatistics', [], jobId, context.executionContext.functionName) + } + } else { + logger('error', `Did not find any tasks to handle, but for some reason we ended up here? JobID: ${jobId}, Endpoint: ${context.executionContext.functionName}`) + await alertTeams('Did not find any tasks to handle, but for some reason we ended up here?', 'error', 'Unknown', [], jobId, context.executionContext.functionName) + } + } + } + return await azfHandleResponse(taskArr, context, req) + } catch (error) { + logger('error', `The job with the job id: ${jobId} failed`) + return await azfHandleError(error, context, req) + } +} diff --git a/func-gethandlejobs/readme.md b/func-gethandlejobs/readme.md new file mode 100644 index 0000000..f5a3667 --- /dev/null +++ b/func-gethandlejobs/readme.md @@ -0,0 +1,11 @@ +# TimerTrigger - JavaScript + +The `TimerTrigger` makes it incredibly easy to have your functions executed on a schedule. This sample demonstrates a simple use case of calling your function every 5 minutes. + +## How it works + +For a `TimerTrigger` to work, you provide a schedule in the form of a [cron expression](https://en.wikipedia.org/wiki/Cron#CRON_expression)(See the link for full details). A cron expression is a string with 6 separate expressions which represent a given schedule via patterns. The pattern we use to represent every 5 minutes is `0 */5 * * * *`. This, in plain text, means: "When seconds is equal to 0, minutes is divisible by 5, for any hour, day of the month, month, day of the week, or year". + +## Learn more + + Documentation \ No newline at end of file diff --git a/func-gethandlejobsDev/function.json b/func-gethandlejobsDev/function.json new file mode 100644 index 0000000..78dcae5 --- /dev/null +++ b/func-gethandlejobsDev/function.json @@ -0,0 +1,19 @@ +{ + "bindings": [ + { + "authLevel": "function", + "type": "httpTrigger", + "direction": "in", + "name": "req", + "methods": [ + "get" + ], + "route": "handleJobs" + }, + { + "type": "http", + "direction": "out", + "name": "$return" + } + ] +} \ No newline at end of file diff --git a/func-gethandlejobsDev/index.js b/func-gethandlejobsDev/index.js new file mode 100644 index 0000000..68ee0b9 --- /dev/null +++ b/func-gethandlejobsDev/index.js @@ -0,0 +1,506 @@ +// Models +const Jobs = require('../sharedcode/models/jobs.js') +const Dispatches = require('../sharedcode/models/dispatches.js') + +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const { logger, logConfig } = require('@vtfk/logger') +const { syncRecipient, createCaseDocument, addAttachment, dispatchDocuments } = require('../sharedcode/vtfk/archive.js') +const { createStatistics } = require('../sharedcode/vtfk/statistics.js') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') +const { alertTeams } = require('../sharedcode/vtfk/alertTeams.js') + +logConfig({ + prefix: 'azf-masseutsendelse-api - gethandlejobs' +}) + +module.exports = async function (context, req) { + try { + logger('info', 'Checking AUTH') + await require('../sharedcode/auth/auth.js').auth(req) + // Await the DB connection + logger('info', 'Connecting to DB') + await getDb() + // Find the jobs + logger('info', 'Looking for jobs to handle') + const jobs = await Jobs.findOne({ + $or: [ + { 'status.syncRecipients': 'waiting' }, + { 'status.createCaseDocument': 'waiting' }, + { 'status.uploadAttachments': 'waiting' }, + { 'status.issueDispatch': 'waiting' }, + { 'status.createStatistics': 'waiting' }, + { 'status.syncRecipients': 'inprogress' }, + { 'status.createCaseDocument': 'inprogress' }, + { 'status.uploadAttachments': 'inprogress' }, + { 'status.issueDispatch': 'inprogress' }, + { 'status.createStatistics': 'inprogress' } + ] + }) + // Handle if no jobs. + if (!jobs) { + logger('info', 'No jobs to handle found, exit') + // await alertTeams([], 'completed', [] , 'job', context.executionContext.functionName) + // await alertTeams({}, 'completed', {}, 'This job is done', 'et endpoint') Dette er ikke teams webhooken glad i + return await azfHandleResponse('No jobs found', context, req) + } + + const taskArr = [] + const failedJobsArr = [] + let stopHandling = false + + const jobId = jobs._id + logger('info', `Found a job with id: ${jobId}`) + logger('info', 'Checking the job status') + for (const job in jobs.status) { + if (Object.hasOwnProperty.call(jobs.status, job)) { + const status = jobs.status[job] + // Check if any jobs have failed + if (status === 'failed') { + if (job === 'syncRecipients' || job === 'createCaseDocument' || job === 'uploadAttachments' || job === 'issueDispatch') { + logger('info', `The job: ${job} have status failed.`) + stopHandling = true + } + const failedJobsObj = { [job]: jobs.tasks[job] } + for (const task of failedJobsObj[job]) { + if (task.status === 'failed') { + failedJobsArr.push({ [job]: task }) + } + } + // Update the job with the failed tasks + logger('info', `Updating the failedJobs array for ${jobId}`) + try { + const filter = { _id: jobId } + const update = { + $push: { + failedTasks: failedJobsArr + } + } + await Jobs.findOneAndUpdate(filter, update, { + new: true, + upsert: true + }) + logger('info', `The failedJobs array for ${jobId} have been updated`) + logger('error', `The job: ${job} with mongoDB id: ${jobId} have failed 7 times and the whole job is stopped!`) + await alertTeams('Job failed 7 times, please look at it!', 'error', failedJobsArr, [], context.executionContext.functionName) + } catch (error) { + await alertTeams(JSON.stringify(error), 'error', 'pushing failed job to mongodb', [], jobId, context.executionContext.functionName) + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + throw new Error(JSON.stringify(error), 'error', 'pushing failed job to mongodb', jobId, context.executionContext.functionName) + } + } + // Find the job + if (status === 'waiting' || status === 'inprogress') { + if (((job === 'createCaseDocument' || job === 'issueDispatch' || job === 'uploadAttachments') && stopHandling === true) || (job === 'issueDispatch' && stopHandling === true)) { + await alertTeams(`Current job: ${job} and stopHandling is: ${stopHandling}. DispatchID: ${jobId}. You need to look into it!`) + } else { + logger('info', 'Pushing the tasks to the task array.') + const jobsObj = { [job]: jobs.tasks[job] } + taskArr.push(jobsObj) + } + } + } + } + // Håndter den første jobben, sett den til completed om alt gikk bra. Kjør på nytt om 5min. + const currentJob = Object.keys(taskArr[0]) + for (const job in currentJob) { + if (Object.hasOwnProperty.call(currentJob, job)) { + const jobToHandle = currentJob[job] + logger('info', `Current Job: ${jobToHandle}`) + if (jobToHandle === 'syncRecipients') { + // Handle the job + try { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const updatedTask = [] + let numbOfFailedTasks = 0 + logger('info', 'Checking each task of currentTask') + for (const task of currentTasks) { + const ssn = task.ssn + const method = task.method + const doc = await Jobs.findOne({ _id: jobId }) + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + const currentTaskIndex = doc.tasks.syncRecipients.findIndex(task => task.ssn === ssn) + logger('info', `Working with the task with index: ${currentTaskIndex}.`) + if (task.status === 'waiting' || task.status === 'inprogress' || task.status === 'failed') { + if (task.status === 'failed' && task.retry === 7) { + logger('info', `The task with index: ${currentTaskIndex} have failed 7 times. Whole job is set to failed`) + const filter = { _id: jobId } + const update = { + 'status.syncRecipients': 'failed' + } + updatedDispatch = await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + try { + logger('info', `Syncing recipient using: ${method}`) + const res = await syncRecipient(ssn, method) + logger('info', 'Recipient synced') + if (currentTaskIndex !== -1) { + if (doc.tasks.syncRecipients[currentTaskIndex].status === 'completed') { + // Push completed tasks to the updatedTask array. + updatedTask.push(doc.tasks.syncRecipients[currentTaskIndex]) + } else { + doc.tasks.syncRecipients[currentTaskIndex].status = 'completed' + const data = Object.assign({}, doc.tasks.syncRecipients[currentTaskIndex], { res }) + // Update the correct object with status "completed" and with the data. + updatedTask.push(data) + } + } else { + logger('error', `Failed Syncing recipient using: ${method} in job: ${job} with mongoDB id: ${jobId}`) + await alertTeams(`Failed Syncing recipient using: ${method} in job: ${job}`, 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } catch (error) { + try { + logger('info', 'Handling the failed task, updating') + numbOfFailedTasks += 1 + await alertTeams(JSON.stringify(error.response.data), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + logger('error', `The job: ${job} with mongoDB id: ${jobId} failed. Task with the index ${currentTaskIndex} failed. Check the teams warning for more info!`) + const errorObj = { + msg: error.response.data, + retry: doc.tasks.syncRecipients[currentTaskIndex]?.retry ? doc.tasks.syncRecipients[currentTaskIndex].retry += 1 : 1 + } + logger('info', `Task with the index: ${currentTaskIndex} is set to failed`) + doc.tasks.syncRecipients[currentTaskIndex].status = 'failed' + const data = Object.assign({}, doc.tasks.syncRecipients[currentTaskIndex], errorObj) + // Update the correct object with status "failed" and with the data. + updatedTask.push(data) + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } + } else if (task.status === 'completed') { + updatedTask.push(doc.tasks.syncRecipients[currentTaskIndex]) + } + } + const filter = { _id: jobId } + const update = { + 'status.syncRecipients': numbOfFailedTasks === 0 ? 'completed' : 'inprogress', + 'tasks.syncRecipients': updatedTask + } + logger('info', `Updating the job with the id: ${jobId}`) + updatedDispatch = await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'syncRecipients', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'createCaseDocument') { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + // Current case we're working with. + const currentCase = doc.tasks.createCaseDocument[0] + // Array of attachments that needs the documentNumber retunren from the createCaseDocumnet Job. + const uploadAttachmentsCopy = doc.tasks.uploadAttachments + // Define the retry prop if not found. If found assume we already tried to finish the job but failed and add 1 to the count. + currentCase?.retry ? currentCase.retry += 1 : currentCase.retry = 0 + try { + if (currentTasks[0]?.retry === 7) { + const filter = { _id: jobId } + const update = { + 'status.createCaseDocument': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } else { + // There's only one casedocument for each task. Index[0] Is fine. + logger('info', 'Creating the case object') + const caseObj = { + method: currentTasks[0].method, + title: currentTasks[0].data.parameter.title, + caseNumber: currentTasks[0].data.parameter.caseNumber, + date: currentTasks[0].data.parameter.date, + contacts: currentTasks[0].data.parameter.contacts, + attachments: currentTasks[0].data.parameter.attachments, + paragraph: currentTasks[0].data.parameter.paragraph, + responsiblePersonEmail: currentTasks[0].data.parameter.responsiblePersonEmail + } + // Make the request + logger('info', 'Trying to create the case document') + const caseDoc = await createCaseDocument( + caseObj.method, + caseObj.title, + caseObj.caseNumber, + caseObj.date, + caseObj.contacts, + caseObj.attachments, + caseObj.paragraph, + caseObj.responsiblePersonEmail + ) + logger('info', 'Case document created') + // Just for testing + // const caseDocSampleReturn = { Recno: 212144, DocumentNumber: '23/00024-10' } + + for (const attachment of uploadAttachmentsCopy) { + attachment.dataMapping = caseDoc.DocumentNumber + } + + const filter = { _id: jobId } + const update = { + 'status.createCaseDocument': 'completed', + 'tasks.createCaseDocument': currentCase, + 'tasks.uploadAttachments': uploadAttachmentsCopy + } + logger('info', `Updating job with id: ${jobId}`) + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', `Job with id: ${jobId} updated`) + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'createCaseDocument', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'uploadAttachments') { + // Handle the job + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + // Array of attachments that needs the documentNumber retunren from the createCaseDocumnet Job. + const issueDispatchCopy = doc.tasks.issueDispatch + const attachments = [] + let currentTaskIndex + try { + for (const attachment of currentTasks) { + // method, documentNumber, base64, format, title + const title = attachment.data.parameter.title + currentTaskIndex = currentTasks.findIndex(task => task.data.parameter.title === title) + logger('info', `Handling current attachment: ${title}, with index: ${currentTaskIndex}`) + // Failsafe, check if any jobs have failed 7 times or more + if (currentTasks[currentTaskIndex]?.retry >= 7) { + // Update the DB + try { + const filter = { _id: jobId } + const update = { + 'status.uploadAttachments': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } catch (error) { + logger('error', `Failed to update the status of: ${jobToHandle} with the job id: ${jobId}`) + await alertTeams(`Failed to update the status of: ${jobToHandle}`, 'error', 'uploadAttachments', [], jobId, context.executionContext.functionName) + } + throw new Error('Task have failed 7 times or more') + } + + // NB! Ikke gå videre før attachemnt 0 er lagt til! Dette blir hoveddokumentet + logger('info', 'Checking if the first attachment is added') + if (currentTasks[0].status === 'completed') { + logger('info', 'The first attachment is added, handling the rest') + if (currentTasks[currentTaskIndex]?.status) { + if (currentTasks[currentTaskIndex].status !== 'completed') { + currentTasks[currentTaskIndex].status = 'inprogress' + } + } else { + currentTasks[currentTaskIndex].status = 'inprogress' + } + } else { + currentTasks[currentTaskIndex].status = 'inprogress' + } + if (currentTasks[currentTaskIndex].status === 'inprogress') { + logger('info', 'Adding attachment') + const addedAttachment = await addAttachment( + attachment.data.system, + attachment.dataMapping, + attachment.data.parameter.base64, + attachment.data.parameter.format, + attachment.data.parameter.title + ) + logger('info', 'Attachment added') + issueDispatchCopy[0].dataMapping = addedAttachment.DocumentNumber + currentTasks[currentTaskIndex].response = addedAttachment + currentTasks[currentTaskIndex].status = 'completed' + } + } + attachments.push(...currentTasks) + + // Check if all the jobs is completed. + logger('info', 'Checking if all the attachments have been added') + let completedTasks = 0 + for (const task of attachments) { + if (task.status === 'completed') { + completedTasks += 1 + } + } + logger('info', `Number of attachments: ${attachments.length}, attachments added: ${completedTasks}`) + + // Push the changes to the DB + logger('info', 'Updating the changes made to the job') + const filter = { _id: jobId } + const update = { + 'tasks.issueDispatch': issueDispatchCopy, + 'status.uploadAttachments': attachments.length === completedTasks ? 'completed' : 'inprogress', + 'tasks.uploadAttachments': attachments + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'The job have been updated') + } catch (error) { + currentTasks[currentTaskIndex].status = 'failed' + currentTasks[currentTaskIndex].retry ? currentTasks[currentTaskIndex].retry += 1 : currentTasks[currentTaskIndex].retry = 1 + currentTasks[currentTaskIndex].error = error?.response?.data ? { ...error.response.data } : error + + if (currentTasks[currentTaskIndex].retry === 7) { + const filter = { _id: jobId } + const update = { + 'status.uploadAttachments': 'failed' + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + if (currentTasks[currentTaskIndex].status === 'failed') { + const filter = { _id: jobId } + const update = { + 'tasks.uploadAttachments': currentTasks + } + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + } + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(error?.response?.data ? JSON.stringify({ ...error.response.data }) : JSON.stringify(error), 'error', 'uploadAttachments', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'issueDispatch') { + let currentTasks = Object.values(taskArr[0]) + currentTasks = Object.assign([], ...currentTasks) + const doc = await Jobs.findOne({ _id: jobId }) + // Handle doc if not found + if (!doc) { + logger('info', `Current Job: ${jobToHandle}, no job found.`) + throw new Error('Document not found') + } + const issueDispatchCopy = doc.tasks.issueDispatch + const documentsArray = [] + for (const documents of currentTasks) { + logger('info', `Document(s) to issue: ${documents.dataMapping}`) + documentsArray.push(documents.dataMapping) + } + try { + logger('info', `Dispatching docmunets: ${documentsArray}`) + const dispatchDocument = await dispatchDocuments(documentsArray, 'archive') + if (dispatchDocument.Successful) { + // Handle success + logger('info', `Dispatch successful for documents: ${documentsArray}`) + issueDispatchCopy[0].status = 'completed' + issueDispatchCopy[0].response = dispatchDocument + try { + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': 'completed', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } else { + if (!issueDispatchCopy[0].retry) issueDispatchCopy[0].retry = 0 + // Handle fail + logger('info', `Dispatch failed for documents: ${documentsArray}`) + issueDispatchCopy[0].status = 'failed' + issueDispatchCopy[0].retry += 1 + issueDispatchCopy[0].response = dispatchDocument + try { + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': issueDispatchCopy[0].retry >= 7 ? 'failed' : 'waiting', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'issueDispatch', [], jobId, context.executionContext.functionName) + } + } else if (jobToHandle === 'createStatistics') { + // Handle the job + try { + const DispatchDoc = await Dispatches.findOne({ _id: jobId }) + const jobDoc = await Jobs.findOne({ _id: jobId }) + logger('info', 'Creating statistics') + const privatepersons = jobDoc.tasks.syncRecipients.filter(t => t.method === 'SyncPrivatePerson').length + const enterprises = jobDoc.tasks.syncRecipients.filter(t => t.method === 'SyncEnterprise').length + logger('info', 'Pushing statistics to the DB') + const statRes = await createStatistics(DispatchDoc.createdByDepartment, jobId, privatepersons, enterprises) + if (statRes.acknowledged) { + logger('info', 'Statistics successfully pushed to the DB') + const filter = { _id: jobId } + const update = { + 'status.createStatistics': 'completed', + 'tasks.createStatistics': [{ + status: 'completed', + privatepersons, + enterprises, + response: statRes + }] + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'The job is updated and all tasks is completed! Removing the job from the jobs collection') + await Jobs.findOneAndDelete({ _id: jobId }) + logger('info', 'The job has successfully been deleted') + await alertTeams([], 'completed', [], 'Job has been completed and removed from the jobs collection', jobId, context.executionContext.functionName) + } else { + logger('info', 'Failed pushing statistics to the DB') + const filter = { _id: jobId } + const update = { + 'status.issueDispatch': issueDispatchCopy[0].retry >= 7 ? 'failed' : 'waiting', + 'tasks.issueDispatch': issueDispatchCopy + } + logger('info', 'Updating the job') + await Jobs.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', 'Job updated') + } + } catch (error) { + logger('error', `Failed pushing the job: ${job} with mongoDB id: ${jobId} to mongoDB!`) + await alertTeams(JSON.stringify(error), 'error', 'createStatistics', [], jobId, context.executionContext.functionName) + } + } else { + logger('error', `Did not find any tasks to handle, but for some reason we ended up here? JobID: ${jobId}, Endpoint: ${context.executionContext.functionName}`) + await alertTeams('Did not find any tasks to handle, but for some reason we ended up here?', 'error', 'Unknown', [], jobId, context.executionContext.functionName) + } + } + } + return await azfHandleResponse(taskArr, context, req) + } catch (error) { + logger('error', `The job with the job id: ${jobId} failed`) + return await azfHandleError(error, context, req) + } +} diff --git a/func-getmatrikkel/index.js b/func-getmatrikkel/index.js index bfb0ded..3bbadbf 100644 --- a/func-getmatrikkel/index.js +++ b/func-getmatrikkel/index.js @@ -1,24 +1,24 @@ /* Import dependencies */ -const axios = require('axios'); -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const config = require('../config'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const axios = require('axios') +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const config = require('../config') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); - + await require('../sharedcode/auth/auth').auth(req) + // Input validation - if(!config.VTFK_MATRIKKELPROXY_BASEURL) throw new HTTPError(400, 'The MatrikkelProxyAPI connection is not configured'); - if(!config.VTFK_MATRIKKELPROXY_APIKEY) throw new HTTPError(400, 'The MatrikkelProxyAPI connection is missing the APIKey'); - + if (!config.VTFK_MATRIKKELPROXY_BASEURL) throw new HTTPError(400, 'The MatrikkelProxyAPI connection is not configured') + if (!config.VTFK_MATRIKKELPROXY_APIKEY) throw new HTTPError(400, 'The MatrikkelProxyAPI connection is missing the APIKey') + // Get ID from request - const endpoint = decodeURIComponent(context.bindingData.endpoint); + const endpoint = decodeURIComponent(context.bindingData.endpoint) - let request = { + const request = { method: 'post', url: `${config.VTFK_MATRIKKELPROXY_BASEURL}${endpoint}`, headers: { @@ -27,10 +27,10 @@ module.exports = async function (context, req) { data: req.body } - response = await axios.request(request); + response = await axios.request(request) return await azfHandleResponse(response.data, context, req) } catch (err) { return await azfHandleError(err, context, req) } -} \ No newline at end of file +} diff --git a/func-getreadydispatches/index.js b/func-getreadydispatches/index.js index 57b16ce..d06dc57 100644 --- a/func-getreadydispatches/index.js +++ b/func-getreadydispatches/index.js @@ -1,45 +1,45 @@ const Dispatches = require('../sharedcode/models/dispatches.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const blobClient = require('@vtfk/azure-blob-client'); -const axios = require('axios'); -const config = require('../config'); -const dayjs = require('dayjs'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const blobClient = require('@vtfk/azure-blob-client') +const axios = require('axios') +const config = require('../config') +const dayjs = require('dayjs') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') // Arrays -let e18Jobs = []; +let e18Jobs = [] // Clear the e18Jobs Array e18Jobs = [] module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) - // Await the DB connection + // Await the DB connection await getDb() - // Find all disptaches - let dispatches = await Dispatches.find({ 'status': 'approved' }) - if (!dispatches || dispatches.length === 0) return context.res.send([]); + // Find all disptaches + const dispatches = await Dispatches.find({ status: 'approved' }) + if (!dispatches || dispatches.length === 0) return context.res.send([]) // Loop through all dispatches - for(const dispatch of dispatches) { + for (const dispatch of dispatches) { // Validate if the dispatch is ready - if(!dispatch.approvedTimestamp) continue; + if (!dispatch.approvedTimestamp) continue // Check if the dispatch has passed the registration threshold - let registrationThreshold = dayjs(dispatch.approvedTimestamp).set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 0); - let delaySendUntil = dayjs().set('hour', 11).set('minute', 0).set('second', 0).set('millisecond', 0); - if(!config.BYPASS_REGISTRATION_THRESHOLD) { - if(dayjs(new Date()).isBefore(registrationThreshold)) continue; + const registrationThreshold = dayjs(dispatch.approvedTimestamp).set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 0) + const delaySendUntil = dayjs().set('hour', 11).set('minute', 0).set('second', 0).set('millisecond', 0) + if (!config.BYPASS_REGISTRATION_THRESHOLD) { + if (dayjs(new Date()).isBefore(registrationThreshold)) continue } - + // Variables - let e18Files = []; // Stores all files that should be registrered to E18 - let e18Job = { - system: 'masseutsendelse', - projectId: 30, + const e18Files = [] // Stores all files that should be registrered to E18 + const e18Job = { + system: 'masseutsendelse', + projectId: 30, type: 'masseutsendelse', parallel: false, delayUntil: delaySendUntil.toISOString(), @@ -51,10 +51,10 @@ module.exports = async function (context, req) { let data = {} if (dispatch.template.data) { data = dispatch.template.data - } + } if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) data.attachments = dispatch.attachments data.info = { - 'sector': dispatch.createdByDepartment, + sector: dispatch.createdByDepartment, 'our-reference': dispatch.archivenumber, 'our-caseworker': dispatch.createdBy } @@ -64,40 +64,40 @@ module.exports = async function (context, req) { method: 'post', data: { template: dispatch.template.template, - documentDefinitionId: dispatch.template.documentDefinitionId || 'brevmal', - data: data + documentDefinitionId: dispatch.template.documentDefinitionId || 'brevmal', + data } } // Generate PDF from template - const legalFilename = dispatch.title.replace(/[/\\?%*:|"<>;¤]/g, ''); - const response = await axios.request(generatePDFRequest); - if(response.data) e18Files.push({ title: legalFilename, format: 'pdf', versionFormat: 'A', base64: response.data.base64}); + const legalFilename = dispatch.title.replace(/[/\\?%*:|"<>;¤]/g, '') + const response = await axios.request(generatePDFRequest) + if (response.data) e18Files.push({ title: legalFilename, format: 'pdf', versionFormat: 'A', base64: response.data.base64 }) else throw new HTTPError(404, `Could not genereate PDF for dispatch ${dispatch.title}`) } // Retreive any attachments if applicable - if(process.env.NODE_ENV !== 'test'){ + if (process.env.NODE_ENV !== 'test') { if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) { - for(const attachment of dispatch.attachments) { - let file = await blobClient.get(`${dispatch._id}/${attachment.name}`) + for (const attachment of dispatch.attachments) { + const file = await blobClient.get(`${dispatch._id}/${attachment.name}`) // Validate the files if (!file || !file.data || file.data.length === 0) throw new HTTPError(404, 'No files found, check if you passed the right filename and/or the right dispatchId') - if(file.data.startsWith('data:') && file.data.includes(',')) file.data = file.data.substring(file.data.indexOf(',') + 1); - if(file.name.includes('.')) file.name = file.name.substring(0, file.name.indexOf('.')); + if (file.data.startsWith('data:') && file.data.includes(',')) file.data = file.data.substring(file.data.indexOf(',') + 1) + if (file.name.includes('.')) file.name = file.name.substring(0, file.name.indexOf('.')) // Push it to the files array - e18Files.push({title: file.name, format: file.extension, base64: file.data}); + e18Files.push({ title: file.name, format: file.extension, base64: file.data }) } } } else { - e18Files.push({title: 'test', format: '.txt' , base64: 'base64'}); + e18Files.push({ title: 'test', format: '.txt', base64: 'base64' }) } // Create the archive task - let personArray = []; - let businessArray = []; - for(const owner of dispatch.owners) { - if(owner._type.toLowerCase().includes('juridisk')) { + const personArray = [] + const businessArray = [] + for (const owner of dispatch.owners) { + if (owner._type.toLowerCase().includes('juridisk')) { businessArray.push({ orgnr: owner.nummer }) @@ -107,7 +107,7 @@ module.exports = async function (context, req) { }) } } - + // Create tasks for create/update private persons personArray.forEach((person) => { e18Job.tasks.push({ @@ -116,7 +116,7 @@ module.exports = async function (context, req) { group: 'group2', dependencyTag: 'sync', data: person - }); + }) }) // Create tasks for creating/updated persons @@ -127,14 +127,14 @@ module.exports = async function (context, req) { group: 'group2', dependencyTag: 'sync', data: business - }); + }) }) - + // Create the p360 caseDocument e18Job.tasks.push({ system: 'p360', method: 'archive', - dependencyTag: `createCaseDocument`, + dependencyTag: 'createCaseDocument', group: 'group1', dependencies: ['sync'], data: { @@ -144,22 +144,22 @@ module.exports = async function (context, req) { title: dispatch.title, caseNumber: dispatch.archivenumber, date: new Date().toISOString(), - contacts: dispatch.owners.map((o) => {return { ssn: o.nummer, role: 'Mottaker' }}), + contacts: dispatch.owners.map((o) => { return { ssn: o.nummer, role: 'Mottaker' } }), attachments: [e18Files[0]], - accessCode: "U", // U = Alle - accessGroup: "Alle", // No access restriction - paragraph: "", // No paragraph + accessCode: 'U', // U = Alle + accessGroup: 'Alle', // No access restriction + paragraph: '', // No paragraph responsiblePersonEmail: dispatch.createdByEmail } } }) - if(e18Files.length > 1) { + if (e18Files.length > 1) { // Create one uploadDocuments-job pr. Attachment - let fileIndex = -1; - for(const file of e18Files) { - fileIndex++; - if(fileIndex === 0) continue; + let fileIndex = -1 + for (const file of e18Files) { + fileIndex++ + if (fileIndex === 0) continue e18Job.tasks.push({ system: 'p360', @@ -167,7 +167,7 @@ module.exports = async function (context, req) { group: 'group3', dependencyTag: `uploadAttachment-${fileIndex}`, dependencies: fileIndex === 1 ? ['createCaseDocument'] : [`uploadAttachment-${fileIndex - 1}`], - dataMapping: "parameter.documentNumber=DocumentNumber", + dataMapping: 'parameter.documentNumber=DocumentNumber', data: { system: 'archive', template: 'add-attachment', @@ -179,28 +179,27 @@ module.exports = async function (context, req) { versionFormat: 'P' } } - }); + }) } } - // Create task to sendt to each contact e18Job.tasks.push({ system: 'p360', method: 'archive', group: 'group4', dependencies: [`uploadAttachment-${e18Files.length - 1}`], - dataMapping: "{\"parameter\": { \"Documents\": [ { \"DocumentNumber\": \"{{DocumentNumber}}\" }]}}", + dataMapping: '{"parameter": { "Documents": [ { "DocumentNumber": "{{DocumentNumber}}" }]}}', data: { - method: "DispatchDocuments", - service: "DocumentService", + method: 'DispatchDocuments', + service: 'DocumentService' } - }); + }) // Add the job to the e18 jobs array - e18Jobs.push({_id: dispatch._id, e18Job }); + e18Jobs.push({ _id: dispatch._id, e18Job }) } - + return await azfHandleResponse(e18Jobs, context, req) } catch (err) { return await azfHandleError(err, context, req) diff --git a/func-getreadydispatchesV2/function.json b/func-getreadydispatchesV2/function.json new file mode 100644 index 0000000..4b92ac4 --- /dev/null +++ b/func-getreadydispatchesV2/function.json @@ -0,0 +1,10 @@ +{ + "bindings": [ + { + "name": "myTimer", + "type": "timerTrigger", + "direction": "in", + "schedule": "0 0 12 * * *" + } + ] +} \ No newline at end of file diff --git a/func-getreadydispatchesV2/index.js b/func-getreadydispatchesV2/index.js new file mode 100644 index 0000000..c072f1e --- /dev/null +++ b/func-getreadydispatchesV2/index.js @@ -0,0 +1,253 @@ +const Jobs = require('../sharedcode/models/jobs.js') +const Dispatches = require('../sharedcode/models/dispatches.js') +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const HTTPError = require('../sharedcode/vtfk-errors/httperror.js') +const blobClient = require('@vtfk/azure-blob-client') +const { logger, logConfig } = require('@vtfk/logger') +const { alertTeams } = require('../sharedcode/vtfk/alertTeams.js') +const axios = require('axios') +const config = require('../config.js') +const dayjs = require('dayjs') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') + +logConfig({ + prefix: 'azf-masseutsendelse-api - getreadydispatchesV2' +}) + +module.exports = async function (context, req) { + try { + // Arrays + let dispatchJobs = [] + // Clear the dispatchJobs Array + dispatchJobs = [] + // // Authentication / Authorization + // logger('info', 'Checking AUTH') + // await require('../sharedcode/auth/auth.js').auth(req) + + // Await the DB connection + logger('info', 'Connecting to DB') + await getDb() + + // Find all disptaches + logger('info', 'Looking for jobs to handle') + const d = await Dispatches.findOne({ status: 'approved' }) + if (d === null) { + logger('info', 'No jobs found') + return context.res.send([]) + } + const dispatches = [] + dispatches.push(await d) + if (!dispatches || dispatches.length === 0) return context.res.send([]) + + // Loop through all dispatches + for (const dispatch of dispatches) { + // Validate if the dispatch is ready + logger('info', 'Found a job to handle, checking if it has passed the registration threshold') + if (!dispatch.approvedTimestamp) continue + + // Check if the dispatch has passed the registration threshold + const registrationThreshold = dayjs(dispatch.approvedTimestamp).set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 0) + const delaySendUntil = dayjs().set('hour', 11).set('minute', 0).set('second', 0).set('millisecond', 0) + if (!config.BYPASS_REGISTRATION_THRESHOLD) { + logger('info', 'Buypassing registartion threshold') + if (dayjs(new Date()).isBefore(registrationThreshold)) continue + } + // Variables + const dispatchFiles = [] // Stores all files that should be registrered to the job + const dispatchJob = { + title: dispatch.title, + approvedTimeStamp: dispatch.approvedTimestamp, + delayUntil: delaySendUntil.toISOString(), + status: { + syncRecipients: 'waiting', + uploadAttachments: 'waiting', + createCaseDocument: 'waiting', + issueDispatch: 'waiting', + createStatistics: 'waiting' + }, + tasks: { + syncRecipients: [], + uploadAttachments: [], + createCaseDocument: [], + issueDispatch: [], + createStatistics: '' + } + } + // Generate PDF from template, if applicable + logger('info', 'Generating PDF from template if a template was used in the dispatch (brevmal)') + if (dispatch.template?.template) { + let data = {} + if (dispatch.template.data) { + data = dispatch.template.data + } + if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) data.attachments = dispatch.attachments + data.info = { + sector: dispatch.createdByDepartment, + 'our-reference': dispatch.archivenumber, + 'our-caseworker': dispatch.createdBy + } + logger('info', 'Creating the request') + const generatePDFRequest = { + url: config.VTFK_PDFGENERATOR_ENDPOINT, + method: 'post', + data: { + template: dispatch.template.template, + documentDefinitionId: dispatch.template.documentDefinitionId || 'brevmal', + data + } + } + // Generate PDF from template + const legalFilename = dispatch.title.replace(/[/\\?%*:|"<>;¤]/g, '') + logger('info', 'Making the request to the PDF api') + const response = await axios.request(generatePDFRequest) + if (response.data) { + logger('info', `Successfully created a pdf from the template: ${legalFilename}`) + dispatchFiles.push({ title: legalFilename, format: 'pdf', versionFormat: 'A', base64: response.data.base64 }) + } else { + logger('info', `Failed to create a pdf from the template: ${legalFilename}`) + throw new HTTPError(404, `Could not genereate PDF for dispatch ${dispatch.title}`) + } + } + // Retreive any attachments if applicable + if (process.env.NODE_ENV !== 'test') { + logger('info', 'Retriving the attachments if any attachments was added') + if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) { + logger('info', 'Attachments found') + for (const attachment of dispatch.attachments) { + logger('info', `Fetching the attachment: ${attachment.name} from the blob storage`) + const file = await blobClient.get(`${dispatch._id}/${attachment.name}`) + // Validate the files + if (!file || !file.data || file.data.length === 0) { + logger('error', 'No files found, check if you passed the right filename and/or the right dispatchId') + throw new HTTPError(404, 'No files found, check if you passed the right filename and/or the right dispatchId') + } + logger('info', `Successfully fetched the attachment: ${attachment.name} from the blob storage, validating the file.`) + if (file.data.startsWith('data:') && file.data.includes(',')) file.data = file.data.substring(file.data.indexOf(',') + 1) + if (file.name.includes('.')) file.name = file.name.substring(0, file.name.indexOf('.')) + logger('info', `Attachment: ${attachment.name} is valid, pushing it to the file array.`) + // Push it to the files array + dispatchFiles.push({ title: file.name, format: file.extension, base64: file.data }) + } + } + } else { + logger('info', 'Currently in test, will not look for attachments') + dispatchFiles.push({ title: 'test', format: '.txt', base64: 'base64' }) + } + // Create the archive task + const personArray = [] + const businessArray = [] + logger('info', `Creating the archive task, for dispatchID: ${dispatch._id}`) + for (const owner of dispatch.owners) { + if (owner._type.toLowerCase().includes('juridisk')) { + businessArray.push({ + orgnr: owner.nummer + }) + } else { + personArray.push({ + ssn: owner.nummer + }) + } + } + logger('info', `Creating the task to sync recipients in archive, for dispatchID: ${dispatch._id}`) + // Create tasks for create/update private persons + personArray.forEach((person) => { + dispatchJob.tasks.syncRecipients.push({ + method: 'SyncPrivatePerson', + rety: 0, + status: 'waiting', + ssn: person.ssn + }) + }) + // Create tasks for creating/updated persons + businessArray.forEach((business) => { + dispatchJob.tasks.syncRecipients.push({ + method: 'SyncEnterprise', + retry: 0, + status: 'waiting', + ssn: business.orgnr + }) + }) + logger('info', `Creating the archive caseDocument task, for dispatchID: ${dispatch._id}`) + // Create the p360 caseDocument + dispatchJob.tasks.createCaseDocument.push({ + method: 'archive', + data: { + system: 'masseutsendelse', + template: 'utsendelsesdokument', + parameter: { + title: dispatch.title, + caseNumber: dispatch.archivenumber, + date: new Date().toISOString(), + contacts: dispatch.owners.map((o) => { return { ssn: o.nummer, role: 'Mottaker' } }), + attachments: [dispatchFiles[0]], + accessCode: 'U', // U = Alle + accessGroup: 'Alle', // No access restriction + paragraph: '', // No paragraph + responsiblePersonEmail: dispatch.createdByEmail + } + } + }) + if (dispatchFiles.length > 1) { + // Create one uploadDocuments-job pr. Attachment + let fileIndex = -1 + for (const file of dispatchFiles) { + logger('info', `Creating the archive uploadDocuments task, for attachment: ${file.title} with dispatchID: ${dispatch._id}`) + fileIndex++ + if (fileIndex === 0) continue + dispatchJob.tasks.uploadAttachments.push({ + dataMapping: 'parameter.documentNumber=DocumentNumber', + data: { + system: 'archive', + template: 'add-attachment', + parameter: { + secure: false, + title: file.title, + format: file.format, + base64: file.base64, + versionFormat: 'P' + } + } + }) + } + } + + // Create task to sendt to each contact + logger('info', `Creating the archive issueDispatch task, for dispatchID: ${dispatch._id}`) + dispatchJob.tasks.issueDispatch.push({ + dataMapping: '{"parameter": { "Documents": [ { "DocumentNumber": "{{DocumentNumber}}" }]}}', + data: { + method: 'DispatchDocuments', + service: 'DocumentService' + } + }) + // Add the job to the jobs array + dispatchJobs.push({ _id: dispatch._id, ...dispatchJob }) + } + let updatedDispatch = {} + if (dispatchJobs.length > 0) { + logger('info', `Creating a new job and saving it to the Jobs collection`) + const job = new Jobs(...dispatchJobs) + // Save the new dispatch to the database + await job.save() + logger('info', `Successfully saved the job to the Jobs collection with the id: ${job._id}`) + // Set dispatch to completed and wipe data that is not needed. + filter = { _id: job._id } + update = { + status: 'completed', + owners: [], + excludedOwners: [], + matrikkelUnitsWithoutOwners: [] + } + logger('info', `Updating and wiping the dispatch with id: ${job._id} for personal information`) + updatedDispatch = await Dispatches.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', `Successfully updated the dispatch with id: ${job._id}`) + await alertTeams([], 'completed', [], 'Jobs have now been created for the dispatch, everything went well', job._id, context.executionContext.functionName) + } + return await azfHandleResponse(updatedDispatch, context, req) + } catch (err) { + await alertTeams(err, 'error', [], [], 'no id found', context.executionContext.functionName) + return await azfHandleError(err, context, req) + } +} diff --git a/func-getreadydispatchesV2/readme.md b/func-getreadydispatchesV2/readme.md new file mode 100644 index 0000000..f5a3667 --- /dev/null +++ b/func-getreadydispatchesV2/readme.md @@ -0,0 +1,11 @@ +# TimerTrigger - JavaScript + +The `TimerTrigger` makes it incredibly easy to have your functions executed on a schedule. This sample demonstrates a simple use case of calling your function every 5 minutes. + +## How it works + +For a `TimerTrigger` to work, you provide a schedule in the form of a [cron expression](https://en.wikipedia.org/wiki/Cron#CRON_expression)(See the link for full details). A cron expression is a string with 6 separate expressions which represent a given schedule via patterns. The pattern we use to represent every 5 minutes is `0 */5 * * * *`. This, in plain text, means: "When seconds is equal to 0, minutes is divisible by 5, for any hour, day of the month, month, day of the week, or year". + +## Learn more + + Documentation \ No newline at end of file diff --git a/func-getreadydispatchesV2Dev/function.json b/func-getreadydispatchesV2Dev/function.json new file mode 100644 index 0000000..26e7a4a --- /dev/null +++ b/func-getreadydispatchesV2Dev/function.json @@ -0,0 +1,19 @@ +{ + "bindings": [ + { + "authLevel": "function", + "type": "httpTrigger", + "direction": "in", + "name": "req", + "methods": [ + "get" + ], + "route": "readyDisptachesV2" + }, + { + "type": "http", + "direction": "out", + "name": "$return" + } + ] +} \ No newline at end of file diff --git a/func-getreadydispatchesV2Dev/index.js b/func-getreadydispatchesV2Dev/index.js new file mode 100644 index 0000000..3e2ea6b --- /dev/null +++ b/func-getreadydispatchesV2Dev/index.js @@ -0,0 +1,253 @@ +const Jobs = require('../sharedcode/models/jobs.js') +const Dispatches = require('../sharedcode/models/dispatches.js') +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const HTTPError = require('../sharedcode/vtfk-errors/httperror.js') +const blobClient = require('@vtfk/azure-blob-client') +const { logger, logConfig } = require('@vtfk/logger') +const { alertTeams } = require('../sharedcode/vtfk/alertTeams.js') +const axios = require('axios') +const config = require('../config.js') +const dayjs = require('dayjs') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') + +logConfig({ + prefix: 'azf-masseutsendelse-api - getreadydispatchesV2' +}) + +module.exports = async function (context, req) { + try { + // Arrays + let dispatchJobs = [] + // Clear the dispatchJobs Array + dispatchJobs = [] + // Authentication / Authorization + logger('info', 'Checking AUTH') + await require('../sharedcode/auth/auth.js').auth(req) + + // Await the DB connection + logger('info', 'Connecting to DB') + await getDb() + + // Find all disptaches + logger('info', 'Looking for jobs to handle') + const d = await Dispatches.findOne({ status: 'approved' }) + if (d === null) { + logger('info', 'No jobs found') + return context.res.send([]) + } + const dispatches = [] + dispatches.push(await d) + if (!dispatches || dispatches.length === 0) return context.res.send([]) + + // Loop through all dispatches + for (const dispatch of dispatches) { + // Validate if the dispatch is ready + logger('info', 'Found a job to handle, checking if it has passed the registration threshold') + if (!dispatch.approvedTimestamp) continue + + // Check if the dispatch has passed the registration threshold + const registrationThreshold = dayjs(dispatch.approvedTimestamp).set('hour', 23).set('minute', 59).set('second', 59).set('millisecond', 0) + const delaySendUntil = dayjs().set('hour', 11).set('minute', 0).set('second', 0).set('millisecond', 0) + if (!config.BYPASS_REGISTRATION_THRESHOLD) { + logger('info', 'Buypassing registartion threshold') + if (dayjs(new Date()).isBefore(registrationThreshold)) continue + } + // Variables + const dispatchFiles = [] // Stores all files that should be registrered to the job + const dispatchJob = { + title: dispatch.title, + approvedTimeStamp: dispatch.approvedTimestamp, + delayUntil: delaySendUntil.toISOString(), + status: { + syncRecipients: 'waiting', + uploadAttachments: 'waiting', + createCaseDocument: 'waiting', + issueDispatch: 'waiting', + createStatistics: 'waiting' + }, + tasks: { + syncRecipients: [], + uploadAttachments: [], + createCaseDocument: [], + issueDispatch: [], + createStatistics: '' + } + } + // Generate PDF from template, if applicable + logger('info', 'Generating PDF from template if a template was used in the dispatch (brevmal)') + if (dispatch.template?.template) { + let data = {} + if (dispatch.template.data) { + data = dispatch.template.data + } + if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) data.attachments = dispatch.attachments + data.info = { + sector: dispatch.createdByDepartment, + 'our-reference': dispatch.archivenumber, + 'our-caseworker': dispatch.createdBy + } + logger('info', 'Creating the request') + const generatePDFRequest = { + url: config.VTFK_PDFGENERATOR_ENDPOINT, + method: 'post', + data: { + template: dispatch.template.template, + documentDefinitionId: dispatch.template.documentDefinitionId || 'brevmal', + data + } + } + // Generate PDF from template + const legalFilename = dispatch.title.replace(/[/\\?%*:|"<>;¤]/g, '') + logger('info', 'Making the request to the PDF api') + const response = await axios.request(generatePDFRequest) + if (response.data) { + logger('info', `Successfully created a pdf from the template: ${legalFilename}`) + dispatchFiles.push({ title: legalFilename, format: 'pdf', versionFormat: 'A', base64: response.data.base64 }) + } else { + logger('info', `Failed to create a pdf from the template: ${legalFilename}`) + throw new HTTPError(404, `Could not genereate PDF for dispatch ${dispatch.title}`) + } + } + // Retreive any attachments if applicable + if (process.env.NODE_ENV !== 'test') { + logger('info', 'Retriving the attachments if any attachments was added') + if (dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length > 0) { + logger('info', 'Attachments found') + for (const attachment of dispatch.attachments) { + logger('info', `Fetching the attachment: ${attachment.name} from the blob storage`) + const file = await blobClient.get(`${dispatch._id}/${attachment.name}`) + // Validate the files + if (!file || !file.data || file.data.length === 0) { + logger('error', 'No files found, check if you passed the right filename and/or the right dispatchId') + throw new HTTPError(404, 'No files found, check if you passed the right filename and/or the right dispatchId') + } + logger('info', `Successfully fetched the attachment: ${attachment.name} from the blob storage, validating the file.`) + if (file.data.startsWith('data:') && file.data.includes(',')) file.data = file.data.substring(file.data.indexOf(',') + 1) + if (file.name.includes('.')) file.name = file.name.substring(0, file.name.indexOf('.')) + logger('info', `Attachment: ${attachment.name} is valid, pushing it to the file array.`) + // Push it to the files array + dispatchFiles.push({ title: file.name, format: file.extension, base64: file.data }) + } + } + } else { + logger('info', 'Currently in test, will not look for attachments') + dispatchFiles.push({ title: 'test', format: '.txt', base64: 'base64' }) + } + // Create the archive task + const personArray = [] + const businessArray = [] + logger('info', `Creating the archive task, for dispatchID: ${dispatch._id}`) + for (const owner of dispatch.owners) { + if (owner._type.toLowerCase().includes('juridisk')) { + businessArray.push({ + orgnr: owner.nummer + }) + } else { + personArray.push({ + ssn: owner.nummer + }) + } + } + logger('info', `Creating the task to sync recipients in archive, for dispatchID: ${dispatch._id}`) + // Create tasks for create/update private persons + personArray.forEach((person) => { + dispatchJob.tasks.syncRecipients.push({ + method: 'SyncPrivatePerson', + rety: 0, + status: 'waiting', + ssn: person.ssn + }) + }) + // Create tasks for creating/updated persons + businessArray.forEach((business) => { + dispatchJob.tasks.syncRecipients.push({ + method: 'SyncEnterprise', + retry: 0, + status: 'waiting', + ssn: business.orgnr + }) + }) + logger('info', `Creating the archive caseDocument task, for dispatchID: ${dispatch._id}`) + // Create the p360 caseDocument + dispatchJob.tasks.createCaseDocument.push({ + method: 'archive', + data: { + system: 'masseutsendelse', + template: 'utsendelsesdokument', + parameter: { + title: dispatch.title, + caseNumber: dispatch.archivenumber, + date: new Date().toISOString(), + contacts: dispatch.owners.map((o) => { return { ssn: o.nummer, role: 'Mottaker' } }), + attachments: [dispatchFiles[0]], + accessCode: 'U', // U = Alle + accessGroup: 'Alle', // No access restriction + paragraph: '', // No paragraph + responsiblePersonEmail: dispatch.createdByEmail + } + } + }) + if (dispatchFiles.length > 1) { + // Create one uploadDocuments-job pr. Attachment + let fileIndex = -1 + for (const file of dispatchFiles) { + logger('info', `Creating the archive uploadDocuments task, for attachment: ${file.title} with dispatchID: ${dispatch._id}`) + fileIndex++ + if (fileIndex === 0) continue + dispatchJob.tasks.uploadAttachments.push({ + dataMapping: 'parameter.documentNumber=DocumentNumber', + data: { + system: 'archive', + template: 'add-attachment', + parameter: { + secure: false, + title: file.title, + format: file.format, + base64: file.base64, + versionFormat: 'P' + } + } + }) + } + } + + // Create task to sendt to each contact + logger('info', `Creating the archive issueDispatch task, for dispatchID: ${dispatch._id}`) + dispatchJob.tasks.issueDispatch.push({ + dataMapping: '{"parameter": { "Documents": [ { "DocumentNumber": "{{DocumentNumber}}" }]}}', + data: { + method: 'DispatchDocuments', + service: 'DocumentService' + } + }) + // Add the job to the jobs array + dispatchJobs.push({ _id: dispatch._id, ...dispatchJob }) + } + let updatedDispatch = {} + if (dispatchJobs.length > 0) { + logger('info', `Creating a new job and saving it to the Jobs collection`) + const job = new Jobs(...dispatchJobs) + // Save the new dispatch to the database + await job.save() + logger('info', `Successfully saved the job to the Jobs collection with the id: ${job._id}`) + // Set dispatch to completed and wipe data that is not needed. + filter = { _id: job._id } + update = { + status: 'completed', + owners: [], + excludedOwners: [], + matrikkelUnitsWithoutOwners: [] + } + logger('info', `Updating and wiping the dispatch with id: ${job._id} for personal information`) + updatedDispatch = await Dispatches.findOneAndUpdate(filter, update, { + new: true + }) + logger('info', `Successfully updated the dispatch with id: ${job._id}`) + await alertTeams([], 'completed', [], 'Jobs have now been created for the dispatch, everything went well', job._id, context.executionContext.functionName) + } + return await azfHandleResponse(updatedDispatch, context, req) + } catch (err) { + await alertTeams(err, 'error', [], [], 'no id found', context.executionContext.functionName) + return await azfHandleError(err, context, req) + } +} diff --git a/func-gettemplates/index.js b/func-gettemplates/index.js index a81fba5..0673210 100644 --- a/func-gettemplates/index.js +++ b/func-gettemplates/index.js @@ -1,25 +1,23 @@ const Templates = require('../sharedcode/models/templates.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) // Await the db connection. await getDb() // Find all the templates - let templates = await Templates.find({}) + const templates = await Templates.find({}) if (!templates) throw new HTTPError(404, 'No templates found in the databases') - //Return the Templates + // Return the Templates return await azfHandleResponse(templates, context, req) } catch (err) { return await azfHandleError(err, context, req) } } - - diff --git a/func-gettemplatesbyid/index.js b/func-gettemplatesbyid/index.js index 83340dd..5468e63 100644 --- a/func-gettemplatesbyid/index.js +++ b/func-gettemplatesbyid/index.js @@ -1,28 +1,28 @@ const Templates = require('../sharedcode/models/templates.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - await require('../sharedcode/auth/auth').auth(req); + await require('../sharedcode/auth/auth').auth(req) - // Get ID from request + // Get ID from request const id = context.bindingData.id - if(!id) throw new HTTPError('400', 'No template id was provided'); + if (!id) throw new HTTPError('400', 'No template id was provided') // Await the database await getDb() - //Find Template by ID - let template = await Templates.findById(id) + // Find Template by ID + const template = await Templates.findById(id) if (!template) throw new HTTPError('400', `Template with id ${id} could no be found`) - //Return the template object - let templateById = await Templates.findById(id, req.body, { new: true }) - + // Return the template object + const templateById = await Templates.findById(id, req.body, { new: true }) + return await azfHandleResponse(templateById, context, req) } catch (err) { return await azfHandleError(err, context, req) diff --git a/func-postdispatches/index.js b/func-postdispatches/index.js index e537412..ae3028c 100644 --- a/func-postdispatches/index.js +++ b/func-postdispatches/index.js @@ -1,63 +1,64 @@ const Dispatches = require('../sharedcode/models/dispatches.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const utils = require('@vtfk/utilities'); -const { ObjectID } = require('mongodb'); -const HTTPError = require('../sharedcode/vtfk-errors/httperror.js'); -const validate = require('../sharedcode/validators/dispatches').validate; -const blobClient = require('@vtfk/azure-blob-client'); -const config = require('../config'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const utils = require('@vtfk/utilities') +const { ObjectID } = require('mongodb') +const HTTPError = require('../sharedcode/vtfk-errors/httperror.js') +const validate = require('../sharedcode/validators/dispatches').validate +const blobClient = require('@vtfk/azure-blob-client') +const config = require('../config') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Strip away som fields that should not bed set by the request. - req.body = utils.removeKeys(req.body, ['validatedArchivenumber', 'createdTimestamp', 'createdBy', 'createdById', 'modifiedTimestamp', 'modifiedBy', 'modifiedById']); - delete req.body._id; // _id must be removed by it self to not remove template _id and other _ids as well + req.body = utils.removeKeys(req.body, ['validatedArchivenumber', 'createdTimestamp', 'createdBy', 'createdById', 'modifiedTimestamp', 'modifiedBy', 'modifiedById']) + delete req.body._id // _id must be removed by it self to not remove template _id and other _ids as well // Authentication / Authorization - const requestor = await require('../sharedcode/auth/auth').auth(req); + const requestor = await require('../sharedcode/auth/auth').auth(req) // Set values req.body._id = new ObjectID() - req.body.status = "notapproved" + req.body.status = 'notapproved' req.body.createdBy = requestor.name req.body.createdById = requestor.id - req.body.createdByEmail = requestor.email; + req.body.createdByEmail = requestor.email req.body.createdByDepartment = requestor.department req.body.modifiedById = requestor.id req.body.modifiedBy = requestor.name - req.body.modifiedByEmail = requestor.email; + req.body.modifiedByEmail = requestor.email req.body.modifiedByDepartment = requestor.department // Validate dispatch against schenarios that cannot be described by schema - await validate(req.body); - req.body.validatedArchivenumber = req.body.archivenumber; + await validate(req.body) + req.body.validatedArchivenumber = req.body.archivenumber // Await the DB connection await getDb() // Check if the attachments contains any invalid characters - if(process.env.NODE_ENV === 'test') { + if (process.env.NODE_ENV === 'test') { console.log('This is a test, uploading to blob is skipped. Any code inside the else statement will not be tested!') if (req.body.attachments && Array.isArray(req.body.attachments) && req.body.attachments.length > 0) { if (!process.env.AZURE_BLOB_CONNECTIONSTRING_TEST || !process.env.AZURE_BLOB_CONTAINERNAME_TEST) { - throw new HTTPError(500, 'Cannot upload attachments when azure blob storage is not configured'); + throw new HTTPError(500, 'Cannot upload attachments when azure blob storage is not configured') } for (const blob of req.body.attachments) { for (const char of blobClient.unallowedPathCharacters) { - if (blob.name.includes(char)) throw new HTTPError(400, `${blob.name} contains the illegal character ${char}`)} + if (blob.name.includes(char)) throw new HTTPError(400, `${blob.name} contains the illegal character ${char}`) + } } - } - } - else { + } + } else { if (req.body.attachments && Array.isArray(req.body.attachments) && req.body.attachments.length > 0) { if (!config.AZURE_BLOB_CONNECTIONSTRING || !config.AZURE_BLOB_CONTAINERNAME) { - throw new HTTPError(500, 'Cannot upload attachments when azure blob storage is not configured'); + throw new HTTPError(500, 'Cannot upload attachments when azure blob storage is not configured') } for (const blob of req.body.attachments) { for (const char of blobClient.unallowedPathCharacters) { - if (blob.name.includes(char)) throw new HTTPError(400, `${blob.name} contains the illegal character ${char}`)} + if (blob.name.includes(char)) throw new HTTPError(400, `${blob.name} contains the illegal character ${char}`) + } } } } @@ -65,22 +66,22 @@ module.exports = async function (context, req) { // Create a new document using the model const dispatch = new Dispatches(req.body) - // Save the new dispatch to the database + // Save the new dispatch to the database const results = await dispatch.save() - const allowedExtensions = ['pdf', 'xlsx', 'xls', 'rtf', 'msg', 'ppt', 'pptx', 'docx', 'doc', 'png', 'jpg', 'jpeg']; + const allowedExtensions = ['pdf', 'xlsx', 'xls', 'rtf', 'msg', 'ppt', 'pptx', 'docx', 'doc', 'png', 'jpg', 'jpeg'] // Upload files attached to the dispatch object if files exist. if (req.body.attachments || Array.isArray(req.body.attachments)) { - for await (let file of req.body.attachments) { - const split = file.name.split('.'); - if(split.length === 1) throw new HTTPError(400, 'All filenames must have an extension') - const extension = split[split.length - 1]; - if(!allowedExtensions.includes(extension.toLowerCase())) throw new HTTPError(400, `The file extension ${extension} is not allowed`); + for await (const file of req.body.attachments) { + const split = file.name.split('.') + if (split.length === 1) throw new HTTPError(400, 'All filenames must have an extension') + const extension = split[split.length - 1] + if (!allowedExtensions.includes(extension.toLowerCase())) throw new HTTPError(400, `The file extension ${extension} is not allowed`) if (file.name && file.name.includes('/')) throw new HTTPError(400, 'Illigal character in filname, "/" is not allowed.') - if (!file.name) file.name = file._id; - - if(process.env.NODE_ENV !== 'test') await blobClient.save(`${req.body._id}/${file.name}`, file.data) + if (!file.name) file.name = file._id + + if (process.env.NODE_ENV !== 'test') await blobClient.save(`${req.body._id}/${file.name}`, file.data) } } @@ -88,4 +89,4 @@ module.exports = async function (context, req) { } catch (err) { return await azfHandleError(err, context, req) } -} \ No newline at end of file +} diff --git a/func-posttemplate/index.js b/func-posttemplate/index.js index fa3fe86..397675a 100644 --- a/func-posttemplate/index.js +++ b/func-posttemplate/index.js @@ -1,38 +1,37 @@ const Templates = require('../sharedcode/models/templates.js') const getDb = require('../sharedcode/connections/masseutsendelseDB.js') -const utils = require('@vtfk/utilities'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const utils = require('@vtfk/utilities') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { - // Authentication / Authorization - const requestor = await require('../sharedcode/auth/auth').auth(req); + // Authentication / Authorization + const requestor = await require('../sharedcode/auth/auth').auth(req) - // Strip away some fields that should not be able to be set by the request - req.body = utils.removeKeys(req.body, ['createdTimestamp', 'createdBy', 'createdById', 'createdByDepartment', 'modifiedTimestamp', 'modifiedBy', 'modifiedById', 'modifiedByDepartment']); + // Strip away some fields that should not be able to be set by the request + req.body = utils.removeKeys(req.body, ['createdTimestamp', 'createdBy', 'createdById', 'createdByDepartment', 'modifiedTimestamp', 'modifiedBy', 'modifiedById', 'modifiedByDepartment']) - // Await database connection - await getDb() + // Await database connection + await getDb() - // Set some default values - req.body.version = 1; - req.body.createdBy = requestor.name - req.body.createdById = requestor.id - req.body.createdByDepartment = requestor.department - req.body.modifiedBy = requestor.name - req.body.modifiedById = requestor.id - req.body.modifiedByDepartment = requestor.department + // Set some default values + req.body.version = 1 + req.body.createdBy = requestor.name + req.body.createdById = requestor.id + req.body.createdByDepartment = requestor.department + req.body.modifiedBy = requestor.name + req.body.modifiedById = requestor.id + req.body.modifiedByDepartment = requestor.department - // Create a new document from model - const template = new Templates(req.body) + // Create a new document from model + const template = new Templates(req.body) - // Save the template to the database - const result = await template.save(); + // Save the template to the database + const result = await template.save() - // Return the result - return await azfHandleResponse(result, context, req) - } catch (err) { - return await azfHandleError(err, context, req) - }; - -} \ No newline at end of file + // Return the result + return await azfHandleResponse(result, context, req) + } catch (err) { + return await azfHandleError(err, context, req) + }; +} diff --git a/func-puttemplates/index.js b/func-puttemplates/index.js index c324390..b142c09 100644 --- a/func-puttemplates/index.js +++ b/func-puttemplates/index.js @@ -1,40 +1,40 @@ const Templates = require('../sharedcode/models/templates.js') -const getDb = require('../sharedcode/connections/masseutsendelseDB.js'); -const utils = require('@vtfk/utilities'); -const HTTPError = require('../sharedcode/vtfk-errors/httperror'); -const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers'); +const getDb = require('../sharedcode/connections/masseutsendelseDB.js') +const utils = require('@vtfk/utilities') +const HTTPError = require('../sharedcode/vtfk-errors/httperror') +const { azfHandleResponse, azfHandleError } = require('@vtfk/responsehandlers') module.exports = async function (context, req) { try { // Authentication / Authorization - const requestor = await require('../sharedcode/auth/auth').auth(req); + const requestor = await require('../sharedcode/auth/auth').auth(req) // Strip away som fields that should not bed set by the request. - req.body = utils.removeKeys(req.body, ['createdTimestamp', 'createdBy', 'createdById', 'modifiedTimestamp', 'modifiedBy', 'modifiedById']); + req.body = utils.removeKeys(req.body, ['createdTimestamp', 'createdBy', 'createdById', 'modifiedTimestamp', 'modifiedBy', 'modifiedById']) // Update modified by req.body.modifiedBy = requestor.name req.body.modifiedById = requestor.id - req.body.modifiedTimestamp = new Date(); - req.body.modifiedByDepartment = requestor.department; + req.body.modifiedTimestamp = new Date() + req.body.modifiedByDepartment = requestor.department // Get ID from request const id = context.bindingData.id - - if(!id) throw new HTTPError(400, 'No template id was provided'); + + if (!id) throw new HTTPError(400, 'No template id was provided') // Await the database await getDb() // Get the existing record - let existingTemplate = await Templates.findById(id).lean(); - if(!existingTemplate) throw new HTTPError(400, `Template with id ${id} could no be found`) + const existingTemplate = await Templates.findById(id).lean() + if (!existingTemplate) throw new HTTPError(400, `Template with id ${id} could no be found`) // Increment the version number - req.body.version = existingTemplate.version + 1; + req.body.version = existingTemplate.version + 1 // Update the template - const updatedTemplate = await Templates.findByIdAndUpdate(id, req.body, {new: true}) + const updatedTemplate = await Templates.findByIdAndUpdate(id, req.body, { new: true }) return await azfHandleResponse(updatedTemplate, context, req) } catch (err) { diff --git a/host.json b/host.json index 506376e..f6f6fa0 100644 --- a/host.json +++ b/host.json @@ -2,6 +2,6 @@ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", - "version": "[2.*, 3.0.0)" + "version": "[3.*, 4.0.0)" } } \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index c3c65b0..88e6087 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,3 @@ module.exports = { - setupFiles: ["/jest/setEnvVars.js"] -}; \ No newline at end of file + setupFiles: ['/jest/setEnvVars.js'] +} diff --git a/jest/setEnvVars.js b/jest/setEnvVars.js index e945d94..13a92e3 100644 --- a/jest/setEnvVars.js +++ b/jest/setEnvVars.js @@ -4,10 +4,9 @@ process.env.APIKEYS_TEST = 'En Lama' process.env.AZURE_BLOB_CONNECTIONSTRING_TEST = 'Med sandaler' process.env.AZURE_BLOB_CONTAINERNAME_TEST = 'og frakk' process.env.VTFK_PDFGENERATOR_ENDPOINT = 'https://api.vtfk.no/pdf/v1/jestTest' -process.env.AZURE_BLOB_CONNECTIONSTRING = "DefaultEndpointsProtocol=https;AccountName=blobTest;AccountKey=1337" -process.env.AZURE_BLOB_CONTAINERNAME = "files" +process.env.AZURE_BLOB_CONNECTIONSTRING = 'DefaultEndpointsProtocol=https;AccountName=blobTest;AccountKey=1337' +process.env.AZURE_BLOB_CONTAINERNAME = 'files' process.env.VTFK_MATRIKKELPROXY_BASEURL = 'https://api.vtfk.no/matrikkel/v1/jestTest' process.env.VTFK_MATRIKKELPROXY_APIKEY = 'En frakk med sandaler og lama' process.env.VTFK_P360_ARCHIVE_ENDPOINT = 'https://api.vtfk.dev/archive/v1/jestTest' process.env.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY = 'min key' - \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 362e6c4..6a709f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,43 +1,743 @@ { "name": "test-func-masseutsendelse", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@ampproject/remapping": { + "packages": { + "": { + "name": "test-func-masseutsendelse", + "version": "1.0.0", + "dependencies": { + "@azure/storage-blob": "12.11.0", + "@shelf/jest-mongodb": "2.2.2", + "@vtfk/azure-blob-client": "0.0.4", + "@vtfk/logger": "4.1.2", + "@vtfk/responsehandlers": "1.0.25", + "@vtfk/utilities": "1.0.0", + "axios": "0.24.0", + "azure-ad-verify-token": "1.1.2", + "dayjs": "1.10.8", + "express": "4.17.3", + "mongoose": "6.1.8" + }, + "devDependencies": { + "jest": "27.5.1", + "mongodb-memory-server": "8.2.0", + "msw": "^0.36.8" + } + }, + "node_modules/@ampproject/remapping": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "@azure/abort-controller": { + "node_modules/@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/crc32/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.414.0.tgz", + "integrity": "sha512-U9J0R/22eftQjY6JeAzXXYSgA+T6vx/jDsBBWBIKTjCZPBmmVOb2A4/d4sxHMxjh6Ms3DolpocE5FCbB9eGBEg==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", + "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", + "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.414.0.tgz", + "integrity": "sha512-sAbp5HVy0YmvXUKkkTt8Tr5a5XNQMxshxI+pmXHLCHNpRATS9A6i7YHVNMGmERKGriFWZG0Q8qgKh1E+rvN7fQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", + "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", + "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", + "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.414.0.tgz", + "integrity": "sha512-xv3cN/lu+HRroGWYWtqwBQ+guykyjSKHzYq6FlyfBZyjC6u8hoeNSNilFobIooJOXfrDM0LKr9L+uUlPE+0+lg==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-cognito-identity": "3.414.0", + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-sts": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.413.0.tgz", + "integrity": "sha512-h90e6yyOhvoc+1F5vFk3C5mxwB8RSDEMKTO/fxexyur94seczZ1yxyYkTMZv30oc9RUiToABlHNrh/wxL7TZPQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@azure/abort-controller": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "requires": { + "dependencies": { "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/core-auth": { + "node_modules/@azure/core-auth": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz", "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==", - "requires": { + "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/core-http": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.2.5.tgz", - "integrity": "sha512-kctMqSQ6zfnlFpuYzfUKadeTyOQYbIQ+3Rj7dzVC3Dk1dOnHroTwR9hLYKX8/n85iJpkyaksaXpuh5L7GJRYuQ==", - "requires": { + "node_modules/@azure/core-http": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz", + "integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==", + "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", "@azure/core-tracing": "1.0.0-preview.13", + "@azure/core-util": "^1.1.1", "@azure/logger": "^1.0.0", "@types/node-fetch": "^2.5.0", "@types/tunnel": "^0.0.3", @@ -48,62 +748,90 @@ "tslib": "^2.2.0", "tunnel": "^0.0.6", "uuid": "^8.3.0", - "xml2js": "^0.4.19" + "xml2js": "^0.5.0" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/core-http/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "@azure/core-lro": { + "node_modules/@azure/core-lro": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.4.tgz", "integrity": "sha512-e1I2v2CZM0mQo8+RSix0x091Av493e4bnT22ds2fcQGslTHzM2oTbswkB65nP4iEpCxBrFxOSDPKExmTmjCVtQ==", - "requires": { + "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-tracing": "1.0.0-preview.13", "@azure/logger": "^1.0.0", "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/core-paging": { + "node_modules/@azure/core-paging": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.3.0.tgz", "integrity": "sha512-H6Tg9eBm0brHqLy0OSAGzxIh1t4UL8eZVrSUMJ60Ra9cwq2pOskFqVpz2pYoHDsBY1jZ4V/P8LRGb5D5pmC6rg==", - "requires": { + "dependencies": { "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/core-tracing": { + "node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", - "requires": { + "dependencies": { "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/logger": { + "node_modules/@azure/core-util": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", + "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/logger": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", - "requires": { + "dependencies": { "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@azure/storage-blob": { + "node_modules/@azure/storage-blob": { "version": "12.11.0", "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.11.0.tgz", "integrity": "sha512-na+FisoARuaOWaHWpmdtk3FeuTWf2VWamdJ9/TJJzj5ZdXPLC3juoDgFs6XVuJIoK30yuBpyFBEDXVRK4pB7Tg==", - "requires": { + "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-http": "^2.0.0", "@azure/core-lro": "^2.2.0", @@ -112,29 +840,37 @@ "@azure/logger": "^1.0.0", "events": "^3.0.0", "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@babel/code-frame": { + "node_modules/@babel/code-frame": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { + "dependencies": { "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { + "node_modules/@babel/compat-data": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { + "node_modules/@babel/core": { "version": "7.17.5", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", "dev": true, - "requires": { + "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.17.3", @@ -151,729 +887,8947 @@ "json5": "^2.1.2", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { "version": "7.17.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, - "requires": { + "dependencies": { "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-environment-visitor": { + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-function-name": { + "node_modules/@babel/helper-function-name": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-get-function-arity": { + "node_modules/@babel/helper-get-function-arity": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { + "node_modules/@babel/helper-hoist-variables": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, - "requires": { + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", + "dev": true, + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@mswjs/cookies": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz", + "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==", + "dev": true, + "dependencies": { + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.12.7.tgz", + "integrity": "sha512-eGjZ3JRAt0Fzi5FgXiV/P3bJGj0NqsN7vBS0J0FO2AQRQ0jCKQS4lEFm4wvlSgKQNfeuc/Vz6d81VtU3Gkx/zg==", + "dev": true, + "dependencies": { + "@open-draft/until": "^1.0.3", + "@xmldom/xmldom": "^0.7.2", + "debug": "^4.3.2", + "headers-utils": "^3.0.2", + "outvariant": "^1.2.0", + "strict-event-emitter": "^0.2.0" + } + }, + "node_modules/@mswjs/interceptors/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@mswjs/interceptors/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, + "node_modules/@opentelemetry/api": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", + "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@shelf/jest-mongodb": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@shelf/jest-mongodb/-/jest-mongodb-2.2.2.tgz", + "integrity": "sha512-trlJCZ0wPWHlsyr6WBDk+DshYwMg7UiXsCCz/XH3jLtEyCKKUOGn8UUI9KCJY/SwCiHmNFSWHrOjVqM/RKC1Iw==", + "dependencies": { + "debug": "4.3.2", + "mongodb-memory-server": "7.6.3", + "uuid": "8.3.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "jest-environment-node": "27.x.x", + "mongodb": "3.x.x || 4.x" + } + }, + "node_modules/@shelf/jest-mongodb/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@shelf/jest-mongodb/node_modules/mongodb-memory-server": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-7.6.3.tgz", + "integrity": "sha512-yHDE9FGxOpSRUzitF9Qx3JjEgayCSJI3JOW2wgeBH/5PAsUdisy2nRxRiNwwLDooQ7tohllWCRTXlWqyarUEMQ==", + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "7.6.3", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@shelf/jest-mongodb/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz", + "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz", + "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz", + "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.9.tgz", + "integrity": "sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==", + "dev": true, + "optional": true, + "dependencies": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz", + "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz", + "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz", + "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz", + "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz", + "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/middleware-serde": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz", + "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-retry": "^2.0.2", + "tslib": "^2.5.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz", + "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.3.tgz", + "integrity": "sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz", + "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.0.10", + "@smithy/shared-ini-file-loader": "^2.0.11", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz", + "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/abort-controller": "^2.0.9", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz", + "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz", + "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz", + "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz", + "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz", + "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.9.tgz", + "integrity": "sha512-RkHP0joSI1j2EI+mU55sOi33/aMMkKdL9ZY+SWrPxsiCe1oyzzuy79Tpn8X7uT+t0ilNmQlwPpkP/jUy940pEA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/eventstream-codec": "^2.0.9", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.7.tgz", + "integrity": "sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/middleware-stack": "^2.0.3", + "@smithy/types": "^2.3.3", + "@smithy/util-stream": "^2.0.12", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz", + "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz", + "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/querystring-parser": "^2.0.9", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.11.tgz", + "integrity": "sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.13.tgz", + "integrity": "sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/config-resolver": "^2.0.10", + "@smithy/credential-provider-imds": "^2.0.12", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz", + "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz", + "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz", + "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/types": "^2.3.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "dev": true, + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/bson": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.2.0.tgz", + "integrity": "sha512-ELCPqAdroMdcuxqwMgUpifQyRoTpyYCNr1V9xKyF40VsBobsj+BbWNRvwGchMgBPGqkw655ypkjj2MEF5ywVwg==", + "deprecated": "This is a stub types definition. bson provides its own type definitions, so you do not need this installed.", + "dependencies": { + "bson": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-BNoMetRf3gmkpAlV5we+kxyZTle7YibdOntIZbU5pyIfMdcwy784KfeZDAcuyMznkh5OLa17RVXZOGA5LTlkgQ==", + "dev": true, + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/js-levenshtein": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", + "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", + "dev": true + }, + "node_modules/@types/mongodb": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", + "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", + "dependencies": { + "@types/bson": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "16.11.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", + "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", + "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/prettier": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", + "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", + "dev": true + }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz", + "integrity": "sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + }, + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-dDZH/tXzwjutnuk4UacGgFRwV+JSLaXL1ikvidfJprkb7L9Nx1njcRHHmi3Dsvt7pgqqTEeucQuOrWHPFgzVHA==" + }, + "node_modules/@types/tunnel": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + }, + "node_modules/@vtfk/azure-blob-client": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@vtfk/azure-blob-client/-/azure-blob-client-0.0.4.tgz", + "integrity": "sha512-RuoP7V6c5aaPtwUMirITdGo4C85ZKd79luf7gaKa8tx+/K/ogUXzhAjE6xH/JXX0LNxjk8GaNX9sr8f8n8gEig==", + "dependencies": { + "@azure/storage-blob": "^12.8.0", + "dotenv": "^10.0.0" + } + }, + "node_modules/@vtfk/e18": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@vtfk/e18/-/e18-1.2.3.tgz", + "integrity": "sha512-LAxr4kb8z7R3uOW1XpHo3XzEXsWqWG1QRfqii32i6T3FrVgb2z+cj+Cp6OejVjcGWu8SdShIkdE8G70Jn4b/BQ==", + "dependencies": { + "@vtfk/logger": "4.0.1", + "axios": "0.25.0" + }, + "engines": { + "node": ">12" + } + }, + "node_modules/@vtfk/e18/node_modules/@vtfk/logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@vtfk/logger/-/logger-4.0.1.tgz", + "integrity": "sha512-eBNtnoEfNg3Yh1HnvwctWW65++qfYvOoUDJHNnaYXs1bQfjtOGcVSMB9+iFVJU1Js2ns0fZjEOcmsIv4zFPENQ==", + "dependencies": { + "axios": "0.24.0", + "deepmerge": "^4.2.2", + "pkg-dir": "5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vtfk/e18/node_modules/@vtfk/logger/node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/@vtfk/e18/node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/@vtfk/e18/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/e18/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/e18/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/e18/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/e18/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vtfk/logger": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vtfk/logger/-/logger-4.1.2.tgz", + "integrity": "sha512-k94B5lzaSUdnphkbAy7bw6eqObbtvHE6ydYqdZGn7bMONIVeybg4eU7mwkMoISmAIClLzltPV7p8jCspPbxiLQ==", + "dependencies": { + "axios": "0.25.0", + "deepmerge": "^4.2.2", + "pkg-dir": "5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vtfk/logger/node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/@vtfk/logger/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/logger/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/logger/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/logger/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vtfk/logger/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vtfk/responsehandlers": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/@vtfk/responsehandlers/-/responsehandlers-1.0.25.tgz", + "integrity": "sha512-h/eSy2/vG/XHRETCbOgtnfE24LmUIKjmhSkj2UDUtlYSA8ql0ipnF3+yLRoAP5toliOyLC26ffAsGPgdB+X2Mw==", + "dependencies": { + "@vtfk/e18": "^1.2.3", + "@vtfk/logger": "^4.0.1", + "@vtfk/utilities": "^1.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2" + } + }, + "node_modules/@vtfk/utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@vtfk/utilities/-/utilities-1.0.0.tgz", + "integrity": "sha512-yJdYmTSNTzm0zSFYOZkTPEWBFXVL4k5wgZdRCNwG2FgaVGlP+aff/KZdVjV2QYzNFmlo4TLNV9Oe7cW+2TEBqA==" + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/async-mutex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "node_modules/axios": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", + "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "dependencies": { + "follow-redirects": "^1.14.4" + } + }, + "node_modules/azure-ad-verify-token": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/azure-ad-verify-token/-/azure-ad-verify-token-1.1.2.tgz", + "integrity": "sha512-/qqyjl8J7fkb7maksCqUp/KqKQWAxeQawvhzfZRDJoEyFliK/0NdGySAFH5al+VsTYTmxYxHOtiDzmGg3N/koA==", + "dependencies": { + "jsonwebtoken": "^8.5.1", + "node-fetch": "^2.6.1", + "rsa-pem-from-mod-exp": "^0.8.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true, + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.2.tgz", + "integrity": "sha512-97XU1CTZ5TwU9Qy/Taj+RtiI6SQM1WIhZ9osT7EY0oO2aWXGABZT2OZeRL+6PfaQsiiMIjjwIoYFPq4APgspgQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001312", + "electron-to-chromium": "^1.4.71", + "escalade": "^3.1.1", + "node-releases": "^2.0.2", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001312", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz", + "integrity": "sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dayjs": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.8.tgz", + "integrity": "sha512-wbNwDfBHHur9UOzNUjeKUOJ0fCb0a52Wx0xInmQ7Y8FstyajiV1NmK1e00cxsr9YrE9r7yAChE0VvpuY5Rnlow==" + }, + "node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.71", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz", + "integrity": "sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/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=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "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.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "dev": true, + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/graphql": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", + "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/headers-utils": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/headers-utils/-/headers-utils-3.0.2.tgz", + "integrity": "sha512-xAxZkM1dRyGV2Ou5bzMxBPNLoRCjcX+ya7KSWybQD2KwLphxsapUVK6x/02o7f4VU6GPSXch9vNY2+gkU8tYWQ==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", + "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-node-process": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.0.1.tgz", + "integrity": "sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", + "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "node_modules/lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/md5-file": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz", + "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==", + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", + "integrity": "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==", + "dependencies": { + "bl": "^2.2.1", + "bson": "^1.1.4", + "denque": "^1.4.1", + "optional-require": "^1.1.8", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4" + }, + "optionalDependencies": { + "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-8.2.0.tgz", + "integrity": "sha512-ahp93rbJzvqVInJ6EOH4pkdfcm3+5gGQ0WjTQvyB8X3n61jn7yITKGCE0wwvg5JME32XemiQUNAp44XdlD+fpg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "8.2.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-7.6.3.tgz", + "integrity": "sha512-5rv79YlPoPvguRfFv1fvR78z69/QohGD+65f9UYWDfD70ykXpf6tAXPpWJ4ww/ues7FIVepkFCr3aiUvu6lA+A==", + "dependencies": { + "@types/mongodb": "^3.6.20", + "@types/tmp": "^0.2.2", + "async-mutex": "^0.3.2", + "camelcase": "^6.1.0", + "debug": "^4.2.0", + "find-cache-dir": "^3.3.2", + "get-port": "^5.1.1", + "https-proxy-agent": "^5.0.0", + "md5-file": "^5.0.0", + "mkdirp": "^1.0.4", + "mongodb": "^3.7.3", + "new-find-package-json": "^1.1.0", + "semver": "^7.3.5", + "tar-stream": "^2.1.4", + "tmp": "^0.2.1", + "tslib": "^2.3.0", + "uuid": "^8.3.1", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mongodb-memory-server-core/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb-memory-server/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mongodb-memory-server/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server/node_modules/mongodb": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", + "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", + "dev": true, + "dependencies": { + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0" + } + }, + "node_modules/mongodb-memory-server/node_modules/mongodb-memory-server-core": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-8.2.0.tgz", + "integrity": "sha512-7NO+PJQ74wpo/e/fJYIvjjkbhMRn27yFTQzZZKf94y1Cqw/2pJZ+RSI8QJclT53/lyVyx0BLgA/ik6viKy4hDg==", + "dev": true, + "dependencies": { + "@types/tmp": "^0.2.3", + "async-mutex": "^0.3.2", + "camelcase": "^6.2.1", + "debug": "^4.3.3", + "find-cache-dir": "^3.3.2", + "get-port": "^5.1.1", + "https-proxy-agent": "^5.0.0", + "md5-file": "^5.0.0", + "mongodb": "^4.2.2", + "new-find-package-json": "^1.1.0", + "semver": "^7.3.5", + "tar-stream": "^2.1.4", + "tmp": "^0.2.1", + "tslib": "^2.3.1", + "uuid": "^8.3.1", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/mongodb-memory-server/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mongodb-memory-server/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb/node_modules/bson": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", + "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/mongodb/node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/mongoose": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.8.tgz", + "integrity": "sha512-/voqwU2dtet3zAR73r8jdPhqluU1VzIAnk7ecXPJBgyXKREnwQrz40lfW7fLpaqhmMhsAbA+JQ7ICUn2vAVFLw==", + "dependencies": { + "@types/node": "< 17.0.6", + "bson": "^4.2.2", + "kareem": "2.3.3", + "mongodb": "4.2.2", + "mpath": "0.8.4", + "mquery": "4.0.2", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "sift": "13.5.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.2.2.tgz", + "integrity": "sha512-zt8rCTnTKyMQppyt63qMnrLM5dbADgUk18ORPF1XbtHLIYCyc9hattaYHi0pqMvNxDpgGgUofSVzS+UQErgTug==", + "dependencies": { + "bson": "^4.6.0", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.3.2" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/mpath": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.2.tgz", + "integrity": "sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/msw": { + "version": "0.36.8", + "resolved": "https://registry.npmjs.org/msw/-/msw-0.36.8.tgz", + "integrity": "sha512-K7lOQoYqhGhTSChsmHMQbf/SDCsxh/m0uhN6Ipt206lGoe81fpTmaGD0KLh4jUxCONMOUnwCSj0jtX2CM4pEdw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@mswjs/cookies": "^0.1.7", + "@mswjs/interceptors": "^0.12.7", + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.1", + "@types/inquirer": "^8.1.3", + "@types/js-levenshtein": "^1.1.0", + "chalk": "4.1.1", + "chokidar": "^3.4.2", + "cookie": "^0.4.1", + "graphql": "^15.5.1", + "headers-utils": "^3.0.2", + "inquirer": "^8.2.0", + "is-node-process": "^1.0.1", + "js-levenshtein": "^1.1.6", + "node-fetch": "^2.6.7", + "path-to-regexp": "^6.2.0", + "statuses": "^2.0.0", + "strict-event-emitter": "^0.2.0", + "type-fest": "^1.2.2", + "yargs": "^17.3.0" + }, + "bin": { + "msw": "cli/index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mswjs" + } + }, + "node_modules/msw/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==", + "dev": true + }, + "node_modules/msw/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/msw/node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/msw/node_modules/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/new-find-package-json": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-1.1.0.tgz", + "integrity": "sha512-KOH3BNZcTKPzEkaJgG2iSUaurxKmefqRKmCOYH+8xqJytNIgjqU4J88BHfK+gy/UlEzlhccLyuJDJAcCgexSwA==", + "dependencies": { + "debug": "^4.3.2", + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optional-require": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz", + "integrity": "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==", + "dependencies": { + "require-at": "^1.0.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outvariant": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.2.1.tgz", + "integrity": "sha512-bcILvFkvpMXh66+Ubax/inxbKRyWTUiiFIW2DWkiS79wakrLGn3Ydy+GvukadiyfZjaL6C7YhIem4EZSM282wA==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "node_modules/require-at": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz", + "integrity": "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsa-pem-from-mod-exp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/rsa-pem-from-mod-exp/-/rsa-pem-from-mod-exp-0.8.4.tgz", + "integrity": "sha1-NipCxtMEBW1JOz8SvOq7LGV2ptQ=" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", + "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", + "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sift": { + "version": "13.5.2", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", + "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/strict-event-emitter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.0.tgz", + "integrity": "sha512-zv7K2egoKwkQkZGEaH8m+i2D0XiKzx5jNsiSul6ja2IYFvil10A59Z9Y7PPAAe5OW53dQUf9CfsHKzjZzKkm1w==", + "dev": true, + "dependencies": { + "events": "^3.3.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true, + "optional": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@aws-crypto/crc32": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz", + "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "optional": true + } + } + }, + "@aws-sdk/client-cognito-identity": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.414.0.tgz", + "integrity": "sha512-U9J0R/22eftQjY6JeAzXXYSgA+T6vx/jDsBBWBIKTjCZPBmmVOb2A4/d4sxHMxjh6Ms3DolpocE5FCbB9eGBEg==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", + "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/client-sts": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", + "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-sdk-sts": "3.413.0", + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/region-config-resolver": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/protocol-http": "^3.0.3", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-cognito-identity": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.414.0.tgz", + "integrity": "sha512-sAbp5HVy0YmvXUKkkTt8Tr5a5XNQMxshxI+pmXHLCHNpRATS9A6i7YHVNMGmERKGriFWZG0Q8qgKh1E+rvN7fQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-env": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", + "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-ini": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", + "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-node": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", + "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-process": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", + "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-sso": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", + "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/token-providers": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-provider-web-identity": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", + "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/credential-providers": { + "version": "3.414.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.414.0.tgz", + "integrity": "sha512-xv3cN/lu+HRroGWYWtqwBQ+guykyjSKHzYq6FlyfBZyjC6u8hoeNSNilFobIooJOXfrDM0LKr9L+uUlPE+0+lg==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/client-cognito-identity": "3.414.0", + "@aws-sdk/client-sso": "3.414.0", + "@aws-sdk/client-sts": "3.414.0", + "@aws-sdk/credential-provider-cognito-identity": "3.414.0", + "@aws-sdk/credential-provider-env": "3.413.0", + "@aws-sdk/credential-provider-ini": "3.414.0", + "@aws-sdk/credential-provider-node": "3.414.0", + "@aws-sdk/credential-provider-process": "3.413.0", + "@aws-sdk/credential-provider-sso": "3.414.0", + "@aws-sdk/credential-provider-web-identity": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-host-header": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", + "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-logger": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", + "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-recursion-detection": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", + "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-sdk-sts": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", + "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/middleware-signing": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-signing": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", + "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.3.1", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/middleware-user-agent": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", + "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/region-config-resolver": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.413.0.tgz", + "integrity": "sha512-h90e6yyOhvoc+1F5vFk3C5mxwB8RSDEMKTO/fxexyur94seczZ1yxyYkTMZv30oc9RUiToABlHNrh/wxL7TZPQ==", + "dev": true, + "optional": true, + "requires": { + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/token-providers": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", + "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.413.0", + "@aws-sdk/middleware-logger": "3.413.0", + "@aws-sdk/middleware-recursion-detection": "3.413.0", + "@aws-sdk/middleware-user-agent": "3.413.0", + "@aws-sdk/types": "3.413.0", + "@aws-sdk/util-endpoints": "3.413.0", + "@aws-sdk/util-user-agent-browser": "3.413.0", + "@aws-sdk/util-user-agent-node": "3.413.0", + "@smithy/config-resolver": "^2.0.8", + "@smithy/fetch-http-handler": "^2.1.3", + "@smithy/hash-node": "^2.0.7", + "@smithy/invalid-dependency": "^2.0.7", + "@smithy/middleware-content-length": "^2.0.9", + "@smithy/middleware-endpoint": "^2.0.7", + "@smithy/middleware-retry": "^2.0.10", + "@smithy/middleware-serde": "^2.0.7", + "@smithy/middleware-stack": "^2.0.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/node-http-handler": "^2.1.3", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.3", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.1.4", + "@smithy/types": "^2.3.1", + "@smithy/url-parser": "^2.0.7", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-body-length-browser": "^2.0.0", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.8", + "@smithy/util-defaults-mode-node": "^2.0.10", + "@smithy/util-retry": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/types": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", + "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "dev": true, + "optional": true, + "requires": { + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-endpoints": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", + "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-locate-window": { + "version": "3.310.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", + "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-browser": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", + "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/types": "^2.3.1", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-user-agent-node": { + "version": "3.413.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", + "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "dev": true, + "optional": true, + "requires": { + "@aws-sdk/types": "3.413.0", + "@smithy/node-config-provider": "^2.0.10", + "@smithy/types": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.3.1" + } + }, + "@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-auth": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz", + "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-http": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz", + "integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/core-util": "^1.1.1", + "@azure/logger": "^1.0.0", + "@types/node-fetch": "^2.5.0", + "@types/tunnel": "^0.0.3", + "form-data": "^4.0.0", + "node-fetch": "^2.6.7", + "process": "^0.11.10", + "tough-cookie": "^4.0.0", + "tslib": "^2.2.0", + "tunnel": "^0.0.6", + "uuid": "^8.3.0", + "xml2js": "^0.5.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@azure/core-lro": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.4.tgz", + "integrity": "sha512-e1I2v2CZM0mQo8+RSix0x091Av493e4bnT22ds2fcQGslTHzM2oTbswkB65nP4iEpCxBrFxOSDPKExmTmjCVtQ==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/core-paging": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.3.0.tgz", + "integrity": "sha512-H6Tg9eBm0brHqLy0OSAGzxIh1t4UL8eZVrSUMJ60Ra9cwq2pOskFqVpz2pYoHDsBY1jZ4V/P8LRGb5D5pmC6rg==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/core-tracing": { + "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", + "requires": { + "@opentelemetry/api": "^1.0.1", + "tslib": "^2.2.0" + } + }, + "@azure/core-util": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", + "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + } + }, + "@azure/logger": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@azure/storage-blob": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.11.0.tgz", + "integrity": "sha512-na+FisoARuaOWaHWpmdtk3FeuTWf2VWamdJ9/TJJzj5ZdXPLC3juoDgFs6XVuJIoK30yuBpyFBEDXVRK4pB7Tg==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-http": "^2.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.1.1", + "@azure/core-tracing": "1.0.0-preview.13", + "@azure/logger": "^1.0.0", + "events": "^3.0.0", + "tslib": "^2.2.0" + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "dev": true + }, + "@babel/core": { + "version": "7.17.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz", + "integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.3", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", + "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.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==", + "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==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", + "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", + "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.3", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.3", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "requires": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "requires": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + } + }, + "@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "requires": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + } + }, + "@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "requires": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + } + }, + "@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + } + }, + "@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "requires": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "requires": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + } + }, + "@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, + "@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "requires": { - "@babel/types": "^7.16.7" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" } }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", "dev": true }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "@mongodb-js/saslprep": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz", + "integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==", "dev": true, + "optional": true, "requires": { - "@babel/types": "^7.16.7" + "sparse-bitfield": "^3.0.3" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", + "@mswjs/cookies": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz", + "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" } }, - "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "@mswjs/interceptors": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.12.7.tgz", + "integrity": "sha512-eGjZ3JRAt0Fzi5FgXiV/P3bJGj0NqsN7vBS0J0FO2AQRQ0jCKQS4lEFm4wvlSgKQNfeuc/Vz6d81VtU3Gkx/zg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@open-draft/until": "^1.0.3", + "@xmldom/xmldom": "^0.7.2", + "debug": "^4.3.2", + "headers-utils": "^3.0.2", + "outvariant": "^1.2.0", + "strict-event-emitter": "^0.2.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==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "ms": "2.1.2" } }, - "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, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, + "@opentelemetry/api": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", + "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" + }, + "@shelf/jest-mongodb": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@shelf/jest-mongodb/-/jest-mongodb-2.2.2.tgz", + "integrity": "sha512-trlJCZ0wPWHlsyr6WBDk+DshYwMg7UiXsCCz/XH3jLtEyCKKUOGn8UUI9KCJY/SwCiHmNFSWHrOjVqM/RKC1Iw==", + "requires": { + "debug": "4.3.2", + "mongodb-memory-server": "7.6.3", + "uuid": "8.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ms": "2.1.2" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "mongodb-memory-server": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-7.6.3.tgz", + "integrity": "sha512-yHDE9FGxOpSRUzitF9Qx3JjEgayCSJI3JOW2wgeBH/5PAsUdisy2nRxRiNwwLDooQ7tohllWCRTXlWqyarUEMQ==", "requires": { - "color-name": "1.1.3" + "mongodb-memory-server-core": "7.6.3", + "tslib": "^2.3.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "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" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, - "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", - "dev": true + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "requires": { + "type-detect": "4.0.8" + } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@smithy/abort-controller": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz", + "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "@smithy/config-resolver": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz", + "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/node-config-provider": "^2.0.12", + "@smithy/types": "^2.3.3", + "@smithy/util-config-provider": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "@smithy/credential-provider-imds": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz", + "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "@smithy/eventstream-codec": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.9.tgz", + "integrity": "sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==", + "dev": true, + "optional": true, + "requires": { + "@aws-crypto/crc32": "3.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-hex-encoding": "^2.0.0", + "tslib": "^2.5.0" + } + }, + "@smithy/fetch-http-handler": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz", + "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/util-base64": "^2.0.0", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "@smithy/hash-node": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz", + "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^2.3.3", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "@smithy/invalid-dependency": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz", + "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "@smithy/is-array-buffer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz", + "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "@smithy/middleware-content-length": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz", + "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@smithy/protocol-http": "^3.0.5", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "@smithy/middleware-endpoint": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz", + "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/middleware-serde": "^2.0.9", + "@smithy/types": "^2.3.3", + "@smithy/url-parser": "^2.0.9", + "@smithy/util-middleware": "^2.0.2", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "@smithy/middleware-retry": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz", + "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/node-config-provider": "^2.0.12", + "@smithy/protocol-http": "^3.0.5", + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-retry": "^2.0.2", + "tslib": "^2.5.0", + "uuid": "^8.3.2" } }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "@smithy/middleware-serde": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz", + "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "@smithy/middleware-stack": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.3.tgz", + "integrity": "sha512-AlhPmbwpkC4lQBVaVHXczmjFvsAhDHhrakqLt038qFLotnJcvDLhmMzAtu23alBeOSkKxkTQq0LsAt2N0WpAbw==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz", - "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==", + "@smithy/node-config-provider": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz", + "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==", "dev": true, + "optional": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@smithy/property-provider": "^2.0.10", + "@smithy/shared-ini-file-loader": "^2.0.11", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "@smithy/node-http-handler": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz", + "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==", "dev": true, + "optional": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@smithy/abort-controller": "^2.0.9", + "@smithy/protocol-http": "^3.0.5", + "@smithy/querystring-builder": "^2.0.9", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "@smithy/property-provider": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz", + "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==", "dev": true, + "optional": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "@smithy/protocol-http": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", + "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", "dev": true, + "optional": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "@smithy/querystring-builder": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz", + "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==", "dev": true, + "optional": true, "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@smithy/types": "^2.3.3", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" } }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "@smithy/querystring-parser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz", + "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==", + "dev": true, + "optional": true, + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "@smithy/service-error-classification": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz", + "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==", "dev": true, + "optional": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" + "@smithy/types": "^2.3.3" } }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "@smithy/shared-ini-file-loader": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz", + "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==", "dev": true, + "optional": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "@smithy/signature-v4": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.9.tgz", + "integrity": "sha512-RkHP0joSI1j2EI+mU55sOi33/aMMkKdL9ZY+SWrPxsiCe1oyzzuy79Tpn8X7uT+t0ilNmQlwPpkP/jUy940pEA==", "dev": true, + "optional": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" + "@smithy/eventstream-codec": "^2.0.9", + "@smithy/is-array-buffer": "^2.0.0", + "@smithy/types": "^2.3.3", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-middleware": "^2.0.2", + "@smithy/util-uri-escape": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" } }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "@smithy/smithy-client": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.7.tgz", + "integrity": "sha512-r6T/oiBQ8vCbGqObH4/h0YqD0jFB1hAS9KFRmuTfaNJueu/L2hjmjqFjv3PV5lkbNHTgUYraSv4cFQ1naxiELQ==", "dev": true, + "optional": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "@smithy/middleware-stack": "^2.0.3", + "@smithy/types": "^2.3.3", + "@smithy/util-stream": "^2.0.12", + "tslib": "^2.5.0" } }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "@smithy/types": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz", + "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==", "dev": true, + "optional": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "tslib": "^2.5.0" } }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "@smithy/url-parser": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz", + "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==", "dev": true, + "optional": true, "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "@smithy/querystring-parser": "^2.0.9", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "@smithy/util-base64": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", + "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", "dev": true, + "optional": true, "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" } }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "@smithy/util-body-length-browser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz", + "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==", "dev": true, + "optional": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "tslib": "^2.5.0" } }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "@smithy/util-body-length-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz", + "integrity": "sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==", "dev": true, + "optional": true, "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "tslib": "^2.5.0" } }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "@smithy/util-buffer-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz", + "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==", "dev": true, + "optional": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" } }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "@smithy/util-config-provider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz", + "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==", "dev": true, + "optional": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "tslib": "^2.5.0" } }, - "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "@smithy/util-defaults-mode-browser": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.11.tgz", + "integrity": "sha512-0syV1Mz/mCQ7CG/MHKQfH+w86xq59jpD0EOXv5oe0WBXLmq2lWPpVHl2Y6+jQ+/9fYzyZ5NF+NC/WEIuiv690A==", "dev": true, + "optional": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", + "bowser": "^2.11.0", + "tslib": "^2.5.0" } }, - "@mswjs/cookies": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.1.7.tgz", - "integrity": "sha512-bDg1ReMBx+PYDB4Pk7y1Q07Zz1iKIEUWQpkEXiA2lEWg9gvOZ8UBmGXilCEUvyYoRFlmr/9iXTRR69TrgSwX/Q==", + "@smithy/util-defaults-mode-node": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.13.tgz", + "integrity": "sha512-6BtCHYdw5Z8r6KpW8tRCc3yURgvcQwfIEeHhR70BeSOfx8T/TXPPjb8A+K45+KASspa3fzrsSxeIwB0sAeMoHA==", "dev": true, + "optional": true, "requires": { - "@types/set-cookie-parser": "^2.4.0", - "set-cookie-parser": "^2.4.6" + "@smithy/config-resolver": "^2.0.10", + "@smithy/credential-provider-imds": "^2.0.12", + "@smithy/node-config-provider": "^2.0.12", + "@smithy/property-provider": "^2.0.10", + "@smithy/smithy-client": "^2.1.7", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" } }, - "@mswjs/interceptors": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.12.7.tgz", - "integrity": "sha512-eGjZ3JRAt0Fzi5FgXiV/P3bJGj0NqsN7vBS0J0FO2AQRQ0jCKQS4lEFm4wvlSgKQNfeuc/Vz6d81VtU3Gkx/zg==", + "@smithy/util-hex-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", + "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", "dev": true, + "optional": true, "requires": { - "@open-draft/until": "^1.0.3", - "@xmldom/xmldom": "^0.7.2", - "debug": "^4.3.2", - "headers-utils": "^3.0.2", - "outvariant": "^1.2.0", - "strict-event-emitter": "^0.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "tslib": "^2.5.0" } }, - "@open-draft/until": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", - "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", - "dev": true + "@smithy/util-middleware": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz", + "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==", + "dev": true, + "optional": true, + "requires": { + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } }, - "@opentelemetry/api": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.1.0.tgz", - "integrity": "sha512-hf+3bwuBwtXsugA2ULBc95qxrOqP2pOekLz34BJhcAKawt94vfeNyUKpYc0lZQ/3sCP6LqRa7UAdHA7i5UODzQ==" + "@smithy/util-retry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz", + "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==", + "dev": true, + "optional": true, + "requires": { + "@smithy/service-error-classification": "^2.0.2", + "@smithy/types": "^2.3.3", + "tslib": "^2.5.0" + } }, - "@shelf/jest-mongodb": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@shelf/jest-mongodb/-/jest-mongodb-2.2.2.tgz", - "integrity": "sha512-trlJCZ0wPWHlsyr6WBDk+DshYwMg7UiXsCCz/XH3jLtEyCKKUOGn8UUI9KCJY/SwCiHmNFSWHrOjVqM/RKC1Iw==", + "@smithy/util-stream": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz", + "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==", + "dev": true, + "optional": true, "requires": { - "debug": "4.3.2", - "mongodb-memory-server": "7.6.3", - "uuid": "8.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "mongodb-memory-server": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-7.6.3.tgz", - "integrity": "sha512-yHDE9FGxOpSRUzitF9Qx3JjEgayCSJI3JOW2wgeBH/5PAsUdisy2nRxRiNwwLDooQ7tohllWCRTXlWqyarUEMQ==", - "requires": { - "mongodb-memory-server-core": "7.6.3", - "tslib": "^2.3.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "@smithy/fetch-http-handler": "^2.1.5", + "@smithy/node-http-handler": "^2.1.5", + "@smithy/types": "^2.3.3", + "@smithy/util-base64": "^2.0.0", + "@smithy/util-buffer-from": "^2.0.0", + "@smithy/util-hex-encoding": "^2.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.5.0" } }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "@smithy/util-uri-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz", + "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==", "dev": true, + "optional": true, "requires": { - "type-detect": "4.0.8" + "tslib": "^2.5.0" } }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "@smithy/util-utf8": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", + "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", "dev": true, + "optional": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@smithy/util-buffer-from": "^2.0.0", + "tslib": "^2.5.0" } }, "@tootallnate/once": { @@ -959,14 +9913,12 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -975,7 +9927,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -1027,8 +9978,7 @@ "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, "@types/through": { "version": "0.0.30", @@ -1070,7 +10020,6 @@ "version": "16.0.4", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -1078,8 +10027,7 @@ "@types/yargs-parser": { "version": "20.2.1", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@vtfk/azure-blob-client": { "version": "0.0.4", @@ -1249,9 +10197,9 @@ "integrity": "sha512-yJdYmTSNTzm0zSFYOZkTPEWBFXVL4k5wgZdRCNwG2FgaVGlP+aff/KZdVjV2QYzNFmlo4TLNV9Oe7cW+2TEBqA==" }, "@xmldom/xmldom": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.5.tgz", - "integrity": "sha512-V3BIhmY36fXZ1OtVcI9W+FxQqxVLsPKcNjWigIaa81dLC9IolJl5Mt4Cvhmr0flUnjSpTdrbMTSbXqYqV5dT6A==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", "dev": true }, "abab": { @@ -1319,14 +10267,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -1514,6 +10460,13 @@ } } }, + "bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true, + "optional": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1527,7 +10480,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -1561,9 +10513,9 @@ } }, "bson": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.3.tgz", - "integrity": "sha512-rAqP5hcUVJhXP2MCSNVsf0oM2OGU1So6A9pVRDYayvJ5+hygXHQApf87wd5NlhPM1J9RJnbqxIG/f8QTzRoQ4A==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", "requires": { "buffer": "^5.6.0" } @@ -1620,7 +10572,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1657,8 +10608,7 @@ "ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", - "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", - "dev": true + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "cjs-module-lexer": { "version": "1.2.2", @@ -1720,7 +10670,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -1728,8 +10677,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -2034,8 +10982,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=" }, "escodegen": { "version": "2.0.0", @@ -2204,6 +11151,16 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "dev": true, + "optional": true, + "requires": { + "strnum": "^1.0.5" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -2234,7 +11191,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -2395,8 +11351,7 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "graphql": { "version": "15.8.0", @@ -2416,8 +11371,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "headers-utils": { "version": "3.0.2", @@ -2544,9 +11498,9 @@ } }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "ipaddr.js": { @@ -2620,8 +11574,7 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -2678,9 +11631,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -2873,7 +11826,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -2961,7 +11913,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -2978,7 +11929,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -2988,7 +11938,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "27.5.1", @@ -3125,9 +12076,9 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -3139,7 +12090,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -3217,8 +12167,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.14.1", @@ -3306,13 +12255,10 @@ "dev": true }, "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonwebtoken": { "version": "8.5.1", @@ -3469,9 +12415,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -3520,7 +12466,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -3551,19 +12496,13 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3595,9 +12534,9 @@ } }, "mongodb-connection-string-url": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.4.1.tgz", - "integrity": "sha512-d5Kd2bVsKcSA7YI/yo57fSTtMwRQdFkvc5IZwod1RRxJtECeWPPSo7zqcUGJELifRA//Igs4spVtYAmvFCatug==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", "requires": { "@types/whatwg-url": "^8.2.1", "whatwg-url": "^11.0.0" @@ -3613,15 +12552,6 @@ "tslib": "^2.3.1" }, "dependencies": { - "bson": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.1.tgz", - "integrity": "sha512-I1LQ7Hz5zgwR4QquilLNZwbhPw0Apx7i7X9kGMBTsqPdml/03Q9NBtD9nt/19ahjlphktQImrnderxqpzeVDjw==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -3638,16 +12568,16 @@ } }, "mongodb": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.3.1.tgz", - "integrity": "sha512-sNa8APSIk+r4x31ZwctKjuPSaeKuvUeNb/fu/3B6dRM02HpEgig7hTHM8A/PJQTlxuC/KFWlDlQjhsk/S43tBg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.1.tgz", + "integrity": "sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==", "dev": true, "requires": { - "bson": "^4.6.1", - "denque": "^2.0.1", - "mongodb-connection-string-url": "^2.4.1", - "saslprep": "^1.0.3", - "socks": "^2.6.1" + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" } }, "mongodb-memory-server-core": { @@ -3681,9 +12611,9 @@ "dev": true }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -3735,9 +12665,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -3760,14 +12690,6 @@ "sift": "13.5.2" }, "dependencies": { - "bson": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.1.tgz", - "integrity": "sha512-I1LQ7Hz5zgwR4QquilLNZwbhPw0Apx7i7X9kGMBTsqPdml/03Q9NBtD9nt/19ahjlphktQImrnderxqpzeVDjw==", - "requires": { - "buffer": "^5.6.0" - } - }, "mongodb": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.2.2.tgz", @@ -4171,8 +13093,7 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pirates": { "version": "4.0.5", @@ -4198,7 +13119,6 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, "requires": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -4208,8 +13128,7 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" } } }, @@ -4257,6 +13176,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4276,8 +13200,7 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "readable-stream": { "version": "2.3.7", @@ -4325,6 +13248,11 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -4429,9 +13357,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" }, "send": { "version": "0.17.2", @@ -4527,8 +13455,7 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "smart-buffer": { "version": "4.2.0", @@ -4537,13 +13464,13 @@ "dev": true }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" } }, "source-map": { @@ -4581,7 +13508,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -4589,8 +13515,7 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, @@ -4608,6 +13533,21 @@ "events": "^3.3.0" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -4629,21 +13569,6 @@ "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4671,11 +13596,17 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true, + "optional": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -4793,7 +13724,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -4804,13 +13734,14 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" } }, "tr46": { @@ -4822,9 +13753,9 @@ } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tunnel": { "version": "0.0.6", @@ -4843,8 +13774,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "type-fest": { "version": "0.21.3", @@ -4871,15 +13801,24 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4994,9 +13933,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, "wrap-ansi": { @@ -5031,7 +13970,8 @@ "version": "7.5.7", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -5040,9 +13980,9 @@ "dev": true }, "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "requires": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" diff --git a/sharedcode/auth/auth.js b/sharedcode/auth/auth.js index 92b76f6..b6883ef 100644 --- a/sharedcode/auth/auth.js +++ b/sharedcode/auth/auth.js @@ -1,9 +1,9 @@ /* Import dependencies */ -const apikey = require('./lib/apikey'); -const azuread = require('./lib/azuread'); -const HTTPError = require('../vtfk-errors/httperror'); +const apikey = require('./lib/apikey') +const azuread = require('./lib/azuread') +const HTTPError = require('../vtfk-errors/httperror') /* Auth function @@ -11,27 +11,26 @@ const HTTPError = require('../vtfk-errors/httperror'); /** * Auth's the request * @param {object} req Azure function request - * @returns + * @returns */ async function auth (req) { - let requestor = {} - if(req.headers.authorization) { - const token = await azuread(req.headers.authorization); - if(token && token.name) requestor.name = token.name; - if(token && token.oid) requestor.id = token.oid; - if(token && token.department) requestor.department = token.department; - if(token && token.upn) requestor.email = token.upn; - } else if(req.headers['x-api-key']) { - apikey(req.headers['x-api-key']); - requestor.name = 'apikey'; - requestor.id = 'apikey'; - requestor.department = 'apikey'; - requestor.email = 'apikey@vtfk.no'; - } - else { - throw new HTTPError(401, 'No authentication token provided'); + const requestor = {} + if (req.headers.authorization) { + const token = await azuread(req.headers.authorization) + if (token && token.name) requestor.name = token.name + if (token && token.oid) requestor.id = token.oid + if (token && token.department) requestor.department = token.department + if (token && token.upn) requestor.email = token.upn + } else if (req.headers['x-api-key']) { + apikey(req.headers['x-api-key']) + requestor.name = 'apikey' + requestor.id = 'apikey' + requestor.department = 'apikey' + requestor.email = 'apikey@vtfk.no' + } else { + throw new HTTPError(401, 'No authentication token provided') } - return requestor; + return requestor } -module.exports.auth = auth; \ No newline at end of file +module.exports.auth = auth diff --git a/sharedcode/auth/lib/apikey.js b/sharedcode/auth/lib/apikey.js index d4cd8f8..fc781fb 100644 --- a/sharedcode/auth/lib/apikey.js +++ b/sharedcode/auth/lib/apikey.js @@ -1,25 +1,23 @@ /* Import dependencies */ -const HTTPError = require('../../vtfk-errors/httperror'); -const config = require('../../../config'); +const HTTPError = require('../../vtfk-errors/httperror') +const config = require('../../../config') /* Validation function */ module.exports = (key) => { // Validation - if(process.env.NODE_ENV !== 'test'){ - if(!key) throw new HTTPError(401, 'No apikey provided'); - if(!config.APIKEYS) throw new HTTPError(401, 'The provided apikey is invalid'); - - // Get all keys that are over 24 keys long - let keys = config.APIKEYS.split(',').filter(n => n.length >= config.APIKEYS_MINIMUM_LENGTH); - if(!keys || keys.length === 0) throw new HTTPError(401, 'The provided apikey is invalid'); - - let existingKey = keys.find((n => n === key)); - if(!existingKey) throw new HTTPError(401, 'The provided apikey is invalid') - - return; - } + if (process.env.NODE_ENV !== 'test') { + if (!key) throw new HTTPError(401, 'No apikey provided') + if (!config.APIKEYS) throw new HTTPError(401, 'The provided apikey is invalid') + + // Get all keys that are over 24 keys long + const keys = config.APIKEYS.split(',').filter(n => n.length >= config.APIKEYS_MINIMUM_LENGTH) + if (!keys || keys.length === 0) throw new HTTPError(401, 'The provided apikey is invalid') + + const existingKey = keys.find(n => n === key) + if (!existingKey) throw new HTTPError(401, 'The provided apikey is invalid') } +} diff --git a/sharedcode/auth/lib/azuread.js b/sharedcode/auth/lib/azuread.js index d5574f1..dd072d6 100644 --- a/sharedcode/auth/lib/azuread.js +++ b/sharedcode/auth/lib/azuread.js @@ -1,39 +1,39 @@ -const { verify } = require('azure-ad-verify-token'); -const HTTPError = require('../../vtfk-errors/httperror'); -const config = require('../../../config'); +const { verify } = require('azure-ad-verify-token') +const HTTPError = require('../../vtfk-errors/httperror') +const config = require('../../../config') /** - * + * * @param {string} authHeader Authentication header */ module.exports = async (authHeader) => { // Input validation - const bearerToken = authHeader; - if(!bearerToken) throw new HTTPError(401, 'authentication token missing'); - if(typeof bearerToken !== 'string') throw new HTTPError(401, 'authentication token is not a string'); - if(!bearerToken.startsWith('Bearer')) throw new HTTPError(401, 'authentication token is not a Bearer token'); + const bearerToken = authHeader + if (!bearerToken) throw new HTTPError(401, 'authentication token missing') + if (typeof bearerToken !== 'string') throw new HTTPError(401, 'authentication token is not a string') + if (!bearerToken.startsWith('Bearer')) throw new HTTPError(401, 'authentication token is not a Bearer token') // Validation - let validatedToken = undefined; + let validatedToken try { - validatedToken = await verify(bearerToken.replace('Bearer ', ''), config.AZUREAD_TOKEN_CONFIG); + validatedToken = await verify(bearerToken.replace('Bearer ', ''), config.AZUREAD_TOKEN_CONFIG) } catch (err) { - throw new HTTPError(401, `The token is invalid`); + throw new HTTPError(401, 'The token is invalid') } - - if(!validatedToken) throw new HTTPError(401, 'Could not validate authentication token'); - if(!validatedToken.groups || validatedToken.groups.length === 0) throw new HTTPError(401, 'No groups could be found in authentication token'); - if(!validatedToken.department) throw new HTTPError(401, 'Could not find the users company department in the authentication token'); + + if (!validatedToken) throw new HTTPError(401, 'Could not validate authentication token') + if (!validatedToken.groups || validatedToken.groups.length === 0) throw new HTTPError(401, 'No groups could be found in authentication token') + if (!validatedToken.department) throw new HTTPError(401, 'Could not find the users company department in the authentication token') // If allowed groups - if(config.AZUREAD_ALLOWEDGROUPS) { + if (config.AZUREAD_ALLOWEDGROUPS) { const allowedGroups = config.AZUREAD_ALLOWEDGROUPS.split(',').filter(n => n) - let found = false; - for(const userGroup of validatedToken.groups) { - if(allowedGroups.includes(userGroup)) found = true; + let found = false + for (const userGroup of validatedToken.groups) { + if (allowedGroups.includes(userGroup)) found = true } - if(!found) throw new HTTPError(401, 'Your account is not a member of any allowed groups'); + if (!found) throw new HTTPError(401, 'Your account is not a member of any allowed groups') } - return validatedToken; -} \ No newline at end of file + return validatedToken +} diff --git a/sharedcode/blob-storage.js b/sharedcode/blob-storage.js index 0d34923..16faf30 100644 --- a/sharedcode/blob-storage.js +++ b/sharedcode/blob-storage.js @@ -2,64 +2,64 @@ const { BlobServiceClient } = require('@azure/storage-blob') const { v4: uuid } = require('uuid') const getBlobContainer = () => { - const blobServiceClient = BlobServiceClient.fromConnectionString(process.env.STORAGE_ACCOUNT_CONNECTIONSTRING) - return blobServiceClient.getContainerClient(process.env.STORAGE_ACCOUNT_BLOB_NAME) + const blobServiceClient = BlobServiceClient.fromConnectionString(process.env.STORAGE_ACCOUNT_CONNECTIONSTRING) + return blobServiceClient.getContainerClient(process.env.STORAGE_ACCOUNT_BLOB_NAME) } async function streamToBuffer (readableStream) { - return new Promise((resolve, reject) => { - const chunks = [] - readableStream.on('data', (data) => { - chunks.push(data instanceof Buffer ? data : Buffer.from(data)) - }) - readableStream.on('end', () => { - resolve(Buffer.concat(chunks)) - }) - readableStream.on('error', reject) + return new Promise((resolve, reject) => { + const chunks = [] + readableStream.on('data', (data) => { + chunks.push(data instanceof Buffer ? data : Buffer.from(data)) }) + readableStream.on('end', () => { + resolve(Buffer.concat(chunks)) + }) + readableStream.on('error', reject) + }) } // Upload content to blob storage const uploadBlob = async options => { - if(!options.dispatchId) throw new Error('The dispatchId must be provided for uploading files') - const blobName = `${options.dispatchId}/` + (options.name || uuid()) - const containerClient = getBlobContainer() + if (!options.dispatchId) throw new Error('The dispatchId must be provided for uploading files') + const blobName = `${options.dispatchId}/` + (options.name || uuid()) + const containerClient = getBlobContainer() - const blockBlobClient = containerClient.getBlockBlobClient(blobName) - await blockBlobClient.upload(options.content, options.content.length) - return blobName + const blockBlobClient = containerClient.getBlockBlobClient(blobName) + await blockBlobClient.upload(options.content, options.content.length) + return blobName } -// Download blob from blob storage +// Download blob from blob storage async function downloadBlob (options) { - if(!options.dispatchId) throw new Error('The dispatchId must be provided for downloading files') - const blobName = `${options.dispatchId}/` + options.name; - const containerClient = getBlobContainer() + if (!options.dispatchId) throw new Error('The dispatchId must be provided for downloading files') + const blobName = `${options.dispatchId}/` + options.name + const containerClient = getBlobContainer() - const blobClient = containerClient.getBlobClient(blobName) - const downloadResponse = await blobClient.download() + const blobClient = containerClient.getBlobClient(blobName) + const downloadResponse = await blobClient.download() - let content = (await streamToBuffer(downloadResponse.readableStreamBody)).toString() + const content = (await streamToBuffer(downloadResponse.readableStreamBody)).toString() - let extension = ''; - if(options.name.includes('.') && options.name.lastIndexOf('.') !== options.name.length) extension = options.name.substring(options.name.lastIndexOf('.') + 1); + let extension = '' + if (options.name.includes('.') && options.name.lastIndexOf('.') !== options.name.length) extension = options.name.substring(options.name.lastIndexOf('.') + 1) - return { name: blobName.split('/').pop(), extension, content} + return { name: blobName.split('/').pop(), extension, content } } // Delete blob from blob storage async function deleteBlob (options) { - if(!options.name) throw new Error('The name must be provided for the file you want to delete.') - const blobName = options.name + if (!options.name) throw new Error('The name must be provided for the file you want to delete.') + const blobName = options.name - const containerClient = getBlobContainer() + const containerClient = getBlobContainer() - const blobClient = containerClient.getBlockBlobClient(blobName) - await blobClient.delete() + const blobClient = containerClient.getBlockBlobClient(blobName) + await blobClient.delete() } module.exports = { - uploadBlob, - downloadBlob, - deleteBlob -} \ No newline at end of file + uploadBlob, + downloadBlob, + deleteBlob +} diff --git a/sharedcode/connections/masseutsendelseDB.js b/sharedcode/connections/masseutsendelseDB.js index 3ec4584..b04d140 100644 --- a/sharedcode/connections/masseutsendelseDB.js +++ b/sharedcode/connections/masseutsendelseDB.js @@ -1,14 +1,14 @@ -const mongoose = require("mongoose"); -const uri = process.env.MONGODB_CONNECTIONSTRING +const mongoose = require('mongoose') +const uri = process.env.MONGODB_CONNECTIONSTRING -module.exports = async function() { - if(mongoose.connection.readyState === 1) return; +module.exports = async function () { + if (mongoose.connection.readyState === 1) return try { const client = await mongoose.connect(uri, { - serverSelectionTimeoutMS: 15000 + serverSelectionTimeoutMS: 15000 }) - Promise.resolve(client); + Promise.resolve(client) } catch (err) { - Promise.reject(err); + Promise.reject(err) } -} \ No newline at end of file +} diff --git a/sharedcode/models/dispatches.js b/sharedcode/models/dispatches.js index cb72f61..fca76bd 100644 --- a/sharedcode/models/dispatches.js +++ b/sharedcode/models/dispatches.js @@ -4,7 +4,7 @@ const mongoose = require('mongoose') Subschemas */ // Dispatch template -const dispatchTemplateSchema = new mongoose.Schema ({ +const dispatchTemplateSchema = new mongoose.Schema({ version: { type: Number, required: true @@ -18,16 +18,16 @@ const dispatchTemplateSchema = new mongoose.Schema ({ required: true }, language: { - type: String, + type: String }, documentDefinitionId: { type: String }, documentData: { - type: Object, + type: Object }, data: { - type: Object, + type: Object }, template: { type: String @@ -83,172 +83,172 @@ const attachmentSchema = new mongoose.Schema({ /* Model schema */ -const dispatchesSchema = new mongoose.Schema ({ - title: { - type: String, +const dispatchesSchema = new mongoose.Schema({ + title: { + type: String, + required: true + }, + projectnumber: { + type: String, + required: true + }, + archivenumber: { + type: String, + required: true + }, + validatedArchivenumber: { + type: String, + required: true + }, + archiveUrl: { + type: String + }, + status: { + type: String, + default: 'notapproved', + enum: ['notapproved', 'approved', 'inprogress', 'completed'], + required: true + }, + template: { + type: dispatchTemplateSchema + }, + templateData: { + Object + }, + attachments: [attachmentSchema], + stats: { + affectedCount: { + type: Number, required: true }, - projectnumber: { - type: String, - required: true + area: { + type: Number, + required: false }, - archivenumber: { - type: String, + totalOwners: { + type: Number, required: true }, - validatedArchivenumber: { - type: String, + privateOwners: { + type: Number, required: true }, - archiveUrl: { - type: String, - }, - status: { + businessOwners: { + type: Number, + required: true + } + }, + owners: { + required: true, + type: [Object] + }, + excludedOwners: { + type: [Object] + }, + matrikkelUnitsWithoutOwners: { + type: [Object] + }, + polygons: { + EPSG: { type: String, - default: "notapproved", - enum: ["notapproved", "approved", "inprogress", "completed" ], required: true }, - template: { - type: dispatchTemplateSchema + area: { + type: Number, + required: true }, - templateData: { - Object + center: { + type: [Number], + required: true }, - attachments: [ attachmentSchema ], - stats: { - affectedCount: { - type: Number, - required: true - }, - area:{ - type: Number, - required: false - }, - totalOwners: { - type: Number, - required: true - }, - privateOwners: { - type: Number, + extremes: { + north: { + type: [Number], required: true }, - businessOwners: { - type: Number, - required: true - } - }, - owners: { - required: true, - type: [ Object ] - }, - excludedOwners: { - type: [ Object ] - }, - matrikkelUnitsWithoutOwners: { - type: [ Object ] - }, - polygons: { - EPSG: { - type: String, + west: { + type: [Number], required: true }, - area: { - type: Number, + east: { + type: [Number], required: true }, - center: { + south: { type: [Number], required: true - }, - extremes: { - north: { - type: [Number], - required: true - }, - west: { - type: [Number], - required: true - }, - east: { - type: [Number], - required: true - }, - south: { - type: [Number], - required: true - }, - }, - polygons: [{ - type: polygonSchema, - validate: [(val) => val.length > 0] - }] - }, - e18Id: { - type: String, - }, - createdTimestamp: { - type: Date, - default: new Date, - required: true - }, - createdBy: { - type: String, - required: true - }, - createdByEmail: { - type: String, - required: true - }, - createdById: { - type: String, - default: "00000000-0000-0000-0000-000000000000", - required: true - }, - createdByDepartment: { - type: String, - required: true - }, - modifiedTimestamp: { - type: Date, - default: new Date, - required: true - }, - modifiedBy: { - type: String, - default: "Noen André", - required: true - }, - modifiedByEmail: { - type: String, - required: true - }, - modifiedByDepartment: { - type: String, - required: true - }, - modifiedById: { - type: String, - default: "00000000-0000-0000-0000-000000000000", - required: true - }, - approvedTimestamp: { - type: Date, - }, - approvedBy: { - type: String, - }, - approvedById: { - type: String, - }, - approvedByEmail: { - type: String, - }, - approvedByDepartment: { - type: String, + } }, + polygons: [{ + type: polygonSchema, + validate: [(val) => val.length > 0] + }] + }, + e18Id: { + type: String + }, + createdTimestamp: { + type: Date, + default: new Date(), + required: true + }, + createdBy: { + type: String, + required: true + }, + createdByEmail: { + type: String, + required: true + }, + createdById: { + type: String, + default: '00000000-0000-0000-0000-000000000000', + required: true + }, + createdByDepartment: { + type: String, + required: true + }, + modifiedTimestamp: { + type: Date, + default: new Date(), + required: true + }, + modifiedBy: { + type: String, + default: 'Noen André', + required: true + }, + modifiedByEmail: { + type: String, + required: true + }, + modifiedByDepartment: { + type: String, + required: true + }, + modifiedById: { + type: String, + default: '00000000-0000-0000-0000-000000000000', + required: true + }, + approvedTimestamp: { + type: Date + }, + approvedBy: { + type: String + }, + approvedById: { + type: String + }, + approvedByEmail: { + type: String + }, + approvedByDepartment: { + type: String + } }) const Dispatches = mongoose.model('Dispatches', dispatchesSchema) -module.exports = Dispatches \ No newline at end of file +module.exports = Dispatches diff --git a/sharedcode/models/jobs.js b/sharedcode/models/jobs.js new file mode 100644 index 0000000..3b94808 --- /dev/null +++ b/sharedcode/models/jobs.js @@ -0,0 +1,92 @@ +const mongoose = require('mongoose') + +// Tasks +const tasksSchema = new mongoose.Schema({ + method: { + type: String, + required: true + }, + status: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + }, + ssn: { + type: String, + required: true + } +}, { _id: false }) + +const jobsSchema = new mongoose.Schema({ + title: { + type: String, + required: true + }, + approvedTimeStamp: { + type: Date, + required: true + }, + jobCreatedTimeStamp: { + type: Date, + default: new Date(), + required: true + }, + status: { + syncRecipients: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + }, + createCaseDocument: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + }, + uploadAttachments: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + }, + issueDispatch: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + }, + createStatistics: { + type: String, + default: 'waiting', + enum: ['waiting', 'inprogress', 'completed', 'failed'], + required: true + } + }, + tasks: { + type: Object, + required: true, + syncRecipients: { + type: Array + }, + createCaseDocument: { + type: Array + }, + uploadAttachments: { + type: Array + }, + issueDispatch: { + type: Array + }, + createStatistics: { + type: Array + } + }, + failedTasks: [] + +}) + +const Jobs = mongoose.model('Jobs', jobsSchema) + +module.exports = Jobs diff --git a/sharedcode/models/templates.js b/sharedcode/models/templates.js index 3cae354..f1b3517 100644 --- a/sharedcode/models/templates.js +++ b/sharedcode/models/templates.js @@ -1,11 +1,11 @@ const mongoose = require('mongoose') -const templateSchema = new mongoose.Schema ({ +const templateSchema = new mongoose.Schema({ _Id: { type: mongoose.Schema.Types.ObjectId }, name: { - type: String, + type: String, unique: true, required: true }, @@ -27,7 +27,7 @@ const templateSchema = new mongoose.Schema ({ required: true }, documentData: { - type: Object, + type: Object }, template: { type: String, @@ -35,40 +35,40 @@ const templateSchema = new mongoose.Schema ({ }, language: { type: String, - default: "nb" + default: 'nb' }, createdTimestamp: { type: Date, - default: new Date, + default: new Date(), required: true }, createdBy: { - type: String, - default: "unknown", - required: true + type: String, + default: 'unknown', + required: true }, createdById: { - type: String, - default: "00000000-0000-0000-0000-000000000000", - required: true + type: String, + default: '00000000-0000-0000-0000-000000000000', + required: true }, createdByDepartment: { type: String }, modifiedTimestamp: { - type: Date, - default: new Date, - required: true + type: Date, + default: new Date(), + required: true }, modifiedBy: { - type: String, - default: "unknown", - required: true + type: String, + default: 'unknown', + required: true }, modifiedById: { - type: String, - default: "00000000-0000-0000-0000-000000000000", - required: true + type: String, + default: '00000000-0000-0000-0000-000000000000', + required: true }, modifiedByDepartment: { type: String @@ -77,4 +77,4 @@ const templateSchema = new mongoose.Schema ({ const Templates = mongoose.model('Templates', templateSchema) -module.exports = Templates \ No newline at end of file +module.exports = Templates diff --git a/sharedcode/tests/Memory-DB.js b/sharedcode/tests/Memory-DB.js index 5f655b0..3f42ef6 100644 --- a/sharedcode/tests/Memory-DB.js +++ b/sharedcode/tests/Memory-DB.js @@ -1,36 +1,35 @@ - const mongoose = require('mongoose') const MongoMemoryServer = require('mongodb-memory-server').MongoMemoryServer -let mongod; +let mongod /** * Connect to the in-memory database. */ module.exports.connect = async () => { - mongod = await MongoMemoryServer.create(); - const uri = mongod.getUri(); - const mongooseOpts = { - useNewUrlParser: true, - }; - process.env.URI = uri - await mongoose.connect(uri, mongooseOpts); + mongod = await MongoMemoryServer.create() + const uri = mongod.getUri() + const mongooseOpts = { + useNewUrlParser: true + } + process.env.URI = uri + await mongoose.connect(uri, mongooseOpts) } /** * Drop database, close the connection and stop mongod. */ module.exports.closeDatabase = async () => { - await mongoose.connection.dropDatabase(); - await mongoose.connection.close(); - await mongod.stop(); + await mongoose.connection.dropDatabase() + await mongoose.connection.close() + await mongod.stop() } /** * Remove all the data for all db collections. */ module.exports.clearDatabase = async () => { - const collections = mongoose.connection.collections; + const collections = mongoose.connection.collections - for (const key in collections) { - const collection = collections[key]; - await collection.deleteMany(); - } -} \ No newline at end of file + for (const key in collections) { + const collection = collections[key] + await collection.deleteMany() + } +} diff --git a/sharedcode/tests/defaultContext.js b/sharedcode/tests/defaultContext.js index 8ec35c4..68e7318 100644 --- a/sharedcode/tests/defaultContext.js +++ b/sharedcode/tests/defaultContext.js @@ -1,3 +1,3 @@ module.exports = { - log: jest.fn() -}; \ No newline at end of file + log: jest.fn() +} diff --git a/sharedcode/tests/test-setup.js b/sharedcode/tests/test-setup.js index e7d4d26..88ae2cc 100644 --- a/sharedcode/tests/test-setup.js +++ b/sharedcode/tests/test-setup.js @@ -1,8 +1,7 @@ - -const dbMem = require ('./Memory-DB') +const dbMem = require('./Memory-DB') module.exports = { - setupDB() { + setupDB () { // Connect to the memory DB beforeAll(async () => { await dbMem.connect() @@ -13,4 +12,4 @@ module.exports = { await dbMem.closeDatabase() }) } -} \ No newline at end of file +} diff --git a/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_character.js b/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_character.js index f12da8c..342cc88 100644 --- a/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_character.js +++ b/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_character.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,63 +87,63 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Software/stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software/stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_extension.js b/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_extension.js index 73a94ef..ca5c76e 100644 --- a/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_extension.js +++ b/sharedcode/tests/testCases/invalidCases/post_dispatch_illegal_extension.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,63 +87,63 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Software stack.apeloff", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack.apeloff', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_archivenumber.js b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_archivenumber.js index 0db1caa..0aaf8e2 100644 --- a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_archivenumber.js +++ b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_archivenumber.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,48 +87,48 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "", - "validatedArchivenumber": "", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "attachments": [ + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '', + validatedArchivenumber: '', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + attachments: [ { - "name": "Software stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_extension.js b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_extension.js index ccaad13..b716cad 100644 --- a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_extension.js +++ b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_extension.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,63 +87,63 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Software stack", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_template_and_attachments.js b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_template_and_attachments.js index 5a4a3c2..c1a9dcf 100644 --- a/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_template_and_attachments.js +++ b/sharedcode/tests/testCases/invalidCases/post_dispatch_missing_template_and_attachments.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,32 +87,32 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/edit_disaptch.js b/sharedcode/tests/testCases/validCases/edit_disaptch.js index 5b31621..dbba4d0 100644 --- a/sharedcode/tests/testCases/validCases/edit_disaptch.js +++ b/sharedcode/tests/testCases/validCases/edit_disaptch.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,48 +87,48 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "approved", - "attachments": [ + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'approved', + attachments: [ { - "name": "Edit stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Edit stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/edit_dispatch_approved.js b/sharedcode/tests/testCases/validCases/edit_dispatch_approved.js index e5daecd..98a3f88 100644 --- a/sharedcode/tests/testCases/validCases/edit_dispatch_approved.js +++ b/sharedcode/tests/testCases/validCases/edit_dispatch_approved.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,63 +87,63 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "approved", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'approved', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Software stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/edit_dispatch_approvedTimestamp.js b/sharedcode/tests/testCases/validCases/edit_dispatch_approvedTimestamp.js index eed9a9f..426d3b8 100644 --- a/sharedcode/tests/testCases/validCases/edit_dispatch_approvedTimestamp.js +++ b/sharedcode/tests/testCases/validCases/edit_dispatch_approvedTimestamp.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,260 +87,260 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "approved", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'approved', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Edit stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Edit stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "owners": [ + owners: [ { - "_type":"FysiskPerson", - "_namespace":"http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person", - "id":"1337", - "oppdateringsdato":"2020-06-15T22:40:57.525000000+02:00", - "versjonId":"3", - "oppdatertAv":"Kluthue", - "versjon":"1592253657600", - "nummer":"13374201337", - "navn":"Apeloff Apeloffsen", - "postadresse":{ - "adresselinje2":"Error Veien 1", - "adresselinje3":"1337 Skrottfoss", - "postnummeromradeId":"69696969", - "landKodeId":"5001" + _type: 'FysiskPerson', + _namespace: 'http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person', + id: '1337', + oppdateringsdato: '2020-06-15T22:40:57.525000000+02:00', + versjonId: '3', + oppdatertAv: 'Kluthue', + versjon: '1592253657600', + nummer: '13374201337', + navn: 'Apeloff Apeloffsen', + postadresse: { + adresselinje2: 'Error Veien 1', + adresselinje3: '1337 Skrottfoss', + postnummeromradeId: '69696969', + landKodeId: '5001' }, - "uuid":{ - "navnerom":"https://data.geonorge.no/matrikkel", - "uuid":"80081675-9ffd-545a-aa3f-a079457a5d69" + uuid: { + navnerom: 'https://data.geonorge.no/matrikkel', + uuid: '80081675-9ffd-545a-aa3f-a079457a5d69' }, - "etternavn":"Apeloffsen", - "fornavn":"Apeloff", - "spesifisertRegTypeKodeId":"1", - "bostedsadresse":{ - "kommunenummer":"1337", - "adressekode":"1337", - "husnummer":"69", - "gardsnummer":"0", - "bruksnummer":"0", - "festenummer":"0", - "undernummer":"0", - "postnummer":"1337" + etternavn: 'Apeloffsen', + fornavn: 'Apeloff', + spesifisertRegTypeKodeId: '1', + bostedsadresse: { + kommunenummer: '1337', + adressekode: '1337', + husnummer: '69', + gardsnummer: '0', + bruksnummer: '0', + festenummer: '0', + undernummer: '0', + postnummer: '1337' }, - "personStatusKodeId":"1", - "dsf":{ - "FODT":"691337", - "PERS":"691337", - "INR":"13374201337", - "FODTAR":"1337", - "STAT-KD":"1", - "STAT":"BOSATT", - "NAVN-S":"Apeloff", - "NAVN-F":"Apeloffsen", - "NAVN":"Apeloff Apeloffsen", - "Statsborgerskap":{ - "STATB-KD":"000", - "STATB":"NORGE" - }, - "KJONN":"M", - "FODKNR":"1337", - "FODK":"SKIEN", - "FNR":"13374201337", - "bostedsAdresse":{ - "ADR":"Error Veien 1", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "postAdresse":{ - "ADR":"Error Veien 1", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "personNavn":"Apeloff Apeloffsen" + personStatusKodeId: '1', + dsf: { + FODT: '691337', + PERS: '691337', + INR: '13374201337', + FODTAR: '1337', + 'STAT-KD': '1', + STAT: 'BOSATT', + 'NAVN-S': 'Apeloff', + 'NAVN-F': 'Apeloffsen', + NAVN: 'Apeloff Apeloffsen', + Statsborgerskap: { + 'STATB-KD': '000', + STATB: 'NORGE' + }, + KJONN: 'M', + FODKNR: '1337', + FODK: 'SKIEN', + FNR: '13374201337', + bostedsAdresse: { + ADR: 'Error Veien 1', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + postAdresse: { + ADR: 'Error Veien 1', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + personNavn: 'Apeloff Apeloffsen' } - }, + }, { - "_type":"FysiskPerson", - "_namespace":"http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person", - "id":"1337", - "oppdateringsdato":"2020-06-15T22:40:57.525000000+02:00", - "versjonId":"3", - "oppdatertAv":"Kluthue", - "versjon":"1592253657600", - "nummer":"13374201337", - "navn":"Apeloff Apeloffsen", - "postadresse":{ - "adresselinje2":"Error Veien 2", - "adresselinje3":"1337 Skrottfoss", - "postnummeromradeId":"69696969", - "landKodeId":"5001" + _type: 'FysiskPerson', + _namespace: 'http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person', + id: '1337', + oppdateringsdato: '2020-06-15T22:40:57.525000000+02:00', + versjonId: '3', + oppdatertAv: 'Kluthue', + versjon: '1592253657600', + nummer: '13374201337', + navn: 'Apeloff Apeloffsen', + postadresse: { + adresselinje2: 'Error Veien 2', + adresselinje3: '1337 Skrottfoss', + postnummeromradeId: '69696969', + landKodeId: '5001' }, - "uuid":{ - "navnerom":"https://data.geonorge.no/matrikkel", - "uuid":"80081675-9ffd-545a-aa3f-a079457a5d69" + uuid: { + navnerom: 'https://data.geonorge.no/matrikkel', + uuid: '80081675-9ffd-545a-aa3f-a079457a5d69' }, - "etternavn":"Kluthue", - "fornavn":"Kluthue", - "spesifisertRegTypeKodeId":"1", - "bostedsadresse":{ - "kommunenummer":"1337", - "adressekode":"1337", - "husnummer":"69", - "gardsnummer":"0", - "bruksnummer":"0", - "festenummer":"0", - "undernummer":"0", - "postnummer":"1337" + etternavn: 'Kluthue', + fornavn: 'Kluthue', + spesifisertRegTypeKodeId: '1', + bostedsadresse: { + kommunenummer: '1337', + adressekode: '1337', + husnummer: '69', + gardsnummer: '0', + bruksnummer: '0', + festenummer: '0', + undernummer: '0', + postnummer: '1337' }, - "personStatusKodeId":"1", - "dsf":{ - "FODT":"691337", - "PERS":"691337", - "INR":"13374201337", - "FODTAR":"1337", - "STAT-KD":"1", - "STAT":"BOSATT", - "NAVN-S":"Kluthue", - "NAVN-F":"Kluthue", - "NAVN":"Kluthue Kluthue", - "Statsborgerskap":{ - "STATB-KD":"000", - "STATB":"NORGE" - }, - "KJONN":"M", - "FODKNR":"1337", - "FODK":"SKIEN", - "FNR":"13374201337", - "bostedsAdresse":{ - "ADR":"Error Veien 2", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "postAdresse":{ - "ADR":"Error Veien 2", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "personNavn":"Kluthue Kluthue" + personStatusKodeId: '1', + dsf: { + FODT: '691337', + PERS: '691337', + INR: '13374201337', + FODTAR: '1337', + 'STAT-KD': '1', + STAT: 'BOSATT', + 'NAVN-S': 'Kluthue', + 'NAVN-F': 'Kluthue', + NAVN: 'Kluthue Kluthue', + Statsborgerskap: { + 'STATB-KD': '000', + STATB: 'NORGE' + }, + KJONN: 'M', + FODKNR: '1337', + FODK: 'SKIEN', + FNR: '13374201337', + bostedsAdresse: { + ADR: 'Error Veien 2', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + postAdresse: { + ADR: 'Error Veien 2', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + personNavn: 'Kluthue Kluthue' } }, { - "_type":"JuridiskPerson", - "_namespace":"http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person", - "id":"1337", - "oppdateringsdato":"2020-06-15T22:40:57.525000000+02:00", - "versjonId":"3", - "oppdatertAv":"Kluthue", - "versjon":"1592253657600", - "nummer":"13374201337", - "navn":"Kluthue Apeloffsen", - "postadresse":{ - "adresselinje2":"Error Veien 2", - "adresselinje3":"1337 Skrottfoss", - "postnummeromradeId":"69696969", - "landKodeId":"5001" + _type: 'JuridiskPerson', + _namespace: 'http://matrikkel.statkart.no/matrikkelapi/wsapi/v1/domain/person', + id: '1337', + oppdateringsdato: '2020-06-15T22:40:57.525000000+02:00', + versjonId: '3', + oppdatertAv: 'Kluthue', + versjon: '1592253657600', + nummer: '13374201337', + navn: 'Kluthue Apeloffsen', + postadresse: { + adresselinje2: 'Error Veien 2', + adresselinje3: '1337 Skrottfoss', + postnummeromradeId: '69696969', + landKodeId: '5001' }, - "uuid":{ - "navnerom":"https://data.geonorge.no/matrikkel", - "uuid":"80081675-9ffd-545a-aa3f-a079457a5d69" + uuid: { + navnerom: 'https://data.geonorge.no/matrikkel', + uuid: '80081675-9ffd-545a-aa3f-a079457a5d69' }, - "etternavn":"Apeloffsen", - "fornavn":"Kluthue", - "spesifisertRegTypeKodeId":"1", - "bostedsadresse":{ - "kommunenummer":"1337", - "adressekode":"1337", - "husnummer":"69", - "gardsnummer":"0", - "bruksnummer":"0", - "festenummer":"0", - "undernummer":"0", - "postnummer":"1337" + etternavn: 'Apeloffsen', + fornavn: 'Kluthue', + spesifisertRegTypeKodeId: '1', + bostedsadresse: { + kommunenummer: '1337', + adressekode: '1337', + husnummer: '69', + gardsnummer: '0', + bruksnummer: '0', + festenummer: '0', + undernummer: '0', + postnummer: '1337' }, - "personStatusKodeId":"1", - "dsf":{ - "FODT":"691337", - "PERS":"691337", - "INR":"13374201337", - "FODTAR":"1337", - "STAT-KD":"1", - "STAT":"BOSATT", - "NAVN-S":"Kluthue", - "NAVN-F":"Apeloffsen", - "NAVN":"Apeloff Apeloffsen", - "Statsborgerskap":{ - "STATB-KD":"000", - "STATB":"NORGE" - }, - "KJONN":"M", - "FODKNR":"1337", - "FODK":"SKIEN", - "FNR":"13374201337", - "bostedsAdresse":{ - "ADR":"Error Veien 2", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "postAdresse":{ - "ADR":"Error Veien 2", - "POSTN":"1337", - "POSTS":"Skrottfoss" - }, - "personNavn":"Apeloff Apeloffsen" + personStatusKodeId: '1', + dsf: { + FODT: '691337', + PERS: '691337', + INR: '13374201337', + FODTAR: '1337', + 'STAT-KD': '1', + STAT: 'BOSATT', + 'NAVN-S': 'Kluthue', + 'NAVN-F': 'Apeloffsen', + NAVN: 'Apeloff Apeloffsen', + Statsborgerskap: { + 'STATB-KD': '000', + STATB: 'NORGE' + }, + KJONN: 'M', + FODKNR: '1337', + FODK: 'SKIEN', + FNR: '13374201337', + bostedsAdresse: { + ADR: 'Error Veien 2', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + postAdresse: { + ADR: 'Error Veien 2', + POSTN: '1337', + POSTS: 'Skrottfoss' + }, + personNavn: 'Apeloff Apeloffsen' } } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/edit_dispatch_inprogress.js b/sharedcode/tests/testCases/validCases/edit_dispatch_inprogress.js index 7914824..0b1100c 100644 --- a/sharedcode/tests/testCases/validCases/edit_dispatch_inprogress.js +++ b/sharedcode/tests/testCases/validCases/edit_dispatch_inprogress.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,47 +87,47 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "inprogress", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'inprogress', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/post_dispatch_attachments.js b/sharedcode/tests/testCases/validCases/post_dispatch_attachments.js index 9f5c770..adf123f 100644 --- a/sharedcode/tests/testCases/validCases/post_dispatch_attachments.js +++ b/sharedcode/tests/testCases/validCases/post_dispatch_attachments.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,48 +87,48 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "notapproved", - "attachments": [ + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'notapproved', + attachments: [ { - "name": "Software stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/post_dispatch_both.js b/sharedcode/tests/testCases/validCases/post_dispatch_both.js index 09d529c..c30c1ad 100644 --- a/sharedcode/tests/testCases/validCases/post_dispatch_both.js +++ b/sharedcode/tests/testCases/validCases/post_dispatch_both.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,63 +87,63 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "completed", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'completed', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "attachments": [ + attachments: [ { - "name": "Software stack.docx", - "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - "size": 15449, - "lastModified": 1633956197000, - "lastModifiedDate": "2021-10-11T12:43:17.000Z" + name: 'Software stack.docx', + type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + size: 15449, + lastModified: 1633956197000, + lastModifiedDate: '2021-10-11T12:43:17.000Z' }, { - "name": "LinuxSoftware.xlsx", - "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "size": 7415, - "lastModified": 1638108864000, - "lastModifiedDate": "2021-11-28T14:14:24.000Z" + name: 'LinuxSoftware.xlsx', + type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + size: 7415, + lastModified: 1638108864000, + lastModifiedDate: '2021-11-28T14:14:24.000Z' } ], - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/post_dispatch_template.js b/sharedcode/tests/testCases/validCases/post_dispatch_template.js index 7914824..0b1100c 100644 --- a/sharedcode/tests/testCases/validCases/post_dispatch_template.js +++ b/sharedcode/tests/testCases/validCases/post_dispatch_template.js @@ -1,67 +1,67 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + stats: { + affectedCount: 8, + area: null, + totalOwners: 7, + privateOwners: 2, + businessOwners: 5 }, - body: { - "stats": { - "affectedCount": 8, - "area": null, - "totalOwners": 7, - "privateOwners": 2, - "businessOwners": 5 - }, - "polygons": { - "extremes": { - "north": [ + polygons: { + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "polygons": [ + polygons: [ { - "extremes": { - "north": [ + extremes: { + north: [ 10.300108, 59.497025 ], - "west": [ + west: [ 10.300108, 59.497025 ], - "east": [ + east: [ 10.300112, 59.497025 ], - "south": [ + south: [ 10.300112, 59.49702 ] }, - "EPSG": "4326", - "area": 0.12579970036309565, - "center": [ + EPSG: '4326', + area: 0.12579970036309565, + center: [ 10.30011, 59.4970225 ], - "vertices": [ + vertices: [ [ 10.300108, 59.497025 @@ -87,47 +87,47 @@ module.exports = { 59.497025 ] ], - "_id": "61fcf74807a4cea42f24942c" + _id: '61fcf74807a4cea42f24942c' } ] }, - "_id": "61fcf747033a6c44ebabdc7b", - "title": "Parallel test", - "projectnumber": "22/00009", - "archivenumber": "22/00009", - "validatedArchivenumber": "22/00009", - "archiveUrl": "https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2", - "status": "inprogress", - "template": { - "version": 10, - "name": "Varsel ved oppstart av prosjekt", - "description": "Mal for varsling til naboer ved oppstart av nytt prosjekt", - "language": "nb", - "documentDefinitionId": "brevmal", - "data": { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" + _id: '61fcf747033a6c44ebabdc7b', + title: 'Parallel test', + projectnumber: '22/00009', + archivenumber: '22/00009', + validatedArchivenumber: '22/00009', + archiveUrl: 'https://360test.vtfk.no//locator.aspx?name=DMS.Case.Details.Simplified.2&recno=234483&module=Case&subtype=2', + status: 'inprogress', + template: { + version: 10, + name: 'Varsel ved oppstart av prosjekt', + description: 'Mal for varsling til naboer ved oppstart av nytt prosjekt', + language: 'nb', + documentDefinitionId: 'brevmal', + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' }, - "template": "IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK", - "_id": "61d84dad786bdf965164c6fc" + template: 'IyBbW2xhYmVsPSJUaXR0ZWwiOnR5cGU9InN0cmluZyI6cGF0aD0idGl0dGVsIjpkZXNjcmlwdGlvbj0iQW5naSBlbiB0aXR0ZWwgcMOlIGJyZXZldCI6cmVxdWlyZWQ9InRydWUiXV0KCiMjIyBCZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0CltbbGFiZWw9IkJlc2tyaXZlbHNlIGF2IHByb3NqZWt0ZXQiOnR5cGU9InN0cmluZyI6cGF0aD0iYmVza3JpdmVsc2UgYXYgcHJvc2pla3RlIjpkZXNjcmlwdGlvbj0iQW5naSBlbiBiZXNrcml2ZWxzZSBhdiBwcm9zamVrdGV0ICI6cmVxdWlyZWQ9InRydWUiOmxpbmVzPSIxMCJdXQoKe3sjaWYgYXR0YWNobWVudHN9fQojIyMgVmVkbGVnZwp7eyNlYWNoIGF0dGFjaG1lbnRzfX0KKiB7e3RoaXMubmFtZX19Cnt7L2VhY2h9fQp7ey9pZn19CgojIyMgRnJlbWRyaWZ0IG9nIGZyaXN0IGZvciBpbm5zcGlsbApbW2xhYmVsPSJGcmVtZHJpZnQiOnR5cGU9InN0cmluZyI6cGF0aD0iZnJlbWRyaWZ0IjpkZXNjcmlwdGlvbj0iUGxhbmxhZ3QgZnJlbWRyaWZ0IGF2IHByb3NqZWt0ZXQiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKIyMjIEFrdHVlbHQgcmVnZWx2ZXJrCltbbGFiZWw9IlJlZ2VsdmVyayI6dHlwZT0ic3RyaW5nIjpwYXRoPSJSZWdlbHZlcmsiOmRlc2NyaXB0aW9uPSJSZWdlbHZlcmsiOnJlcXVpcmVkPSJ0cnVlIjpsaW5lcz0iNSJdXQoKCgpNZWQgaGlsc2VuXAp7e2luZm8ub3VyLWNhc2V3b3JrZXJ9fQoK', + _id: '61d84dad786bdf965164c6fc' }, - "createdTimestamp": "2022-02-04T09:48:18.923Z", - "createdBy": "Jest Test", - "createdByEmail": "jest.test@vtfk.no", - "createdById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "createdByDepartment": "Test og Jest", - "modifiedTimestamp": "2022-02-04T10:40:17.075Z", - "modifiedBy": "apikey", - "modifiedByEmail": "apikey@vtfk.no", - "modifiedByDepartment": "apikey", - "modifiedById": "apikey", - "__v": 0, - "approvedBy": "Jest Test", - "approvedByEmail": "jest.test@vtfk.no", - "approvedById": "ae34b275-ee14-4ece-b4a0-a03e7dc96313", - "approvedTimestamp": "2022-02-03T09:52:23.218Z", - "e18Id": "61fd02901c5261b6db1c42c2" - } -} \ No newline at end of file + createdTimestamp: '2022-02-04T09:48:18.923Z', + createdBy: 'Jest Test', + createdByEmail: 'jest.test@vtfk.no', + createdById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + createdByDepartment: 'Test og Jest', + modifiedTimestamp: '2022-02-04T10:40:17.075Z', + modifiedBy: 'apikey', + modifiedByEmail: 'apikey@vtfk.no', + modifiedByDepartment: 'apikey', + modifiedById: 'apikey', + __v: 0, + approvedBy: 'Jest Test', + approvedByEmail: 'jest.test@vtfk.no', + approvedById: 'ae34b275-ee14-4ece-b4a0-a03e7dc96313', + approvedTimestamp: '2022-02-03T09:52:23.218Z', + e18Id: '61fd02901c5261b6db1c42c2' + } +} diff --git a/sharedcode/tests/testCases/validCases/post_template.js b/sharedcode/tests/testCases/validCases/post_template.js index 723eac2..164b248 100644 --- a/sharedcode/tests/testCases/validCases/post_template.js +++ b/sharedcode/tests/testCases/validCases/post_template.js @@ -1,18 +1,18 @@ module.exports = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST - }, - body: { - 'version': "1", - 'createdBy': "Jest Test", - 'createdById': "J35t T35t", - 'createdByDepartment': "Jest og Test", - 'modifiedBy': "Jest Test", - 'modifiedById': "J35t T35t", - 'modifiedByDepartment': "Jest og Test", - 'name': "Jest Test Template", - 'description': "Dette er en jest test", - 'documentDefinitionId': "1337", - 'template': "Et eller annet" - } + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + version: '1', + createdBy: 'Jest Test', + createdById: 'J35t T35t', + createdByDepartment: 'Jest og Test', + modifiedBy: 'Jest Test', + modifiedById: 'J35t T35t', + modifiedByDepartment: 'Jest og Test', + name: 'Jest Test Template', + description: 'Dette er en jest test', + documentDefinitionId: '1337', + template: 'Et eller annet' + } } diff --git a/sharedcode/tests/testSuite1/index.test.js b/sharedcode/tests/testSuite1/index.test.js index 55defb1..4e3b8b6 100644 --- a/sharedcode/tests/testSuite1/index.test.js +++ b/sharedcode/tests/testSuite1/index.test.js @@ -1,556 +1,554 @@ const Dispatches = require('../../models/dispatches') const Templates = require('../../models/templates') -const { ObjectID } = require('mongodb'); -const { setupDB } = require('../test-setup'); +const { ObjectID } = require('mongodb') +const { setupDB } = require('../test-setup') const axios = require('axios') setupDB('endpoint-testing') jest.mock('axios') -jest.setTimeout(30000) // Actions failer noen ganger med 5000ms +jest.setTimeout(30000) // Actions failer noen ganger med 5000ms // Attachment Schema const attachmentSchema = { - _id: new ObjectID(), - name: "test", + _id: new ObjectID(), + name: 'test' } // Dispatch object const bodyDispatch = { - title: "Jest Test", - projectnumber: "12", - archivenumber: "1", - validatedArchivenumber: "1", - stats: { - affectedCount: "1", - area: "1", - totalOwners: "1", - privateOwners: "1", - businessOwners: "1", - }, - template: { - version: "1", - name: "jest test", - description: "jest test", - }, - matrikkelEnheter: [], - polygon: { - coordinatesystem: "asd", - filename: "qsd", - area: "12", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - polygons: { - area: "1", - EPSG: "asde", - polygons: [{ - EPSG: "jest test", - area: "1", - center: ["1", "2", "3"], - extremes: { - north: ["1", "2", "3"], - west: ["1", "2", "3"], - east: ["1", "2", "3"], - south: ["1", "2", "3"] - } - }] - }, - attachments: [ attachmentSchema ], - geopolygon: { - coordinateSystem: "a123sd", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - createdBy:"TEST", - createdById: "00000000-0000-0000-0000-000000000000", - createdByEmail: 'test@test.no', - createdByEmail: 'test@test.no', - createdByDepartment: 'Test department', - modifiedBy:"TEST", - modifiedById:"00000000-0000-0000-0000-000000000000", - modifiedByEmail: 'test@test.no', - modifiedByDepartment: 'Test department', - approvedBy: "", - approvedById: "", - approvedByEmail: "test@test.no", - approvedTimestamp: new Date() + title: 'Jest Test', + projectnumber: '12', + archivenumber: '1', + validatedArchivenumber: '1', + stats: { + affectedCount: '1', + area: '1', + totalOwners: '1', + privateOwners: '1', + businessOwners: '1' + }, + template: { + version: '1', + name: 'jest test', + description: 'jest test' + }, + matrikkelEnheter: [], + polygon: { + coordinatesystem: 'asd', + filename: 'qsd', + area: '12', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + polygons: { + area: '1', + EPSG: 'asde', + polygons: [{ + EPSG: 'jest test', + area: '1', + center: ['1', '2', '3'], + extremes: { + north: ['1', '2', '3'], + west: ['1', '2', '3'], + east: ['1', '2', '3'], + south: ['1', '2', '3'] + } + }] + }, + attachments: [attachmentSchema], + geopolygon: { + coordinateSystem: 'a123sd', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + createdBy: 'TEST', + createdById: '00000000-0000-0000-0000-000000000000', + createdByEmail: 'test@test.no', + createdByEmail: 'test@test.no', + createdByDepartment: 'Test department', + modifiedBy: 'TEST', + modifiedById: '00000000-0000-0000-0000-000000000000', + modifiedByEmail: 'test@test.no', + modifiedByDepartment: 'Test department', + approvedBy: '', + approvedById: '', + approvedByEmail: 'test@test.no', + approvedTimestamp: new Date() } -// Disptach object with status approved +// Disptach object with status approved const bodyDispatchApproved = { - title: "Jest Test", - status: "approved", - projectnumber: "12", - caseworker: 'Noen André', - archivenumber: "1", - validatedArchivenumber: "1", - stats: { - affectedCount: "1", - area: "1", - totalOwners: "1", - privateOwners: "1", - businessOwners: "1", - }, - template: { - version: "1", - name: "jest test", - description: "jest test", - }, - matrikkelEnheter: [], - polygon: { - coordinatesystem: "asd", - filename: "qsd", - area: "12", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - polygons: { - area: "1", - EPSG: "asde", - polygons: [{ - EPSG: "jest test", - area: "1", - center: ["1", "2", "3"], - extremes: { - north: ["1", "2", "3"], - west: ["1", "2", "3"], - east: ["1", "2", "3"], - south: ["1", "2", "3"] - } - }] - }, - attachments: [ attachmentSchema ], - geopolygon: { - coordinateSystem: "a123sd", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - createdBy:"TEST", - createdById: "00000000-0000-0000-0000-000000000000", - createdByEmail: 'test@test.no', - createdByDepartment: 'Test department', - modifiedTimestamp: new Date(), - modifiedBy:"TEST", - modifiedById:"00000000-0000-0000-0000-000000000000", - modifiedByEmail: 'test@test.no', - modifiedByDepartment: 'Test department', - approvedBy: "", - approvedById: "", - approvedByEmail: "test@test.no", - approvedTimestamp: new Date(), + title: 'Jest Test', + status: 'approved', + projectnumber: '12', + caseworker: 'Noen André', + archivenumber: '1', + validatedArchivenumber: '1', + stats: { + affectedCount: '1', + area: '1', + totalOwners: '1', + privateOwners: '1', + businessOwners: '1' + }, + template: { + version: '1', + name: 'jest test', + description: 'jest test' + }, + matrikkelEnheter: [], + polygon: { + coordinatesystem: 'asd', + filename: 'qsd', + area: '12', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + polygons: { + area: '1', + EPSG: 'asde', + polygons: [{ + EPSG: 'jest test', + area: '1', + center: ['1', '2', '3'], + extremes: { + north: ['1', '2', '3'], + west: ['1', '2', '3'], + east: ['1', '2', '3'], + south: ['1', '2', '3'] + } + }] + }, + attachments: [attachmentSchema], + geopolygon: { + coordinateSystem: 'a123sd', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + createdBy: 'TEST', + createdById: '00000000-0000-0000-0000-000000000000', + createdByEmail: 'test@test.no', + createdByDepartment: 'Test department', + modifiedTimestamp: new Date(), + modifiedBy: 'TEST', + modifiedById: '00000000-0000-0000-0000-000000000000', + modifiedByEmail: 'test@test.no', + modifiedByDepartment: 'Test department', + approvedBy: '', + approvedById: '', + approvedByEmail: 'test@test.no', + approvedTimestamp: new Date() } // Dispatch object with no template and np attachment const bodyDispatchNoTemplateNoAttachment = { - title: "Jest Test", - projectnumber: "12", - caseworker: 'Noen André', - archivenumber: "1", - validatedArchivenumber: "1", - stats: { - affectedCount: "1", - area: "1", - totalOwners: "1", - privateOwners: "1", - businessOwners: "1", - }, - attachments: [], - matrikkelEnheter: [], - polygon: { - coordinatesystem: "asd", - filename: "qsd", - area: "12", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - polygons: { - area: "1", - EPSG: "asde", - polygons: [{ - EPSG: "jest test", - area: "1", - center: ["1", "2", "3"], - extremes: { - north: ["1", "2", "3"], - west: ["1", "2", "3"], - east: ["1", "2", "3"], - south: ["1", "2", "3"] - } - }] - }, - geopolygon: { - coordinateSystem: "a123sd", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - createdBy:"TEST", - createdById: "00000000-0000-0000-0000-000000000000", - createdByEmail: 'test@test.no', - createdByDepartment: 'Test department', - modifiedTimestamp: new Date(), - modifiedBy:"TEST", - modifiedById:"00000000-0000-0000-0000-000000000000", - modifiedByEmail: 'test@test.no', - modifiedByDepartment: 'Test department', - approvedBy: "", - approvedById: "", - approvedByEmail: "test@test.no", - approvedTimestamp: new Date(), + title: 'Jest Test', + projectnumber: '12', + caseworker: 'Noen André', + archivenumber: '1', + validatedArchivenumber: '1', + stats: { + affectedCount: '1', + area: '1', + totalOwners: '1', + privateOwners: '1', + businessOwners: '1' + }, + attachments: [], + matrikkelEnheter: [], + polygon: { + coordinatesystem: 'asd', + filename: 'qsd', + area: '12', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + polygons: { + area: '1', + EPSG: 'asde', + polygons: [{ + EPSG: 'jest test', + area: '1', + center: ['1', '2', '3'], + extremes: { + north: ['1', '2', '3'], + west: ['1', '2', '3'], + east: ['1', '2', '3'], + south: ['1', '2', '3'] + } + }] + }, + geopolygon: { + coordinateSystem: 'a123sd', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + createdBy: 'TEST', + createdById: '00000000-0000-0000-0000-000000000000', + createdByEmail: 'test@test.no', + createdByDepartment: 'Test department', + modifiedTimestamp: new Date(), + modifiedBy: 'TEST', + modifiedById: '00000000-0000-0000-0000-000000000000', + modifiedByEmail: 'test@test.no', + modifiedByDepartment: 'Test department', + approvedBy: '', + approvedById: '', + approvedByEmail: 'test@test.no', + approvedTimestamp: new Date() } // Dispatch object with no template and np attachment const bodyDispatchNoTemplate = { - title: "Jest Test", - projectnumber: "12", - caseworker: 'Noen André', - archivenumber: "1", - validatedArchivenumber: "1", - stats: { - affectedCount: "1", - area: "1", - totalOwners: "1", - privateOwners: "1", - businessOwners: "1", - }, - attachments: [ attachmentSchema ], - matrikkelEnheter: [], - polygon: { - coordinatesystem: "asd", - filename: "qsd", - area: "12", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - polygons: { - area: "1", - EPSG: "asde", - polygons: [{ - EPSG: "jest test", - area: "1", - center: ["1", "2", "3"], - extremes: { - north: ["1", "2", "3"], - west: ["1", "2", "3"], - east: ["1", "2", "3"], - south: ["1", "2", "3"] - } - }] - }, - geopolygon: { - coordinateSystem: "a123sd", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - createdBy:"TEST", - createdById: "00000000-0000-0000-0000-000000000000", - createdByEmail: 'test@test.no', - createdByDepartment: 'Test department', - modifiedTimestamp: new Date(), - modifiedBy:"TEST", - modifiedById:"00000000-0000-0000-0000-000000000000", - modifiedByEmail: 'test@test.no', - modifiedByDepartment: 'Test department', - approvedBy: "", - approvedById: "", - approvedByEmail: "test@test.no", - approvedTimestamp: new Date(), + title: 'Jest Test', + projectnumber: '12', + caseworker: 'Noen André', + archivenumber: '1', + validatedArchivenumber: '1', + stats: { + affectedCount: '1', + area: '1', + totalOwners: '1', + privateOwners: '1', + businessOwners: '1' + }, + attachments: [attachmentSchema], + matrikkelEnheter: [], + polygon: { + coordinatesystem: 'asd', + filename: 'qsd', + area: '12', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + polygons: { + area: '1', + EPSG: 'asde', + polygons: [{ + EPSG: 'jest test', + area: '1', + center: ['1', '2', '3'], + extremes: { + north: ['1', '2', '3'], + west: ['1', '2', '3'], + east: ['1', '2', '3'], + south: ['1', '2', '3'] + } + }] + }, + geopolygon: { + coordinateSystem: 'a123sd', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + createdBy: 'TEST', + createdById: '00000000-0000-0000-0000-000000000000', + createdByEmail: 'test@test.no', + createdByDepartment: 'Test department', + modifiedTimestamp: new Date(), + modifiedBy: 'TEST', + modifiedById: '00000000-0000-0000-0000-000000000000', + modifiedByEmail: 'test@test.no', + modifiedByDepartment: 'Test department', + approvedBy: '', + approvedById: '', + approvedByEmail: 'test@test.no', + approvedTimestamp: new Date() } // Dispatch object with no attachment const bodyDispatchNoAttachment = { - title: "Jest Test", - projectnumber: "12", - caseworker: 'Noen André', - archivenumber: "1", - validatedArchivenumber: "1", - stats: { - affectedCount: "1", - area: "1", - totalOwners: "1", - privateOwners: "1", - businessOwners: "1", - }, - attachments: [], - matrikkelEnheter: [], - polygon: { - coordinatesystem: "asd", - filename: "qsd", - area: "12", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - template: { - version: "1", - name: "jest test", - description: "jest test", - }, - polygons: { - area: "1", - EPSG: "asde", - polygons: [{ - EPSG: "jest test", - area: "1", - center: ["1", "2", "3"], - extremes: { - north: ["1", "2", "3"], - west: ["1", "2", "3"], - east: ["1", "2", "3"], - south: ["1", "2", "3"] - } - }] - }, - geopolygon: { - coordinateSystem: "a123sd", - vertices: [], - extremes: { - north: "1", - west: "1", - east: "1", - south: "1", - center: "1", - } - }, - createdBy:"TEST", - createdById: "00000000-0000-0000-0000-000000000000", - createdByEmail: 'test@test.no', - createdByDepartment: 'Test department', - modifiedTimestamp: new Date(), - modifiedBy:"TEST", - modifiedById:"00000000-0000-0000-0000-000000000000", - modifiedByEmail: 'test@test.no', - modifiedByDepartment: 'Test department', - approvedBy: "", - approvedById: "", - approvedByEmail: "test@test.no", - approvedTimestamp: new Date(), + title: 'Jest Test', + projectnumber: '12', + caseworker: 'Noen André', + archivenumber: '1', + validatedArchivenumber: '1', + stats: { + affectedCount: '1', + area: '1', + totalOwners: '1', + privateOwners: '1', + businessOwners: '1' + }, + attachments: [], + matrikkelEnheter: [], + polygon: { + coordinatesystem: 'asd', + filename: 'qsd', + area: '12', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + template: { + version: '1', + name: 'jest test', + description: 'jest test' + }, + polygons: { + area: '1', + EPSG: 'asde', + polygons: [{ + EPSG: 'jest test', + area: '1', + center: ['1', '2', '3'], + extremes: { + north: ['1', '2', '3'], + west: ['1', '2', '3'], + east: ['1', '2', '3'], + south: ['1', '2', '3'] + } + }] + }, + geopolygon: { + coordinateSystem: 'a123sd', + vertices: [], + extremes: { + north: '1', + west: '1', + east: '1', + south: '1', + center: '1' + } + }, + createdBy: 'TEST', + createdById: '00000000-0000-0000-0000-000000000000', + createdByEmail: 'test@test.no', + createdByDepartment: 'Test department', + modifiedTimestamp: new Date(), + modifiedBy: 'TEST', + modifiedById: '00000000-0000-0000-0000-000000000000', + modifiedByEmail: 'test@test.no', + modifiedByDepartment: 'Test department', + approvedBy: '', + approvedById: '', + approvedByEmail: 'test@test.no', + approvedTimestamp: new Date() } // Template Object const bodyTemplates = { - name: "Jest test", - description: "jest testing", - documentDefinitionId: "asd123e1", - template: "noe", + name: 'Jest test', + description: 'jest testing', + documentDefinitionId: 'asd123e1', + template: 'noe' } // Variables -let templateId = "" -let dispatchId = "" -let attachments = "" +let templateId = '' +let dispatchId = '' +let attachments = '' it('Should post a template to the database', async () => { - // Create a new document using the model - const template = new Templates(bodyTemplates) + // Create a new document using the model + const template = new Templates(bodyTemplates) - // Save the new dispatch object to the database - const results = await template.save() + // Save the new dispatch object to the database + const results = await template.save() - expect(results).resolves + expect(results).resolves }) it('Should post a dispatch object to the database', async () => { - // Create a new document using the model - const dispatch = new Dispatches(bodyDispatch) + // Create a new document using the model + const dispatch = new Dispatches(bodyDispatch) - // Save the new dispatch object to the database - const results = await dispatch.save() + // Save the new dispatch object to the database + const results = await dispatch.save() - expect(results).resolves + expect(results).resolves }) it('Should post a dispatch object to the database with status approved', async () => { - // Create a new document using the model - const dispatch = new Dispatches(bodyDispatchApproved) + // Create a new document using the model + const dispatch = new Dispatches(bodyDispatchApproved) - // Save the new dispatch object to the database - const results = await dispatch.save() + // Save the new dispatch object to the database + const results = await dispatch.save() - expect(results).resolves + expect(results).resolves }) it('Should return all dispatches from the database', async () => { - let dispatch = await Dispatches.find({}).lean() - Dispatches.find({}).lean().exec(function(error, records) { - records.forEach(function(record) { - dispatchId = record._id - attachments = record.attachments - }); - }); - expect([dispatch]).toContainEqual(dispatch) + const dispatch = await Dispatches.find({}).lean() + Dispatches.find({}).lean().exec(function (error, records) { + records.forEach(function (record) { + dispatchId = record._id + attachments = record.attachments + }) + }) + expect([dispatch]).toContainEqual(dispatch) }) it('Should return all dispatches from the database with the status approved', async () => { - let dispatch = await Dispatches.find({'status': 'approved'}).lean() - Dispatches.find({}).lean().exec(function(error, records) { - records.forEach(function(record) { - dispatchId = record._id - attachments = record.attachments - }); - }); - expect(dispatch[0].status).toEqual('approved') + const dispatch = await Dispatches.find({ status: 'approved' }).lean() + Dispatches.find({}).lean().exec(function (error, records) { + records.forEach(function (record) { + dispatchId = record._id + attachments = record.attachments + }) + }) + expect(dispatch[0].status).toEqual('approved') }) it('Should return all templates from the database', async () => { - let templates = await Templates.find({}).lean() - Templates.find({}).lean().exec(function(error, records) { - records.forEach(function(record) { - templateId = record._id - }); - }); - expect([templates]).toContainEqual(templates) + const templates = await Templates.find({}).lean() + Templates.find({}).lean().exec(function (error, records) { + records.forEach(function (record) { + templateId = record._id + }) + }) + expect([templates]).toContainEqual(templates) }) it('Should return a disptach object with the given id from the database', async () => { - let dispatch = await Dispatches.findById(dispatchId) - expect(dispatch).toMatchObject(dispatch) + const dispatch = await Dispatches.findById(dispatchId) + expect(dispatch).toMatchObject(dispatch) }) it('Should return a template with the given id from the database', async () => { - let template = await Templates.findById(templateId) - expect(template).toMatchObject(template) + const template = await Templates.findById(templateId) + expect(template).toMatchObject(template) }) it('Should edit one dispatch with the given ID from the database', async () => { - // Get the existing disptach object - let existingDispatch = await Dispatches.findById(dispatchId).lean() - - // Update default values - let newDate = new Date() - - // Update the dispatch - const updatedDispatch = await Dispatches.findByIdAndUpdate(dispatchId, {modifiedTimestamp: `${newDate}`}, {new: true}) - - expect(updatedDispatch.modifiedTimestamp).not.toBe(existingDispatch.modifiedTimestamp) + // Get the existing disptach object + const existingDispatch = await Dispatches.findById(dispatchId).lean() + + // Update default values + const newDate = new Date() + + // Update the dispatch + const updatedDispatch = await Dispatches.findByIdAndUpdate(dispatchId, { modifiedTimestamp: `${newDate}` }, { new: true }) + + expect(updatedDispatch.modifiedTimestamp).not.toBe(existingDispatch.modifiedTimestamp) }) it('Should edit one template with the given ID from the database', async () => { - // Get the existing disptach object - let existingTemplate = await Templates.findById(templateId).lean() - - // Update default values - let newDate = new Date() - - // Update the dispatch - const updatedTemplate = await Templates.findByIdAndUpdate(templateId, {modifiedTimestamp: `${newDate}`}, {new: true}) - - expect(updatedTemplate.modifiedTimestamp).not.toBe(existingTemplate.modifiedTimestamp) + // Get the existing disptach object + const existingTemplate = await Templates.findById(templateId).lean() + + // Update default values + const newDate = new Date() + + // Update the dispatch + const updatedTemplate = await Templates.findByIdAndUpdate(templateId, { modifiedTimestamp: `${newDate}` }, { new: true }) + + expect(updatedTemplate.modifiedTimestamp).not.toBe(existingTemplate.modifiedTimestamp) }) it('Should return an attachment from the database', async () => { - expect(attachments).toBeTruthy() + expect(attachments).toBeTruthy() }) it('Should post a file and return that it succeeded', async () => { - const id = new ObjectID() - const postFile = [{dispatchId: id, fileName: "test jest"}]; + const id = new ObjectID() + const postFile = [{ dispatchId: id, fileName: 'test jest' }] + + const resp = { data: postFile } + axios.post.mockResolvedValue(resp) - const resp = {data: postFile} - axios.post.mockResolvedValue(resp) - - axios.post.mockImplementation(() => Promise.resolve(resp)) + axios.post.mockImplementation(() => Promise.resolve(resp)) }) it('Should get a file and return that it succeeded', async () => { - const id = new ObjectID() - const getFile = [{dispatchId: id, fileName: "test jest"}]; + const id = new ObjectID() + const getFile = [{ dispatchId: id, fileName: 'test jest' }] + + const resp = { data: getFile } + axios.get.mockResolvedValue(resp) - const resp = {data: getFile} - axios.get.mockResolvedValue(resp) - - axios.get.mockImplementation(() => Promise.resolve(resp)) + axios.get.mockImplementation(() => Promise.resolve(resp)) }) it('Should delete a file and return that it succeeded', async () => { - const getFile = [{fileName: "test jest"}]; + const getFile = [{ fileName: 'test jest' }] - const resp = {data: getFile} - axios.delete.mockResolvedValue(resp) - - axios.delete.mockImplementation(() => Promise.resolve(resp)) + const resp = { data: getFile } + axios.delete.mockResolvedValue(resp) + + axios.delete.mockImplementation(() => Promise.resolve(resp)) }) it('Should reject the post of a dispatch object due to the lack of template or attachments', async () => { - // Create a new document using the model - const dispatch = new Dispatches(bodyDispatchNoTemplateNoAttachment) + // Create a new document using the model + const dispatch = new Dispatches(bodyDispatchNoTemplateNoAttachment) - // Save the new dispatch object to the database - const results = await dispatch.save() + // Save the new dispatch object to the database + const results = await dispatch.save() - expect(results.attachments || results.template).rejects + expect(results.attachments || results.template).rejects }) it('Should resolve the post of a dispatch object to the database since it contains a template', async () => { - // Create a new document using the model - const dispatch = new Dispatches(bodyDispatchNoAttachment) + // Create a new document using the model + const dispatch = new Dispatches(bodyDispatchNoAttachment) - // Save the new dispatch object to the database - const results = await dispatch.save() + // Save the new dispatch object to the database + const results = await dispatch.save() - expect(results.attachments || results.template).resolve + expect(results.attachments || results.template).resolve }) it('Should resolve the post of a dispatch object to the database since it contains an attachment', async () => { - // Create a new document using the model - const dispatch = new Dispatches(bodyDispatchNoTemplate) + // Create a new document using the model + const dispatch = new Dispatches(bodyDispatchNoTemplate) - // Save the new dispatch object to the database - const results = await dispatch.save() + // Save the new dispatch object to the database + const results = await dispatch.save() - expect(results.attachments || results.template).resolve + expect(results.attachments || results.template).resolve }) - - \ No newline at end of file diff --git a/sharedcode/tests/testSuite2/index.test.js b/sharedcode/tests/testSuite2/index.test.js index 744e452..87e52e9 100644 --- a/sharedcode/tests/testSuite2/index.test.js +++ b/sharedcode/tests/testSuite2/index.test.js @@ -1,18 +1,18 @@ -//Endpoints +// Endpoints const postTemplate = require('../../../func-posttemplate/index') const getTemplateById = require('../../../func-gettemplatesbyid/index') const getTemplates = require('../../../func-gettemplates/index') const editTemplate = require('../../../func-puttemplates/index') const postDispatches = require('../../../func-postdispatches/index') -const getDispachesById = require ('../../../func-getdispatchesbyid/index') +const getDispachesById = require('../../../func-getdispatchesbyid/index') const getDispaches = require('../../../func-getdispatches/index') const editDispatches = require('../../../func-editdispatches/index') const getReadyDispatches = require('../../../func-getreadydispatches/index') const complteDispatch = require('../../../func-completedispatch/index') -const getMatrikkel = require ('../../../func-getmatrikkel/index') +const getMatrikkel = require('../../../func-getmatrikkel/index') const getBlob = require('../../../func-getblob') -//Valid test cases +// Valid test cases const validTemplate = require('../testCases/validCases/post_template') const validDispatchBoth = require('../testCases/validCases/post_dispatch_both') const validDispatchAttachments = require('../testCases/validCases/post_dispatch_attachments') @@ -22,823 +22,822 @@ const validDispatchEditInprogress = require('../testCases/validCases/edit_dispat const validDispatchEditApproved = require('../testCases/validCases/edit_dispatch_approved') const validDispatchEditTimestamp = require('../testCases/validCases/edit_dispatch_approvedTimestamp') -//Invalid test cases +// Invalid test cases const invalidDispatch = require('../testCases/invalidCases/post_dispatch_missing_template_and_attachments') const invalidDispatchArchiveNumber = require('../testCases/invalidCases/post_dispatch_missing_archivenumber') const invalidDispatchMissingFileExtension = require('../testCases/invalidCases/post_dispatch_missing_extension') const invalidDispatchIllegalFileExtension = require('../testCases/invalidCases/post_dispatch_illegal_extension') -const invalidDispatchIllegalCharacter = require ('../testCases/invalidCases/post_dispatch_illegal_character') +const invalidDispatchIllegalCharacter = require('../testCases/invalidCases/post_dispatch_illegal_character') -//MSW +// MSW const { rest } = require('msw') const { setupServer } = require('msw/node') -//Test setup +// Test setup const { setupDB } = require('../test-setup') const context = require('../defaultContext') setupDB() jest.setTimeout(15000) -//Tests +// Tests describe('Endpoint testing', () => { - //MSW - const server = setupServer( - //getReadyDispatches, Generate PDF from template mock - rest.post('https://api.vtfk.no/pdf/v1/jestTest', (req, res, ctx) => { - return res(ctx.status(201), ctx.json({ - body: { - data: { - "tittel": "Parallel test", - "beskrivelse av prosjekte": "Parallel test", - "fremdrift": "Parallel test", - "Regelverk": "Parallel test" - }, - base64: {"pdfBase64": "En pdfbase64"} - } - })) - }), - //getMatrikkel, mock - rest.post('https://api.vtfk.no/matrikkel/v1/jestTestjestTest', (req, res, ctx) => { - return res(ctx.status(200), ctx.json({ - msg: 'Matrikkel api successfully connected' - })) - }), - //Validate archivenumber, mock - rest.post('https://api.vtfk.dev/archive/v1/jestTestarchive', (req, res, ctx) => { - return res(ctx.status(200), ctx.json({ - msg: 'Archive api successfully connected' - })) - }) - ) - - // beforeAll(() => server.listen()) - // afterAll(() => server.close()) - // afterEach(() => server.resetHandlers()) - - const OLD_ENV_VAR = process.env - - beforeAll(() => { - // jest.resetModules() // Clears the cache, remove the // if you want trouble :) - process.env = {...OLD_ENV_VAR}, - server.listen() - }) - - afterAll(() => { - process.env = OLD_ENV_VAR, - server.close() - }) - - afterEach(() => { - server.resetHandlers() - }) - - let apikeyHeader = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + // MSW + const server = setupServer( + // getReadyDispatches, Generate PDF from template mock + rest.post('https://api.vtfk.no/pdf/v1/jestTest', (req, res, ctx) => { + return res(ctx.status(201), ctx.json({ + body: { + data: { + tittel: 'Parallel test', + 'beskrivelse av prosjekte': 'Parallel test', + fremdrift: 'Parallel test', + Regelverk: 'Parallel test' + }, + base64: { pdfBase64: 'En pdfbase64' } } + })) + }), + // getMatrikkel, mock + rest.post('https://api.vtfk.no/matrikkel/v1/jestTestjestTest', (req, res, ctx) => { + return res(ctx.status(200), ctx.json({ + msg: 'Matrikkel api successfully connected' + })) + }), + // Validate archivenumber, mock + rest.post('https://api.vtfk.dev/archive/v1/jestTestarchive', (req, res, ctx) => { + return res(ctx.status(200), ctx.json({ + msg: 'Archive api successfully connected' + })) + }) + ) + + // beforeAll(() => server.listen()) + // afterAll(() => server.close()) + // afterEach(() => server.resetHandlers()) + + const OLD_ENV_VAR = process.env + + beforeAll(() => { + // jest.resetModules() // Clears the cache, remove the // if you want trouble :) + process.env = { ...OLD_ENV_VAR }, + server.listen() + }) + + afterAll(() => { + process.env = OLD_ENV_VAR, + server.close() + }) + + afterEach(() => { + server.resetHandlers() + }) + + const apikeyHeader = { + headers: { + 'x-api-key': process.env.APIKEYS_TEST } + } + + // Variables + let idTemplate = '' + let timestampTemplate = '' + let idDispatch = '' + let timestampDispach = '' + let idDispatchOnlyTemplate = '' + let idDispatchAttachments = '' + + // Valid cases + describe('Testing validcases', () => { + // Template tests + test('Should post a template to the db', async () => { + const post = await postTemplate(context, validTemplate) + + idTemplate = post.body._id + timestampTemplate = post.body.createdTimestamp + + expect(post).resolves + expect(post.body).toBeTruthy() + expect(post.status).toEqual(200) + expect(post.body.name).toBe('Jest Test Template') + expect(post.body.createdBy).toBe('apikey') + expect(post.body.template).toBe('Et eller annet') + }) - //Variables - let idTemplate = '' - let timestampTemplate = '' - let idDispatch = '' - let timestampDispach = '' - let idDispatchOnlyTemplate = '' - let idDispatchAttachments = '' - - //Valid cases - describe('Testing validcases', () => { - //Template tests - test('Should post a template to the db', async () => { - const post = await postTemplate(context, validTemplate) - - idTemplate = post.body._id - timestampTemplate = post.body.createdTimestamp - - expect(post).resolves - expect(post.body).toBeTruthy() - expect(post.status).toEqual(200) - expect(post.body.name).toBe('Jest Test Template') - expect(post.body.createdBy).toBe('apikey') - expect(post.body.template).toBe('Et eller annet') - }) - - test('Should get a template with a given id from the db', async () => { - let contextModified = context - contextModified.bindingData = { - id: idTemplate, - } - const get = await getTemplateById(contextModified, apikeyHeader) - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body.name).toBe('Jest Test Template') - expect(get.body.createdBy).toBe('apikey') - expect(get.body.template).toBe('Et eller annet') - }) - - test('Should get all the templates from the db', async () => { - const get = await getTemplates(context, apikeyHeader) - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body[0].name).toBe('Jest Test Template') - expect(get.body[0].createdBy).toBe('apikey') - expect(get.body[0].template).toBe('Et eller annet') - }) - - test('Should edit a given template', async () => { - let contextModified = context - contextModified.bindingData = { - id: idTemplate, - } + test('Should get a template with a given id from the db', async () => { + const contextModified = context + contextModified.bindingData = { + id: idTemplate + } + const get = await getTemplateById(contextModified, apikeyHeader) + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body.name).toBe('Jest Test Template') + expect(get.body.createdBy).toBe('apikey') + expect(get.body.template).toBe('Et eller annet') + }) - request = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST + test('Should get all the templates from the db', async () => { + const get = await getTemplates(context, apikeyHeader) + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body[0].name).toBe('Jest Test Template') + expect(get.body[0].createdBy).toBe('apikey') + expect(get.body[0].template).toBe('Et eller annet') + }) + + test('Should edit a given template', async () => { + const contextModified = context + contextModified.bindingData = { + id: idTemplate + } + + request = { + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + name: 'Jeg er redigert', + template: 'Ja, det er jeg også.' + } + } + + const edit = await editTemplate(context, request) + + expect(edit).resolves + expect(edit).toBeTruthy() + expect(edit.status).toEqual(200) + expect(edit.body.name).not.toEqual('Jest Test Template') + expect(edit.body.template).not.toEqual('Et eller annet') + expect(edit.body.name).toEqual('Jeg er redigert') + expect(edit.body.template).toEqual('Ja, det er jeg også.') + }) + + // Dispatch tests + test('Should post a dispatch object to the db with attachments and template', async () => { + const post = await postDispatches(context, validDispatchBoth) + + idDispatch = post.body._id + + expect(post).resolves + expect(post.body).toBeTruthy() + expect(post.status).toEqual(200) + expect(post.body.title).toBe('Parallel test') + expect(post.body._id).toBe(idDispatch) + expect.objectContaining(post.body.template) + expect.arrayContaining(post.body.attachments) + }) + + test('Should post a dispatch object to the db with attachments', async () => { + const post = await postDispatches(context, validDispatchAttachments) + + idDispatchAttachments = post.body._id + + expect(post).resolves + expect(post.body).toBeTruthy() + expect(post.status).toEqual(200) + expect(post.body.title).toBe('Parallel test') + expect(post.body._id).toBe(idDispatchAttachments) + expect.not.objectContaining(post.body.template) + expect.arrayContaining(post.body.attachments) + }) + + test('Should post a dispatch object to the db with template', async () => { + const post = await postDispatches(context, validDispatchTemplate) + + idDispatchOnlyTemplate = post.body._id + + expect(post).resolves + expect(post.body).toBeTruthy() + expect(post.status).toEqual(200) + expect(post.body.title).toBe('Parallel test') + expect(post.body._id).toBe(idDispatchOnlyTemplate) + expect.objectContaining(post.body.template) + expect.not.arrayContaining(post.body.attachments) + }) + + test('Should get a dispatch with a given id from the db', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatch + } + + const get = await getDispachesById(contextModified, apikeyHeader) + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body._id).toEqual(idDispatch) + expect(get.body.title).toBe('Parallel test') + expect.objectContaining(get.body.template) + expect.arrayContaining(get.body.attachments) + }) + + test('Should get all the dispatches from the db', async () => { + const get = await getDispaches(context, apikeyHeader) + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect.arrayContaining(get.body) + expect(get.body[0]._id).toEqual(idDispatch) + expect(get.body[1]._id).toEqual(idDispatchAttachments) + expect(get.body[2]._id).toEqual(idDispatchOnlyTemplate) + }) + + test('Should edit a given dispatch', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatch + } + + const edit = await editDispatches(contextModified, validDispatchEdit) + + expect(edit).resolves + expect(edit).toBeTruthy() + expect(edit.status).toEqual(200) + expect(edit.body.status).not.toEqual('notapproved') + expect(edit.body.status).toEqual('approved') + }) + + test('Should edit the given dispatch object to inprogress', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchOnlyTemplate + } + + const edit = await editDispatches(contextModified, validDispatchEditInprogress) + + expect(edit).resolves + expect(edit).toBeTruthy() + expect(edit.status).toEqual(200) + expect(edit.body.status).not.toEqual('notapproved') + expect(edit.body.status).toEqual('inprogress') + }) + + test('Should edit the given dispatch object to approved', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchAttachments + } + + const edit = await editDispatches(contextModified, validDispatchEditApproved) + + expect(edit).resolves + expect(edit).toBeTruthy() + expect(edit.status).toEqual(200) + expect(edit.body.status).not.toEqual('notapproved') + expect(edit.body.status).toEqual('approved') + expect(edit.body.approvedBy).toEqual('apikey') + expect(edit.body.approvedById).toEqual('apikey') + expect(edit.body.approvedByEmail).toEqual('apikey@vtfk.no') + }) + + test('Should return empty body since theres no approved dispatches with the correct time', async () => { + const get = await getReadyDispatches(context, apikeyHeader) + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body).toEqual([]) + }) + + test('Should edit a given dispatch, approvedTimeStamp', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatch + } + + const edit = await editDispatches(contextModified, validDispatchEditTimestamp) + + expect(edit).resolves + expect(edit).toBeTruthy() + expect(edit.status).toEqual(200) + expect(edit.body.status).toEqual('approved') + // Denne testen fungerer lokalt, ikke på github pga tidsoner osv. + // expect(edit.body.approvedTimestamp.toString()).toMatch('Thu Feb 03 2022 10:52:23 GMT+0100 (sentraleuropeisk normaltid)') + }) + + test('Should return all dispatches with the correct approvedTimestamp', async () => { + const get = await getReadyDispatches(context, apikeyHeader) + + timestampDispach = get.body[0].e18Job.tasks[3].data.parameter.date + + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body).toBeInstanceOf(Array) + expect(get.body[0]).toBeInstanceOf(Object) + expect(get.body[0]._id).toEqual(idDispatch) + expect(get.body[0].e18Job.tasks).toBeInstanceOf(Array) + expect(get.body[0].e18Job.tasks).toEqual([ + { + system: 'p360', + method: 'SyncPrivatePerson', + group: 'group2', + dependencyTag: 'sync', + data: { ssn: '13374201337' } + }, + { + system: 'p360', + method: 'SyncPrivatePerson', + group: 'group2', + dependencyTag: 'sync', + data: { ssn: '13374201337' } + }, + { + system: 'p360', + method: 'SyncEnterprise', + group: 'group2', + dependencyTag: 'sync', + data: { orgnr: '13374201337' } + }, + { + system: 'p360', + method: 'archive', + group: 'group1', + dependencyTag: 'createCaseDocument', + dependencies: ['sync'], + data: { + system: 'masseutsendelse', + template: 'utsendelsesdokument', + parameter: { + accessCode: 'U', + accessGroup: 'Alle', + attachments: [ + { + base64: undefined, + format: 'pdf', + title: 'Parallel test', + versionFormat: 'A' + } + ], + caseNumber: '22/00009', + contacts: [ + { + role: 'Mottaker', + ssn: '13374201337' + }, + { + role: 'Mottaker', + ssn: '13374201337' }, - body: { - name: 'Jeg er redigert', - template: 'Ja, det er jeg også.' + { + role: 'Mottaker', + ssn: '13374201337' } + ], + date: timestampDispach, + paragraph: '', + responsiblePersonEmail: 'jest.test@vtfk.no', + title: 'Parallel test' } - - const edit = await editTemplate(context, request) - - expect(edit).resolves - expect(edit).toBeTruthy() - expect(edit.status).toEqual(200) - expect(edit.body.name).not.toEqual("Jest Test Template") - expect(edit.body.template).not.toEqual("Et eller annet") - expect(edit.body.name).toEqual("Jeg er redigert") - expect(edit.body.template).toEqual("Ja, det er jeg også.") - }) - - //Dispatch tests - test('Should post a dispatch object to the db with attachments and template', async () => { - const post = await postDispatches(context, validDispatchBoth) - - idDispatch = post.body._id - - expect(post).resolves - expect(post.body).toBeTruthy() - expect(post.status).toEqual(200) - expect(post.body.title).toBe('Parallel test') - expect(post.body._id).toBe(idDispatch) - expect.objectContaining(post.body.template) - expect.arrayContaining(post.body.attachments) - }) - - test('Should post a dispatch object to the db with attachments', async () => { - const post = await postDispatches(context, validDispatchAttachments) - - idDispatchAttachments = post.body._id - - expect(post).resolves - expect(post.body).toBeTruthy() - expect(post.status).toEqual(200) - expect(post.body.title).toBe('Parallel test') - expect(post.body._id).toBe(idDispatchAttachments) - expect.not.objectContaining(post.body.template) - expect.arrayContaining(post.body.attachments) - }) - - test('Should post a dispatch object to the db with template', async () => { - const post = await postDispatches(context, validDispatchTemplate) - - idDispatchOnlyTemplate = post.body._id - - expect(post).resolves - expect(post.body).toBeTruthy() - expect(post.status).toEqual(200) - expect(post.body.title).toBe('Parallel test') - expect(post.body._id).toBe(idDispatchOnlyTemplate) - expect.objectContaining(post.body.template) - expect.not.arrayContaining(post.body.attachments) - }) - - test('Should get a dispatch with a given id from the db', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatch, - } - - const get = await getDispachesById(contextModified, apikeyHeader) - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body._id).toEqual(idDispatch) - expect(get.body.title).toBe('Parallel test') - expect.objectContaining(get.body.template) - expect.arrayContaining(get.body.attachments) - }) - - test('Should get all the dispatches from the db', async () => { - const get = await getDispaches(context, apikeyHeader) - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect.arrayContaining(get.body) - expect(get.body[0]._id).toEqual(idDispatch) - expect(get.body[1]._id).toEqual(idDispatchAttachments) - expect(get.body[2]._id).toEqual(idDispatchOnlyTemplate) - }) - - test('Should edit a given dispatch', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatch, + } + }, + { + system: 'p360', + method: 'archive', + group: 'group3', + dependencyTag: 'uploadAttachment-1', + dependencies: ['createCaseDocument'], + dataMapping: 'parameter.documentNumber=DocumentNumber', + data: { + system: 'archive', + template: 'add-attachment', + parameter: { + base64: 'base64', + format: '.txt', + secure: false, + title: 'test', + versionFormat: 'P' } + } + }, + { + system: 'p360', + method: 'archive', + group: 'group4', + dependencies: ['uploadAttachment-1'], + dataMapping: '{"parameter": { "Documents": [ { "DocumentNumber": "{{DocumentNumber}}" }]}}', + data: { method: 'DispatchDocuments', service: 'DocumentService' } + } + ]) + expect.objectContaining(get.body[0].template) + expect.arrayContaining(get.body[0].attachments) + }) + + test('Should complete dispatch object with status approved', async () => { + const complete = await complteDispatch(context, validDispatchEditApproved) + console.log(complete) + expect(complete).resolves + expect(complete).toBeTruthy() + expect(complete.status).toEqual(200) + expect(complete.body.status).not.toEqual('approved') + expect(complete.body.status).toEqual('completed') + }) - const edit = await editDispatches(contextModified, validDispatchEdit) + test('Should call the get matrikkel endpoint correctly', async () => { + const contextModified = context + contextModified.bindingData = { + endpoint: 'jestTest' + } - expect(edit).resolves - expect(edit).toBeTruthy() - expect(edit.status).toEqual(200) - expect(edit.body.status).not.toEqual('notapproved') - expect(edit.body.status).toEqual('approved') - }) + const get = await getMatrikkel(contextModified, apikeyHeader) - test('Should edit the given dispatch object to inprogress', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchOnlyTemplate, - } + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body.msg).toEqual('Matrikkel api successfully connected') + }) - const edit = await editDispatches(contextModified, validDispatchEditInprogress) + test('Should call the getblob endpoint correctly', async () => { + const contextModified = context + contextModified.bindingData = { + id: 1, + name: 'test', + file: 'filename.docx' + } - expect(edit).resolves - expect(edit).toBeTruthy() - expect(edit.status).toEqual(200) - expect(edit.body.status).not.toEqual('notapproved') - expect(edit.body.status).toEqual('inprogress') - }) + const get = await getBlob(contextModified, apikeyHeader) - test('Should edit the given dispatch object to approved', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchAttachments, - } + expect(get).resolves + expect(get).toBeTruthy() + expect(get.status).toEqual(200) + expect(get.body).toEqual('filename.docx') + }) + }) + // Invalid cases + describe('Testing invalid cases', () => { + // Dispatch testes + test('Should reject posting a dispatch without template and attachments', async () => { + const post = await postDispatches(context, invalidDispatch) + + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(400) + }) - const edit = await editDispatches(contextModified, validDispatchEditApproved) - - expect(edit).resolves - expect(edit).toBeTruthy() - expect(edit.status).toEqual(200) - expect(edit.body.status).not.toEqual('notapproved') - expect(edit.body.status).toEqual('approved') - expect(edit.body.approvedBy).toEqual('apikey') - expect(edit.body.approvedById).toEqual('apikey') - expect(edit.body.approvedByEmail).toEqual('apikey@vtfk.no') - }) - - test('Should return empty body since theres no approved dispatches with the correct time', async () => { - const get = await getReadyDispatches(context, apikeyHeader) - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body).toEqual([]) - }) - - test('Should edit a given dispatch, approvedTimeStamp', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatch, - } - - const edit = await editDispatches(contextModified, validDispatchEditTimestamp) - - expect(edit).resolves - expect(edit).toBeTruthy() - expect(edit.status).toEqual(200) - expect(edit.body.status).toEqual('approved') - // Denne testen fungerer lokalt, ikke på github pga tidsoner osv. - // expect(edit.body.approvedTimestamp.toString()).toMatch('Thu Feb 03 2022 10:52:23 GMT+0100 (sentraleuropeisk normaltid)') - }) - - test('Should return all dispatches with the correct approvedTimestamp', async () => { - const get = await getReadyDispatches(context, apikeyHeader) - - timestampDispach = get.body[0].e18Job.tasks[3].data.parameter.date - - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body).toBeInstanceOf(Array) - expect(get.body[0]).toBeInstanceOf(Object) - expect(get.body[0]._id).toEqual(idDispatch) - expect(get.body[0].e18Job.tasks).toBeInstanceOf(Array) - expect(get.body[0].e18Job.tasks).toEqual([ - { - system: 'p360', - method: 'SyncPrivatePerson', - group: "group2", - dependencyTag: 'sync', - data: { ssn: '13374201337' } - }, - { - system: 'p360', - method: 'SyncPrivatePerson', - group: "group2", - dependencyTag: 'sync', - data: { ssn: '13374201337' } - }, - { - system: 'p360', - method: 'SyncEnterprise', - group: "group2", - dependencyTag: 'sync', - data: { orgnr: '13374201337' } - }, - { - system: 'p360', - method: 'archive', - group: "group1", - dependencyTag: 'createCaseDocument', - dependencies: [ 'sync' ], - data: { - system: 'masseutsendelse', - template: 'utsendelsesdokument', - parameter: { - accessCode: "U", - accessGroup: "Alle", - attachments: [ - { - base64: undefined, - format: "pdf", - title: "Parallel test", - versionFormat: "A", - } - ], - caseNumber: "22/00009", - contacts: [ - { - role: "Mottaker", - ssn: "13374201337", - }, - { - role: "Mottaker", - ssn: "13374201337", - }, - { - role: "Mottaker", - ssn: "13374201337", - }, - ], - date: timestampDispach, - paragraph: "", - responsiblePersonEmail: "jest.test@vtfk.no", - title: "Parallel test", - } - } - }, - { - system: 'p360', - method: 'archive', - group: "group3", - dependencyTag: 'uploadAttachment-1', - dependencies: [ 'createCaseDocument' ], - dataMapping: 'parameter.documentNumber=DocumentNumber', - data: { - system: 'archive', - template: 'add-attachment', - parameter: { - base64: "base64", - format: ".txt", - secure: false, - title: "test", - versionFormat: "P" - } - } - }, - { - system: 'p360', - method: 'archive', - group: "group4", - dependencies: [ 'uploadAttachment-1' ], - dataMapping: '{"parameter": { "Documents": [ { "DocumentNumber": "{{DocumentNumber}}" }]}}', - data: { method: 'DispatchDocuments', service: 'DocumentService' } - } - ]) - expect.objectContaining(get.body[0].template) - expect.arrayContaining(get.body[0].attachments) - }) - - test('Should complete dispatch object with status approved', async () => { - const complete = await complteDispatch(context, validDispatchEditApproved) - console.log(complete) - expect(complete).resolves - expect(complete).toBeTruthy() - expect(complete.status).toEqual(200) - expect(complete.body.status).not.toEqual('approved') - expect(complete.body.status).toEqual('completed') - }) - - test('Should call the get matrikkel endpoint correctly', async () => { - let contextModified = context - contextModified.bindingData = { - endpoint: 'jestTest', - } + test('Should reject posting a dispatch because the body is empty', async () => { + const post = await postDispatches(context, apikeyHeader) - const get = await getMatrikkel(contextModified, apikeyHeader) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(400) + }) - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body.msg).toEqual('Matrikkel api successfully connected') - }) + test('Should reject posting a dispatch because the dispatch object is missing the archivenumber', async () => { + const post = await postDispatches(context, invalidDispatchArchiveNumber) - test('Should call the getblob endpoint correctly', async () => { - let contextModified = context - contextModified.bindingData = { - id: 1, - name: 'test', - file: 'filename.docx' - } + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(400) + }) - const get = await getBlob(contextModified, apikeyHeader) + test('Should reject posting a dispatch with only attachments because the "AZURE_BLOB_CONNECTIONSTRING_TEST" is missing', async () => { + process.env.AZURE_BLOB_CONNECTIONSTRING_TEST = '' - expect(get).resolves - expect(get).toBeTruthy() - expect(get.status).toEqual(200) - expect(get.body).toEqual('filename.docx') - }) + const post = await postDispatches(context, validDispatchAttachments) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) }) - //Invalid cases - describe('Testing invalid cases', () => { - //Dispatch testes - test('Should reject posting a dispatch without template and attachments', async () => { - const post = await postDispatches(context, invalidDispatch) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(400) - }) + test('Should reject posting a dispatch with only attachments because the "AZURE_BLOB_CONTAINERNAME_TEST" is missing', async () => { + process.env.AZURE_BLOB_CONTAINERNAME_TEST = '' - test('Should reject posting a dispatch because the body is empty', async () => { - const post = await postDispatches(context, apikeyHeader) + const post = await postDispatches(context, validDispatchAttachments) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(400) - }) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - test('Should reject posting a dispatch because the dispatch object is missing the archivenumber', async () => { - const post = await postDispatches(context, invalidDispatchArchiveNumber) + test('Should reject posting a dispatch with attachments because a file is missing file extension', async () => { + const post = await postDispatches(context, invalidDispatchMissingFileExtension) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(400) - }) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - test('Should reject posting a dispatch with only attachments because the "AZURE_BLOB_CONNECTIONSTRING_TEST" is missing', async () => { - process.env.AZURE_BLOB_CONNECTIONSTRING_TEST = '' + test('Should reject posting a dispatch with attachments because a file got an illegal file extension', async () => { + const post = await postDispatches(context, invalidDispatchIllegalFileExtension) - const post = await postDispatches(context, validDispatchAttachments) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + test('Should reject posting a dispatch with attachments becasue a file got an illegal character in the filename', async () => { + const post = await postDispatches(context, invalidDispatchIllegalCharacter) - test('Should reject posting a dispatch with only attachments because the "AZURE_BLOB_CONTAINERNAME_TEST" is missing', async () => { - process.env.AZURE_BLOB_CONTAINERNAME_TEST = '' + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - const post = await postDispatches(context, validDispatchAttachments) + test('Should not get a dispatch object from the db since theres no id provided', async () => { + process.env.ID_DISPATCH_TEST = '' + const contextModified = context + contextModified.bindingData = { + id: '' + } - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + const get = await getDispachesById(contextModified, apikeyHeader) - test('Should reject posting a dispatch with attachments because a file is missing file extension', async () => { - const post = await postDispatches(context, invalidDispatchMissingFileExtension) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + test('Should not get a dispatch object from the db since the id provided dose not exist', async () => { + const contextModified = context + contextModified.bindingData = { + id: '61f9502c1a6e890eec90d2b1' + } - test('Should reject posting a dispatch with attachments because a file got an illegal file extension', async () => { - const post = await postDispatches(context, invalidDispatchIllegalFileExtension) + const get = await getDispachesById(contextModified, apikeyHeader) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(404) + }) - test('Should reject posting a dispatch with attachments becasue a file got an illegal character in the filename', async () => { - const post = await postDispatches(context, invalidDispatchIllegalCharacter) - - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + test('Should not edit a dispatch object since the id provided dose not exist', async () => { + const contextModified = context + contextModified.bindingData = { + id: '61f9502c1a6e890eec90d2b1' + } - test('Should not get a dispatch object from the db since theres no id provided', async () => { - process.env.ID_DISPATCH_TEST = '' - let contextModified = context - contextModified.bindingData = { - id: '', - } + request = { + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + status: 'Ja, det er jeg også.' + } + } - const get = await getDispachesById(contextModified, apikeyHeader) + const edit = await editDispatches(contextModified, request) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(404) + }) - test('Should not get a dispatch object from the db since the id provided dose not exist', async () => { - let contextModified = context - contextModified.bindingData = { - id: '61f9502c1a6e890eec90d2b1', - } - - const get = await getDispachesById(contextModified, apikeyHeader) - - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(404) - }) - - test('Should not edit a dispatch object since the id provided dose not exist', async () => { - let contextModified = context - contextModified.bindingData = { - id: '61f9502c1a6e890eec90d2b1', - } + test('Should not edit the given dispatch object since the status is inprogress. Running dispatch should only be set to completed', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchOnlyTemplate + } - request = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST - }, - body: { - status: 'Ja, det er jeg også.' - } - } + const edit = await editDispatches(contextModified, validDispatchAttachments) - const edit = await editDispatches(contextModified, request) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(404) - }) + test('Should not edit the given dispatch object since the status is inprogress. Running dispatch should only be set to completed', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchOnlyTemplate + } - test('Should not edit the given dispatch object since the status is inprogress. Running dispatch should only be set to completed', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchOnlyTemplate, - } + const edit = await editDispatches(contextModified, validDispatchEditInprogress) - const edit = await editDispatches(contextModified, validDispatchAttachments) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + test('Should reject editing a dispatch with attachments because a file is missing file extension', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchAttachments + } - test('Should not edit the given dispatch object since the status is inprogress. Running dispatch should only be set to completed', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchOnlyTemplate, - } + const edit = await editDispatches(contextModified, invalidDispatchMissingFileExtension) - const edit = await editDispatches(contextModified, validDispatchEditInprogress) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + test('Should reject editing a dispatch with attachments because a file got an illegal file extension', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchAttachments + } - test('Should reject editing a dispatch with attachments because a file is missing file extension', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchAttachments, - } + const edit = await editDispatches(contextModified, invalidDispatchIllegalFileExtension) - const edit = await editDispatches(contextModified, invalidDispatchMissingFileExtension) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + test('Should reject completing a dispatch since there is no id provided', async () => { + const contextModified = context + contextModified.bindingData = { + id: '' + } - test('Should reject editing a dispatch with attachments because a file got an illegal file extension', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchAttachments, - } + const complete = await complteDispatch(contextModified, validDispatchEditApproved) - const edit = await editDispatches(contextModified, invalidDispatchIllegalFileExtension) + expect(complete).toBeInstanceOf(Object) + expect(complete.body.message).toBeDefined() + expect(complete.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + test('Should reject completing a dispatch since the id provided is not valid', async () => { + process.env.ID_DISPATCH_TEST = '61f9502c1a6e890eec90d2b1' + const contextModified = context + contextModified.bindingData = { + id: '61f9502c1a6e890eec90d2b1' + } - test('Should reject completing a dispatch since there is no id provided', async () => { - let contextModified = context - contextModified.bindingData = { - id: '', - } + const complete = await complteDispatch(contextModified, validDispatchEditApproved) - const complete = await complteDispatch(contextModified, validDispatchEditApproved) + expect(complete).toBeInstanceOf(Object) + expect(complete.body.message).toBeDefined() + expect(complete.status).toEqual(404) + }) - expect(complete).toBeInstanceOf(Object) - expect(complete.body.message).toBeDefined() - expect(complete.status).toEqual(400) - }) + test('Should reject completing a dispatch since the dispach status is not set to approved', async () => { + const contextModified = context + contextModified.bindingData = { + id: idDispatchOnlyTemplate + } - test('Should reject completing a dispatch since the id provided is not valid', async () => { - process.env.ID_DISPATCH_TEST = '61f9502c1a6e890eec90d2b1' - let contextModified = context - contextModified.bindingData = { - id: '61f9502c1a6e890eec90d2b1', - } + const complete = await complteDispatch(contextModified, validDispatchEditApproved) - const complete = await complteDispatch(contextModified, validDispatchEditApproved) + expect(complete).toBeInstanceOf(Object) + expect(complete.body.message).toBeDefined() + expect(complete.status).toEqual(404) + }) - expect(complete).toBeInstanceOf(Object) - expect(complete.body.message).toBeDefined() - expect(complete.status).toEqual(404) - }) + test('Should not call the matrikkel api since the url is missing', async () => { + process.env.VTFK_MATRIKKELPROXY_BASEURL = '' - test('Should reject completing a dispatch since the dispach status is not set to approved', async () => { - let contextModified = context - contextModified.bindingData = { - id: idDispatchOnlyTemplate, - } - - const complete = await complteDispatch(contextModified, validDispatchEditApproved) + const get = await getMatrikkel(context, apikeyHeader) - expect(complete).toBeInstanceOf(Object) - expect(complete.body.message).toBeDefined() - expect(complete.status).toEqual(404) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(404) + }) - test('Should not call the matrikkel api since the url is missing', async () => { - process.env.VTFK_MATRIKKELPROXY_BASEURL = '' + test('Should not call the matrikkel api since the apikey is missing', async () => { + process.env.VTFK_MATRIKKELPROXY_APIKEY = '' - const get = await getMatrikkel(context, apikeyHeader) + const get = await getMatrikkel(context, apikeyHeader) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(404) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(404) + }) - test('Should not call the matrikkel api since the apikey is missing', async () => { - process.env.VTFK_MATRIKKELPROXY_APIKEY = '' + test('Should reject the get blob endpoint request since the id is missing', async () => { + const contextModified = context + contextModified.bindingData = { + id: '', + name: 'test', + file: 'filename.docx' + } - const get = await getMatrikkel(context, apikeyHeader) + const get = await getBlob(contextModified, apikeyHeader) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(404) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - test('Should reject the get blob endpoint request since the id is missing', async () => { - let contextModified = context - contextModified.bindingData = { - id: '', - name: 'test', - file: 'filename.docx' - } + test('Should reject the get blob endpoint request since the name is missing', async () => { + const contextModified = context + contextModified.bindingData = { + id: 1, + name: '', + file: 'filename.docx' + } - const get = await getBlob(contextModified, apikeyHeader) + const get = await getBlob(contextModified, apikeyHeader) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - test('Should reject the get blob endpoint request since the name is missing', async () => { - let contextModified = context - contextModified.bindingData = { - id: 1, - name: '', - file: 'filename.docx' - } + test('Should reject the get blob endpoint request since the file is missing', async () => { + const contextModified = context + contextModified.bindingData = { + id: 1, + name: 'test', + file: '' + } - const get = await getBlob(contextModified, apikeyHeader) + const get = await getBlob(contextModified, apikeyHeader) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - test('Should reject the get blob endpoint request since the file is missing', async () => { - let contextModified = context - contextModified.bindingData = { - id: 1, - name: 'test', - file: '' - } + test('Should reject the archive endpoint request since the endpoint url is missing', async () => { + process.env.VTFK_P360_ARCHIVE_ENDPOINT = '' - const get = await getBlob(contextModified, apikeyHeader) + const post = await postDispatches(context, validDispatchBoth) - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - test('Should reject the archive endpoint request since the endpoint url is missing', async () => { - process.env.VTFK_P360_ARCHIVE_ENDPOINT = '' + test('Should reject the archive endpoint request since the endpoint key is missing', async () => { + process.env.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY = '' - const post = await postDispatches(context, validDispatchBoth) + const post = await postDispatches(context, validDispatchBoth) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + expect(post).toBeInstanceOf(Object) + expect(post.body.message).toBeDefined() + expect(post.status).toEqual(500) + }) - test('Should reject the archive endpoint request since the endpoint key is missing', async () => { - process.env.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY = '' + // Template tests + test('Should not get a template from the db since theres no id provided', async () => { + const contextModified = context + contextModified.bindingData = { + id: '' + } - const post = await postDispatches(context, validDispatchBoth) + const get = await getTemplateById(contextModified, apikeyHeader) - expect(post).toBeInstanceOf(Object) - expect(post.body.message).toBeDefined() - expect(post.status).toEqual(500) - }) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - //Template tests - test('Should not get a template from the db since theres no id provided', async () => { - let contextModified = context - contextModified.bindingData = { - id: '', - } - - const get = await getTemplateById(contextModified, apikeyHeader) - - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) - - test('Should not get a template from the db since the id provided dose not exist', async () => { - let contextModified = context - contextModified.bindingData = { - id: '61f9502c1a6e890eec90d2b1', - } - - const get = await getTemplateById(contextModified, apikeyHeader) - - expect(get).toBeInstanceOf(Object) - expect(get.body.message).toBeDefined() - expect(get.status).toEqual(400) - }) - - test('Should not get a template from the db since theres no id provided', async () => { - let contextModified = context - contextModified.bindingData = { - id: '', - } + test('Should not get a template from the db since the id provided dose not exist', async () => { + const contextModified = context + contextModified.bindingData = { + id: '61f9502c1a6e890eec90d2b1' + } - request = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST - }, - body: { - name: 'Jeg er reddigert', - template: 'Ja, det er jeg også.' - } - } + const get = await getTemplateById(contextModified, apikeyHeader) - const edit = await editTemplate(contextModified, request) + expect(get).toBeInstanceOf(Object) + expect(get.body.message).toBeDefined() + expect(get.status).toEqual(400) + }) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + test('Should not get a template from the db since theres no id provided', async () => { + const contextModified = context + contextModified.bindingData = { + id: '' + } - test('Should not edit a template from the db since the id provided dose not exist', async () => { - let contextModified = context - contextModified.bindingData = { - id: '61f9502c1a6e890eec90d2b1', - } + request = { + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + name: 'Jeg er reddigert', + template: 'Ja, det er jeg også.' + } + } - request = { - headers: { - 'x-api-key': process.env.APIKEYS_TEST - }, - body: { - name: 'Jeg er reddigert', - template: 'Ja, det er jeg også.' - } - } + const edit = await editTemplate(contextModified, request) + + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) + }) + + test('Should not edit a template from the db since the id provided dose not exist', async () => { + const contextModified = context + contextModified.bindingData = { + id: '61f9502c1a6e890eec90d2b1' + } + + request = { + headers: { + 'x-api-key': process.env.APIKEYS_TEST + }, + body: { + name: 'Jeg er reddigert', + template: 'Ja, det er jeg også.' + } + } - const edit = await editTemplate(contextModified, request) + const edit = await editTemplate(contextModified, request) - expect(edit).toBeInstanceOf(Object) - expect(edit.body.message).toBeDefined() - expect(edit.status).toEqual(400) - }) + expect(edit).toBeInstanceOf(Object) + expect(edit.body.message).toBeDefined() + expect(edit.status).toEqual(400) }) -}) \ No newline at end of file + }) +}) diff --git a/sharedcode/validators/dispatches.js b/sharedcode/validators/dispatches.js index 9b0e280..2849137 100644 --- a/sharedcode/validators/dispatches.js +++ b/sharedcode/validators/dispatches.js @@ -1,8 +1,8 @@ /* Import dependencies */ -const HTTPError = require('../vtfk-errors/httperror'); -const { getCase } = require('../vtfk/checkP360Case'); +const HTTPError = require('../vtfk-errors/httperror') +const { getCase } = require('../vtfk/checkP360Case') /* Validator function @@ -10,25 +10,24 @@ const { getCase } = require('../vtfk/checkP360Case'); module.exports.validate = async (dispatch, req) => { try { // Validate that the dispatch is defined - if(!dispatch) throw new HTTPError('400', 'No dispatch object was provided'); - + if (!dispatch) throw new HTTPError('400', 'No dispatch object was provided') + // Validate that the dispatch has a template and/or attachments - if((!dispatch.attachments || dispatch.attachments.length === 0) && (!dispatch.template || Object.keys(dispatch.template).length === 0)) throw new HTTPError('400', 'Template OR Attachments must be provided'); - if(!dispatch.template && dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length <= 0) throw new HTTPError('400', 'Attachments cannot be empty when there is no template'); + if ((!dispatch.attachments || dispatch.attachments.length === 0) && (!dispatch.template || Object.keys(dispatch.template).length === 0)) throw new HTTPError('400', 'Template OR Attachments must be provided') + if (!dispatch.template && dispatch.attachments && Array.isArray(dispatch.attachments) && dispatch.attachments.length <= 0) throw new HTTPError('400', 'Attachments cannot be empty when there is no template') // Validate that the provided archivenumber exists in P360 - if(!dispatch.archivenumber) throw new HTTPError('400', 'No archivenumber has been provided'); - if(dispatch.archivenumber !== dispatch.validatedArchivenumber) { + if (!dispatch.archivenumber) throw new HTTPError('400', 'No archivenumber has been provided') + if (dispatch.archivenumber !== dispatch.validatedArchivenumber) { try { - const p360Case = await getCase(dispatch.archivenumber); - if(!p360Case) throw new HTTPError('400', 'Could not find a valid case in the archive system'); - if(p360Case.URL) dispatch.archiveUrl = p360Case.URL; + const p360Case = await getCase(dispatch.archivenumber) + if (!p360Case) throw new HTTPError('400', 'Could not find a valid case in the archive system') + if (p360Case.URL) dispatch.archiveUrl = p360Case.URL } catch (err) { - throw new HTTPError(500, `Something went wrong contacting the archive: ${err.message}`, 'Problem contacting the archive'); + throw new HTTPError(500, `Something went wrong contacting the archive: ${err.message}`, 'Problem contacting the archive') } } - } catch (err) { - throw err; + throw err } } diff --git a/sharedcode/vtfk/alertTeams.js b/sharedcode/vtfk/alertTeams.js new file mode 100644 index 0000000..389bc27 --- /dev/null +++ b/sharedcode/vtfk/alertTeams.js @@ -0,0 +1,53 @@ +const config = require('../../config') +const axios = require('axios').default + +const alertTeams = async (error, color, failedTask, completedJob, jobId, endpoint) => { + if (!color) throw new Error('Color must be provided') + if (!error) throw new Error('Error must be provided') + if (!failedTask) throw new Error('failedTasks must be provided') + if (!completedJob) throw new Error('completedJob must be provided') + if (typeof (color) !== 'string') throw new Error('Color must be of type string') + + if (color === 'error') { + color = 'a80c0c' + } else { + color = '1ea80c' + } + + const teamsMsg = { + '@type': 'MessageCard', + '@context': 'http://schema.org/extensions', + themeColor: color, + summary: color === 'a80c0c' ? 'azf-masseutsendelse-api failed' : 'azf-masseutsendelse-api finished a job', + sections: [{ + activityTitle: color === 'a80c0c' ? 'azf-masseutsendelse-api failed' : 'azf-masseutsendelse-api', + activitySubtitle: color === 'a80c0c' ? 'Oi, noe gikk galt! 😮' : 'Oi, alt gikk bra! 🥳', + activityImage: 'https://adaptivecards.io/content/cats/3.png', + facts: [ + { + name: 'Endpoint', + value: endpoint + }, + { + name: color === 'a80c0c' ? 'Failed Task' : 'Completed Job', + value: color === 'a80c0c' ? failedTask : completedJob + }, + { + name: 'JobId (mongoDB ObjectID)', + value: jobId + }, + { + name: color === 'a80c0c' ? 'Error' : 'Success', + value: color === 'a80c0c' ? error : 'Everything is good!' + } + ], + markdown: true + }] + } + const headers = { contentType: 'application/vnd.microsoft.teams.card.o365connector' } + await axios.post(config.TEAMS_WEBHOOK_URL, teamsMsg, { headers }) +} + +module.exports = { + alertTeams +} diff --git a/sharedcode/vtfk/archive.js b/sharedcode/vtfk/archive.js new file mode 100644 index 0000000..36eb251 --- /dev/null +++ b/sharedcode/vtfk/archive.js @@ -0,0 +1,196 @@ +/* + Import dependencies +*/ +const config = require('../../config') +const axios = require('axios') + +/** + * Attempt to get a case from P360 + * @param {string} casenumber The P360 casenumber to check if exists + */ +const syncRecipient = async (number, method) => { + // Input validation + if (!number) throw new Error('SSN cannot be empty') + if (!method) throw new Error('Method cannot be empty') + if (!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty') + if (!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty') + + // Build the request + let request + if (method === 'SyncPrivatePerson') { + request = { + method: 'post', + url: config.VTFK_P360_ARCHIVE_ENDPOINT + method, + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY + }, + data: { + ssn: number + } + } + } else { + request = { + method: 'post', + url: config.VTFK_P360_ARCHIVE_ENDPOINT + method, + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY + }, + data: { + orgnr: number + } + } + } + + // Make the request + const response = await axios.request(request) + + // Handle and return the response + if (response.status !== 200) return response.data[0] + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + // if(response.data.length > 1) throw new Error(`Was not able to sync the recipient ${number}`); + if (response.data.length > 1) return response.data[0] + response.data = response.data[0] + } + return response.data +} + +const addAttachment = async (method, documentNumber, base64, format, title) => { + // Input validation + if (!title) throw new Error('title cannot be empty') + if (!method) throw new Error('Method cannot be empty') + if (!base64) throw new Error('base64 cannot be empty') + if (!format) throw new Error('format cannot be empty') + if (!documentNumber) throw new Error('DocumentNumber cannot be empty') + if (!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty') + if (!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty') + + // Build the request + const request = { + method: 'post', + url: config.VTFK_P360_ARCHIVE_ENDPOINT + method, + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY + }, + data: { + system: 'archive', // NB! Denne referere til hvilken system template som skal brukes "archive-add-attachment", se https://github.com/vtfk/azf-archive/tree/master/templates + template: 'add-attachment', + parameter: { + documentNumber, + base64, + format, + title, + versionFormat: 'P' + } + } + } + + // Make the request + const response = await axios.request(request) + + // Handle and return the response + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + if (response.data.length > 1) throw new Error(`Was not able to add attachment with the title ${title}`) + response.data = response.data[0] + } + return response.data +} + +const createCaseDocument = async (method, title, caseNumber, date, contacts, attachments, paragraph, responsiblePersonEmail) => { + // Input validation + if (!method) throw new Error('Method cannot be empty') + if (!title) throw new Error('title cannot be empty') + if (!caseNumber) throw new Error('caseNumber cannot be empty') + if (!date) throw new Error('date cannot be empty') + if (!contacts) throw new Error('contacts cannot be empty') + // if(!attachments) throw new Error('attachments cannot be empty') + // if(!paragraph) throw new Error('paragraph cannot be empty') + if (!responsiblePersonEmail) throw new Error('responsiblePersonEmail cannot be empty') + if (!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty') + if (!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty') + + // Build the request + const request = { + method: 'post', + url: config.VTFK_P360_ARCHIVE_ENDPOINT + method, + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY + }, + data: { + system: 'masseutsendelse', + template: 'utsendelsesdokument', + parameter: { + title, + caseNumber, + date, // dato prosjektet ble opprettet i masseutsendelse + contacts, // An array of contacts + attachments, // An array of attachments + accessCode: 'U', + accessGroup: 'Alle', + paragraph, + responsiblePersonEmail + } + } + } + + // Make the request + const response = await axios.request(request) + + // Handle and return the response + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + if (response.data.length > 1) throw new Error(`Was not able to create the case with the title: ${title}`) + response.data = response.data[0] + } + return response.data +} + +const dispatchDocuments = async (documents, method) => { + // Input validation + if (!documents) throw new Error('Documents cannot be empty') + // if(typeof(documents) !== Array) throw new Error('Documents must be of type array') + if (documents.length < 0) throw new Error('Documents array must contain minimum one document') + if (!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty') + if (!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty') + + // Build the request + const request = { + method: 'post', + url: config.VTFK_P360_ARCHIVE_ENDPOINT + method, + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY + }, + data: { + service: 'DocumentService', + method: 'DispatchDocuments', + parameter: { + Documents: [{ + DocumentNumber: documents[0] + }] + } + } + } + + // Make the request + const response = await axios.request(request) + + // Handle and return the response + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + if (response.data.length > 1) throw new Error(`Was not able to dispatch the documents: ${documents}`) + response.data = response.data[0] + } + return response.data +} + +module.exports = { + syncRecipient, + addAttachment, + createCaseDocument, + dispatchDocuments +} diff --git a/sharedcode/vtfk/checkP360Case.js b/sharedcode/vtfk/checkP360Case.js index a4e664e..5683c64 100644 --- a/sharedcode/vtfk/checkP360Case.js +++ b/sharedcode/vtfk/checkP360Case.js @@ -1,8 +1,8 @@ /* Import dependencies */ -const config = require('../../config'); -const axios = require('axios'); +const config = require('../../config') +const axios = require('axios') /** * Attempt to get a case from P360 @@ -10,9 +10,9 @@ const axios = require('axios'); */ module.exports.getCase = async function getCase (casenumber) { // Input validation - if(!casenumber) throw new Error('Archive casenumber cannot be empty'); - if(!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty'); - if(!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty'); + if (!casenumber) throw new Error('Archive casenumber cannot be empty') + if (!config.VTFK_P360_ARCHIVE_ENDPOINT) throw new Error('VTFK_P360_ARCHIVE_ENDPOINT environment variable cannot be empty') + if (!config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY) throw new Error('VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY environment variable cannot be empty') // Build the request const request = { @@ -22,8 +22,8 @@ module.exports.getCase = async function getCase (casenumber) { 'Ocp-Apim-Subscription-Key': config.VTFK_P360_ARCHIVE_SUBSCRIPTION_KEY }, data: { - service: "CaseService", - method: "GetCases", + service: 'CaseService', + method: 'GetCases', parameter: { CaseNumber: casenumber }, @@ -34,14 +34,14 @@ module.exports.getCase = async function getCase (casenumber) { } // Make the request - const response = await axios.request(request); + const response = await axios.request(request) // Handle and return the response - if(!response || !response.data) return undefined; - if(Array.isArray(response.data)) { - if(response.data.length === 0) return undefined; - if(response.data.length > 1) throw new Error(`The casenumber ${casenumber} matched ${response.data.length} it must only match one`); - response.data = response.data[0]; + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + if (response.data.length > 1) throw new Error(`The casenumber ${casenumber} matched ${response.data.length} it must only match one`) + response.data = response.data[0] } - return response.data; -} \ No newline at end of file + return response.data +} diff --git a/sharedcode/vtfk/statistics.js b/sharedcode/vtfk/statistics.js new file mode 100644 index 0000000..c9a298b --- /dev/null +++ b/sharedcode/vtfk/statistics.js @@ -0,0 +1,42 @@ +/* + Import dependencies +*/ +const config = require('../../config') +const axios = require('axios') +const createStatistics = async (department, id, privatepersons, enterprises) => { + // Build the request + const request = { + method: 'post', + url: config.VTFK_STATISTICS_URL + '/stats', + headers: { + 'Ocp-Apim-Subscription-Key': config.VTFK_STATISTICS_KEY + }, + data: { + system: 'Masseutsendelse', + engine: 'azf-masseutsendelse-api', + company: 'SMM', + department, + description: 'Viser antall bedrifer og privatpersoner som er varslet.', + externalId: id, + privatepersons, + enterprises, + type: 'SMM - Masseutsendelse' + // Optional fields + } + } + + // Make the request + const response = await axios.request(request) + // Handle and return the response + if (!response || !response.data) return undefined + if (Array.isArray(response.data)) { + if (response.data.length === 0) return undefined + if (response.data.length > 1) throw new Error('Was not able to create statistics') + response.data = response.data[0] + } + return response.data +} + +module.exports = { + createStatistics +}