From c9f934c87eb878e94f713febb36371ca3d240135 Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Wed, 3 Apr 2024 11:45:43 +0530 Subject: [PATCH 001/201] fix(gainsight): replace myAxios utility with handleHttpRequest utility --- src/v0/destinations/gainsight/transform.js | 2 +- src/v0/destinations/gainsight/util.js | 190 ++++++++++----------- 2 files changed, 95 insertions(+), 97 deletions(-) diff --git a/src/v0/destinations/gainsight/transform.js b/src/v0/destinations/gainsight/transform.js index f47296f066..a55febb844 100644 --- a/src/v0/destinations/gainsight/transform.js +++ b/src/v0/destinations/gainsight/transform.js @@ -103,7 +103,7 @@ const groupResponseBuilder = async (message, { Config }) => { payload = removeUndefinedAndNullValues(payload); let groupGsid; - if (resp.data.data.records.length === 0) { + if (resp.data.records.length === 0) { groupGsid = await createGroup(payload, Config); } else { groupGsid = await updateGroup(payload, Config); diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index 4c7fd58193..135eba57c1 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -1,134 +1,132 @@ -const { - ConfigurationError, - RetryableError, - NetworkError, -} = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); +const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const logger = require('../../../logger'); const { ENDPOINTS, getLookupPayload } = require('./config'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); +const { isHttpStatusSuccess } = require('../../util'); +const { RetryRequestError } = require('../../../util/utils'); const searchGroup = async (groupName, Config) => { - let resp; - try { - resp = await myAxios.post( - `${ENDPOINTS.groupSearchEndpoint(Config.domain)}`, - getLookupPayload(groupName), - { - headers: { - Accesskey: Config.accessKey, - 'Content-Type': JSON_MIME_TYPE, - }, + const { processedResponse } = await handleHttpRequest( + 'post', + `${ENDPOINTS.groupSearchEndpoint(Config.domain)}`, + getLookupPayload(groupName), + { + headers: { + Accesskey: Config.accessKey, + 'Content-Type': JSON_MIME_TYPE, }, + }, + { + destType: 'gainsight', + feature: 'transformation', + requestMethod: 'POST', + endpointPath: '/data/objects/query/Company', + module: 'router', + }, + ); + + if (!isHttpStatusSuccess(processedResponse.status)) { + throw new NetworkError( + `failed to search group ${JSON.stringify(processedResponse.response)}`, + processedResponse.status, { - destType: 'gainsight', - feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/data/objects/query/Company', - module: 'router', + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), }, + processedResponse, ); - } catch (error) { - let errMessage = ''; - let errorStatus = 500; - if (error.response && error.response.data) { - errMessage = error.response.data.errorDesc; - errorStatus = error.response.status; - } - throw new NetworkError(`failed to search group ${errMessage}`, errorStatus, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errorStatus), - }); } - if (!resp || !resp.data || resp.status !== 200) { - throw new RetryableError('failed to search group'); + if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + throw new RetryRequestError('failed to search group'); } - return resp; + + return processedResponse.response; }; const createGroup = async (payload, Config) => { - let resp; - try { - resp = await myAxios.post( - `${ENDPOINTS.groupCreateEndpoint(Config.domain)}`, - { - records: [payload], - }, - { - headers: { - Accesskey: Config.accessKey, - 'Content-Type': JSON_MIME_TYPE, - }, + const { processedResponse } = await handleHttpRequest( + 'post', + `${ENDPOINTS.groupCreateEndpoint(Config.domain)}`, + { + records: [payload], + }, + { + headers: { + Accesskey: Config.accessKey, + 'Content-Type': JSON_MIME_TYPE, }, + }, + { + destType: 'gainsight', + feature: 'transformation', + requestMethod: 'POST', + endpointPath: '/data/objects/Company', + module: 'router', + }, + ); + + if (!isHttpStatusSuccess(processedResponse.status)) { + throw new NetworkError( + `failed to create group ${JSON.stringify(processedResponse.response)}`, + processedResponse.status, { - destType: 'gainsight', - feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/data/objects/Company', - module: 'router', + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), }, + processedResponse, ); - } catch (error) { - let errMessage = ''; - let errorStatus = 500; - if (error.response && error.response.data) { - errMessage = error.response.data.errorDesc; - errorStatus = error.response.status; - } - throw new NetworkError(`failed to create group ${errMessage}`, errorStatus, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errorStatus), - }); } - if (!resp || !resp.data || resp.status !== 200) { - throw new RetryableError('failed to create group'); + if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + throw new RetryRequestError('failed to create group'); } - return resp.data.data.records[0].Gsid; + + return processedResponse.response.data.records[0].Gsid; }; const updateGroup = async (payload, Config) => { - let resp; - try { - resp = await myAxios.put( - `${ENDPOINTS.groupUpdateEndpoint(Config.domain)}`, - { - records: [payload], + const { processedResponse } = await handleHttpRequest( + 'put', + `${ENDPOINTS.groupUpdateEndpoint(Config.domain)}`, + { + records: [payload], + }, + { + headers: { + Accesskey: Config.accessKey, + 'Content-Type': JSON_MIME_TYPE, }, - { - headers: { - Accesskey: Config.accessKey, - 'Content-Type': JSON_MIME_TYPE, - }, - params: { - keys: 'Name', - }, + params: { + keys: 'Name', }, + }, + { + destType: 'gainsight', + feature: 'transformation', + requestMethod: 'PUT', + endpointPath: '/data/objects/Company', + module: 'router', + }, + ); + + if (!isHttpStatusSuccess(processedResponse.status)) { + throw new NetworkError( + `failed to update group ${JSON.stringify(processedResponse.response)}`, + processedResponse.status, { - destType: 'gainsight', - feature: 'transformation', - requestMethod: 'PUT', - endpointPath: '/data/objects/Company', - module: 'router', + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), }, + processedResponse, ); - } catch (error) { - let errMessage = ''; - let errorStatus = 500; - if (error.response && error.response.data) { - errMessage = error.response.data.errorDesc; - errorStatus = error.response.status; - } - throw new NetworkError(`failed to update group ${errMessage}`, errorStatus, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errorStatus), - }); } - if (!resp || !resp.data || resp.status !== 200) { - throw new RetryableError('failed to update group'); + if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + throw new RetryRequestError('failed to update group'); } - return resp.data.data.records[0].Gsid; + + return processedResponse.response.data.records[0].Gsid; }; /** From 6d3a13de80766082dbea591410ce8a7c2923686a Mon Sep 17 00:00:00 2001 From: mihir-4116 Date: Wed, 10 Apr 2024 09:53:49 +0530 Subject: [PATCH 002/201] chore: added gainsight tests --- .../destinations/gainsight/network.ts | 95 +++++++++ .../destinations/gainsight/processor/data.ts | 180 ++++++++++++++++++ 2 files changed, 275 insertions(+) diff --git a/test/integrations/destinations/gainsight/network.ts b/test/integrations/destinations/gainsight/network.ts index 4c5a026847..6f50092150 100644 --- a/test/integrations/destinations/gainsight/network.ts +++ b/test/integrations/destinations/gainsight/network.ts @@ -3,6 +3,20 @@ export const networkCallsData = [ httpReq: { url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/query/Company', method: 'POST', + data: { + select: ['Name'], + where: { + conditions: [ + { + name: 'Name', + alias: 'A', + value: ['Kramerica Industries'], + operator: 'EQ', + }, + ], + expression: 'A', + }, + }, }, httpRes: { data: { @@ -18,6 +32,87 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/query/Company', + method: 'POST', + data: { + select: ['Name'], + where: { + conditions: [ + { + name: 'Name', + alias: 'A', + value: ['Seinfeld Corps'], + operator: 'EQ', + }, + ], + expression: 'A', + }, + }, + }, + httpRes: { + data: { + result: true, + errorCode: null, + errorDesc: null, + requestId: '47d9c8be-4912-4610-806c-0eec22b73236', + data: { + records: [], + }, + message: null, + }, + status: 200, + }, + }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/query/Company', + method: 'POST', + data: { + select: ['Name'], + where: { + conditions: [{ name: 'Name', alias: 'A', value: ['Rudderstack'], operator: 'EQ' }], + expression: 'A', + }, + }, + }, + httpRes: { + data: { + result: false, + errorCode: 'GU_2400', + errorDesc: 'Too many request', + requestId: 'request-2', + data: null, + message: null, + }, + status: 429, + }, + }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/query/Company', + method: 'POST', + data: { + select: ['Name'], + where: { + conditions: [{ name: 'Name', alias: 'A', value: ['Rudderlabs'], operator: 'EQ' }], + expression: 'A', + }, + }, + }, + httpRes: { + data: { + result: false, + errorCode: 'GU_1101', + errorDesc: 'Oops, something went wrong.', + requestId: 'request-3', + data: null, + message: null, + }, + status: 500, + }, + }, { httpReq: { url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/Company', diff --git a/test/integrations/destinations/gainsight/processor/data.ts b/test/integrations/destinations/gainsight/processor/data.ts index dc4fe25e1b..06232221ad 100644 --- a/test/integrations/destinations/gainsight/processor/data.ts +++ b/test/integrations/destinations/gainsight/processor/data.ts @@ -976,4 +976,184 @@ export const data = [ }, }, }, + { + name: 'gainsight', + description: 'Gainsight rate limit test', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + domain: 'demo-domain.gainsightcloud.com', + accessKey: 'sample-access-key', + sharedSecret: 'sample-shared-secret', + personMap: [], + companyMap: [], + eventNameMap: [], + eventVersionMap: [], + }, + }, + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + traits: { + email: 'test@rudderstack.com', + }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + type: 'group', + traits: { + name: 'Rudderstack', + industry: 'CDP', + employees: '100', + status: 'complete', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + '{"message":"failed to search group {\\"result\\":false,\\"errorCode\\":\\"GU_2400\\",\\"errorDesc\\":\\"Too many request\\",\\"requestId\\":\\"request-2\\",\\"data\\":null,\\"message\\":null}","destinationResponse":{"response":{"result":false,"errorCode":"GU_2400","errorDesc":"Too many request","requestId":"request-2","data":null,"message":null},"status":429}}', + statTags: { + destType: 'GAINSIGHT', + errorCategory: 'network', + errorType: 'throttled', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 429, + }, + ], + }, + }, + }, + { + name: 'gainsight', + description: 'Gainsight server error test', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + domain: 'demo-domain.gainsightcloud.com', + accessKey: 'sample-access-key', + sharedSecret: 'sample-shared-secret', + personMap: [], + companyMap: [], + eventNameMap: [], + eventVersionMap: [], + }, + }, + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + traits: { + email: 'test@rudderlabs.com', + }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + type: 'group', + traits: { + name: 'Rudderlabs', + industry: 'CDP', + employees: '100', + status: 'complete', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + '{"message":"failed to search group {\\"result\\":false,\\"errorCode\\":\\"GU_1101\\",\\"errorDesc\\":\\"Oops, something went wrong.\\",\\"requestId\\":\\"request-3\\",\\"data\\":null,\\"message\\":null}","destinationResponse":{"response":{"result":false,"errorCode":"GU_1101","errorDesc":"Oops, something went wrong.","requestId":"request-3","data":null,"message":null},"status":500}}', + statTags: { + destType: 'GAINSIGHT', + errorCategory: 'network', + errorType: 'retryable', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 500, + }, + ], + }, + }, + }, ]; From adfbb556a2094475a39202aa15133c95eeab02b6 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Wed, 24 Apr 2024 14:14:28 +0530 Subject: [PATCH 003/201] chore: address comment, update to retryable --- src/v0/destinations/gainsight/util.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index 135eba57c1..0773ea3bbe 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -1,4 +1,8 @@ -const { NetworkError, ConfigurationError } = require('@rudderstack/integrations-lib'); +const { + NetworkError, + ConfigurationError, + RetryableError, +} = require('@rudderstack/integrations-lib'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const logger = require('../../../logger'); const { ENDPOINTS, getLookupPayload } = require('./config'); @@ -6,7 +10,6 @@ const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); const { handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util'); -const { RetryRequestError } = require('../../../util/utils'); const searchGroup = async (groupName, Config) => { const { processedResponse } = await handleHttpRequest( @@ -40,7 +43,7 @@ const searchGroup = async (groupName, Config) => { } if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { - throw new RetryRequestError('failed to search group'); + throw new RetryableError('failed to search group', 500, processedResponse); } return processedResponse.response; @@ -80,7 +83,7 @@ const createGroup = async (payload, Config) => { } if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { - throw new RetryRequestError('failed to create group'); + throw new RetryableError('failed to create group', 500, processedResponse); } return processedResponse.response.data.records[0].Gsid; @@ -123,7 +126,7 @@ const updateGroup = async (payload, Config) => { } if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { - throw new RetryRequestError('failed to update group'); + throw new RetryableError('failed to update group', 500, processedResponse); } return processedResponse.response.data.records[0].Gsid; From c165ebdbbe82e29b8e7805e7c37c84f5141f5dee Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Wed, 24 Apr 2024 15:02:58 +0530 Subject: [PATCH 004/201] chore: update condition for gainsight Signed-off-by: Sai Sankeerth --- src/v0/destinations/gainsight/util.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index 0773ea3bbe..8f35762a38 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -42,7 +42,7 @@ const searchGroup = async (groupName, Config) => { ); } - if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + if (!processedResponse?.response || processedResponse.status !== 200) { throw new RetryableError('failed to search group', 500, processedResponse); } @@ -82,7 +82,7 @@ const createGroup = async (payload, Config) => { ); } - if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + if (!processedResponse?.response || processedResponse.status !== 200) { throw new RetryableError('failed to create group', 500, processedResponse); } @@ -125,7 +125,7 @@ const updateGroup = async (payload, Config) => { ); } - if (!processedResponse || !processedResponse.response || processedResponse.status !== 200) { + if (!processedResponse?.response || processedResponse.status !== 200) { throw new RetryableError('failed to update group', 500, processedResponse); } From 69d9ca4e32d3438fc96ac0653b4b2f3cb284d393 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Thu, 13 Jun 2024 03:28:40 +0530 Subject: [PATCH 005/201] feat: aggregate metrics in a worker thread --- src/util/cluster.js | 4 ++ src/util/metricsAggregator.js | 110 ++++++++++++++++++++++++++++++++++ src/util/prometheus.js | 20 ++++++- src/util/stats.js | 11 ++++ src/util/worker.js | 15 +++++ 5 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 src/util/metricsAggregator.js create mode 100644 src/util/worker.js diff --git a/src/util/cluster.js b/src/util/cluster.js index 5012bda324..4a1a5a3e29 100644 --- a/src/util/cluster.js +++ b/src/util/cluster.js @@ -3,6 +3,7 @@ const gracefulShutdown = require('http-graceful-shutdown'); const logger = require('../logger'); const { logProcessInfo } = require('./utils'); const { RedisDB } = require('./redis/redisConnector'); +const { terminateWorkerThread } = require('./stats'); const numWorkers = parseInt(process.env.NUM_PROCS || '1', 10); const metricsPort = parseInt(process.env.METRICS_PORT || '9091', 10); @@ -23,6 +24,9 @@ function shutdownWorkers() { process.kill(worker.process.pid); logger.error(`Sent kill signal to worker ${worker.id} (pid: ${worker.process.pid})`); }); + // TODO: find a better way to terminate worker thread, this is a temporary hack + // ideally we should put a await here, we will fix this in future + terminateWorkerThread(); } function start(port, app, metricsApp) { diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js new file mode 100644 index 0000000000..7cbb47256b --- /dev/null +++ b/src/util/metricsAggregator.js @@ -0,0 +1,110 @@ +/* eslint-disable */ +const cluster = require('cluster'); +const logger = require('../logger'); +const { Worker, isMainThread } = require('worker_threads'); +const GET_METRICS_REQ = 'rudder-transformer:getMetricsReq'; +const GET_METRICS_RES = 'rudder-transformer:getMetricsRes'; +const AGGREGATE_METRICS_REQ = 'rudder-transformer:aggregateMetricsReq'; +const AGGREGATE_METRICS_RES = 'rudder-transformer:aggregateMetricsRes'; + +class MetricsAggregator { + constructor(prometheusInstance) { + this.metricsBuffer = []; + this.pendingMetricRequests = 0; + this.resolveFunc = null; + this.rejectFunc = null; + this.prometheusInstance = prometheusInstance; + this.createWorkerThread(); + this.registerCallbacks(); + } + + registerCallbacks() { + if (cluster.isPrimary) { + // register callback for master process + cluster.on('message', async (worker, message) => { + if (message.type === GET_METRICS_RES) { + logger.debug(`[MetricsAggregator] Master received metrics from worker ${worker.id}`); + await this.handleMetricsResponse(message); + } + }); + return; + } + // register callback for worker process + cluster.worker.on('message', async (message) => { + if (message.type === GET_METRICS_REQ) { + logger.debug(`[MetricsAggregator] Worker ${cluster.worker.id} received metrics request`); + try { + const metrics = await this.prometheusInstance.prometheusRegistry.getMetricsAsJSON(); + cluster.worker.send({ type: GET_METRICS_RES, metrics }); + } catch (error) { + cluster.worker.send({ type: GET_METRICS_RES, error: error.message }); + } + } + }); + } + + createWorkerThread() { + if (cluster.isPrimary && isMainThread) { + this.workerThread = new Worker('./src/util/worker.js'); + logger.info( + `[MetricsAggregator] Worker thread created with threadId ${this.workerThread.threadId}`, + ); + + this.workerThread.on('message', (message) => { + if ((message.type = AGGREGATE_METRICS_RES)) { + if (message.error) { + this.rejectFunc(new Error(message.error)); + this.resetAggregator(); + return; + } + this.resolveFunc(message.metrics); + this.resetAggregator(); + } + }); + } + } + + resetAggregator() { + this.metricsBuffer = []; + this.pendingMetricRequests = 0; + this.resolveFunc = null; + this.rejectFunc = null; + } + + async aggregateMetrics() { + return new Promise((resolve, reject) => { + this.resolveFunc = resolve; + this.rejectFunc = reject; + for (const id in cluster.workers) { + this.pendingMetricRequests++; + logger.debug(`[MetricsAggregator] Requesting metrics from worker ${id}`); + cluster.workers[id].send({ type: GET_METRICS_REQ }); + } + }); + } + + async aggregateMetricsInWorkerThread() { + this.workerThread.postMessage({ type: AGGREGATE_METRICS_REQ, metrics: this.metricsBuffer }); + } + + async handleMetricsResponse(message) { + if (message.error) { + this.rejectFunc(new Error(message.error)); + this.resetAggregator(); + return; + } + this.metricsBuffer.push(message.metrics); + this.pendingMetricRequests--; + if (this.pendingMetricRequests === 0) { + this.aggregateMetricsInWorkerThread(); + } + } + + async terminateWorkerThread() { + logger.info( + `[MetricsAggregator] Worker thread terminated with exit code ${await this.workerThread.terminate()}`, + ); + } +} + +module.exports = { MetricsAggregator, AGGREGATE_METRICS_REQ, AGGREGATE_METRICS_RES }; diff --git a/src/util/prometheus.js b/src/util/prometheus.js index bc4c6f2eb9..eb75c1a415 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -1,7 +1,9 @@ const prometheusClient = require('prom-client'); const logger = require('../logger'); +const { MetricsAggregator } = require('./metricsAggregator'); const clusterEnabled = process.env.CLUSTER_ENABLED !== 'false'; +const useMetricsAggregator = process.env.USE_METRICS_AGGREGATOR === 'true'; const instanceID = process.env.INSTANCE_ID || 'localhost'; const prefix = 'transformer'; const defaultLabels = { instanceName: instanceID }; @@ -12,6 +14,9 @@ function appendPrefix(name) { class Prometheus { constructor(enableSummaryMetrics = true) { + if (clusterEnabled && useMetricsAggregator) { + this.metricsAggregator = new MetricsAggregator(this); + } this.prometheusRegistry = new prometheusClient.Registry(); this.prometheusRegistry.setDefaultLabels(defaultLabels); prometheusClient.collectDefaultMetrics({ @@ -27,8 +32,13 @@ class Prometheus { async metricsController(ctx) { ctx.status = 200; if (clusterEnabled) { - ctx.type = this.aggregatorRegistry.contentType; - ctx.body = await this.aggregatorRegistry.clusterMetrics(); + if (useMetricsAggregator) { + ctx.type = this.prometheusRegistry.contentType; + ctx.body = await this.metricsAggregator.aggregateMetrics(); + } else { + ctx.type = this.aggregatorRegistry.contentType; + ctx.body = await this.aggregatorRegistry.clusterMetrics(); + } } else { ctx.type = this.prometheusRegistry.contentType; ctx.body = await this.prometheusRegistry.metrics(); @@ -192,6 +202,12 @@ class Prometheus { } } + async terminateWorkerThread() { + if (this.metricsAggregator) { + await this.metricsAggregator.terminateWorkerThread(); + } + } + createMetrics(enableSummaryMetrics) { const metrics = [ // Counters diff --git a/src/util/stats.js b/src/util/stats.js index 0aa13fc85c..301857dee0 100644 --- a/src/util/stats.js +++ b/src/util/stats.js @@ -97,6 +97,16 @@ async function metricsController(ctx) { ctx.body = `Not supported`; } +async function terminateWorkerThread() { + if (!enableStats || !statsClient) { + return; + } + + if (statsClientType === 'prometheus') { + await statsClient.terminateWorkerThread(); + } +} + init(); module.exports = { @@ -108,4 +118,5 @@ module.exports = { gauge, histogram, metricsController, + terminateWorkerThread, }; diff --git a/src/util/worker.js b/src/util/worker.js new file mode 100644 index 0000000000..97afc05509 --- /dev/null +++ b/src/util/worker.js @@ -0,0 +1,15 @@ +/* eslint-disable */ +const { parentPort } = require('worker_threads'); +const { AGGREGATE_METRICS_REQ, AGGREGATE_METRICS_RES } = require('./metricsAggregator'); +const { AggregatorRegistry } = require('prom-client'); + +parentPort.on('message', async (message) => { + if ((message.type = AGGREGATE_METRICS_REQ)) { + try { + const promString = await AggregatorRegistry.aggregate(message.metrics).metrics(); + parentPort.postMessage({ type: AGGREGATE_METRICS_RES, metrics: promString }); + } catch (error) { + parentPort.postMessage({ type: AGGREGATE_METRICS_RES, error: error.message }); + } + } +}); From 6a0fe665f04eeebcd9b4928fc7082ff477cb4e1b Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Thu, 13 Jun 2024 04:00:14 +0530 Subject: [PATCH 006/201] feat: metrics aggregator - reject new request if a request is already being processed --- src/util/metricsAggregator.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index 7cbb47256b..bb46db37a9 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -72,6 +72,16 @@ class MetricsAggregator { } async aggregateMetrics() { + // If a request is already being processed, reject the new request + // Use resolveFunc to check if a request is already being processed + if (this.resolveFunc !== null) { + logger.error( + '[MetricsAggregator] Failed to serve /metrics request, a request is already being processed.', + ); + throw new Error( + '[MetricsAggregator] Currently processing a request, please try again later.', + ); + } return new Promise((resolve, reject) => { this.resolveFunc = resolve; this.rejectFunc = reject; From 2280303db957208933006c0c05731c64b3a8e6bb Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Thu, 13 Jun 2024 04:05:08 +0530 Subject: [PATCH 007/201] feat: metrics aggregator - reject new request if a request is already being processed --- src/util/metricsAggregator.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index bb46db37a9..574bf64558 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -74,6 +74,9 @@ class MetricsAggregator { async aggregateMetrics() { // If a request is already being processed, reject the new request // Use resolveFunc to check if a request is already being processed + // we dont support concurrent /metrics requests for now - we would need to implement a requestId mechanism and then handle all message calls accoridng to this requestId + // this is how it is implemented in prom-client [https://github.com/siimon/prom-client/blob/564e46724e258704df52ab329a7be833aaed4b69/lib/cluster.js#L43] + // we are not implementing it for now to keep things simple, once we validate the solution we can implement it if (this.resolveFunc !== null) { logger.error( '[MetricsAggregator] Failed to serve /metrics request, a request is already being processed.', From 4691c8008942fd4d25b4fcb97ffc1cea9a7cb357 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Fri, 21 Jun 2024 10:03:57 +0530 Subject: [PATCH 008/201] chore: add test cases to increase coverage --- .../destinations/gainsight/network.ts | 144 +++++++++++++ .../destinations/gainsight/processor/data.ts | 199 ++++++++++++++++++ 2 files changed, 343 insertions(+) diff --git a/test/integrations/destinations/gainsight/network.ts b/test/integrations/destinations/gainsight/network.ts index 6f50092150..5a80f41c40 100644 --- a/test/integrations/destinations/gainsight/network.ts +++ b/test/integrations/destinations/gainsight/network.ts @@ -163,4 +163,148 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/query/Company', + headers: { + Accesskey: 'valid-access-key-for-update-group', + 'Content-Type': 'application/json', + }, + method: 'POST', + }, + httpRes: { + data: { + result: true, + errorCode: null, + errorDesc: null, + requestId: '8863e73c-a465-4fc6-a385-f7b3200720dc', + data: { + records: [ + { + Name: 'Heroku', + Renewal_Date: 1521743018667, + Status: '1P01OI3OHC9S79J7VN8GQLUQDH0Y52CYFMXW', + Stage: '1I0054U9FAKXZ0H26HO92M3F1G5SPWVQDNF3', + Customer_Lifetime_in_Months: 22, + 'csm__gr.email': 'jnash@heroku.com', + }, + { + Name: 'ABC Inc.', + Renewal_Date: 1521743018667, + Status: '1P01OI3OHC9S79J7VN8GQLUQDH0Y52CYFMXW', + Stage: '1I0054U9FAKXZ0H26HO92M3F1G5SPWVQDNF3', + Customer_Lifetime_in_Months: 15, + 'csm__gr.email': 'cbrown@abc.com', + }, + { + Name: 'XYZ Inc.', + Renewal_Date: 1521743018667, + Status: '1P01OI3OHC9S79J7VN8GQLUQDH0Y52CYFMXW', + Stage: '1I0054U9FAKXZ0H26HO92M3F1G5SPWVQDNF3', + Customer_Lifetime_in_Months: 6, + 'csm__gr.email': 'dbess@xyz.com', + }, + ], + }, + message: null, + }, + status: 200, + }, + }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/Company', + headers: { + Accesskey: 'valid-access-key-for-update-group', + 'Content-Type': 'application/json', + }, + data: { + records: [ + { + Name: 'Testing company', + Employees: 100, + CompanyType: 'spoof', + Industry: 'Sitcom', + Status: 'complete', + }, + ], + }, + method: 'PUT', + }, + httpRes: { + data: { + result: true, + errorCode: null, + errorDesc: null, + requestId: 'eaa1520f-0b27-4468-86b0-17b4e94f1786', + data: { + count: 2, + errors: null, + records: [ + { + CompanyType: 'spoof', + Employees: 100, + Industry: 'Sitcom', + Name: 'Testing company', + Status: 'complete', + Gsid: '12345', + }, + ], + }, + message: null, + }, + status: 200, + }, + }, + { + httpReq: { + url: 'https://demo-domain.gainsightcloud.com/v1/data/objects/Company', + headers: { + Accesskey: 'valid-access-key-for-update-group', + 'Content-Type': 'application/json', + }, + data: { + records: [ + { + Name: 'Testing company with failed update', + Employees: 100, + CompanyType: 'spoof', + Industry: 'Sitcom', + Status: 'complete', + }, + ], + }, + method: 'PUT', + }, + httpRes: { + data: { + result: false, + errorCode: 'GSOBJ_1006', + errorDesc: 'Invalid dateTimes format (OriginalContractDate = 210318).', + requestId: '7cba3c98-b04b-4e21-9e57-44807fa52b8a', + data: { + count: 0, + errors: [ + [ + { + success: false, + parsedValue: 210318, + errors: [ + { + errorMessage: 'Invalid dateTime format', + errorCode: 'GSOBJ_1006', + fieldName: 'OriginalContractDate', + invalidValue: 210318, + }, + ], + }, + ], + ], + records: null, + }, + message: null, + }, + status: 400, + }, + }, ]; diff --git a/test/integrations/destinations/gainsight/processor/data.ts b/test/integrations/destinations/gainsight/processor/data.ts index 06232221ad..ebe7f5a679 100644 --- a/test/integrations/destinations/gainsight/processor/data.ts +++ b/test/integrations/destinations/gainsight/processor/data.ts @@ -1156,4 +1156,203 @@ export const data = [ }, }, }, + { + name: 'gainsight', + description: 'group call when we need to update the existing group', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + domain: 'demo-domain.gainsightcloud.com', + accessKey: 'valid-access-key-for-update-group', + sharedSecret: 'sample-shared-secret', + personMap: [], + companyMap: [], + eventNameMap: [], + eventVersionMap: [], + }, + }, + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + traits: { + email: 'krammer@seinfeld.com', + }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + type: 'group', + traits: { + name: 'Testing company', + industry: 'Sitcom', + employees: '100', + status: 'complete', + companyType: 'spoof', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + FORM: {}, + JSON: { + Email: 'krammer@seinfeld.com', + companies: [ + { + Company_ID: '12345', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://demo-domain.gainsightcloud.com/v1.0/api/people', + files: {}, + headers: { + Accesskey: 'valid-access-key-for-update-group', + 'Content-Type': 'application/json', + }, + method: 'PUT', + params: {}, + type: 'REST', + userId: '', + version: '1', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'gainsight', + description: 'group call when we need to update the existing group but the update call failed', + feature: 'processor', + id: 'gainsightUpdateGroup', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + domain: 'demo-domain.gainsightcloud.com', + accessKey: 'valid-access-key-for-update-group', + sharedSecret: 'sample-shared-secret', + personMap: [], + companyMap: [], + eventNameMap: [], + eventVersionMap: [], + }, + }, + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + traits: { + email: 'krammer@seinfeld.com', + }, + }, + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: 'anon_id', + type: 'group', + traits: { + name: 'Testing company with failed update', + industry: 'Sitcom', + employees: '100', + status: 'complete', + companyType: 'spoof', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + '{"message":"failed to update group {\\"result\\":false,\\"errorCode\\":\\"GSOBJ_1006\\",\\"errorDesc\\":\\"Invalid dateTimes format (OriginalContractDate = 210318).\\",\\"requestId\\":\\"7cba3c98-b04b-4e21-9e57-44807fa52b8a\\",\\"data\\":{\\"count\\":0,\\"errors\\":[[{\\"success\\":false,\\"parsedValue\\":210318,\\"errors\\":[{\\"errorMessage\\":\\"Invalid dateTime format\\",\\"errorCode\\":\\"GSOBJ_1006\\",\\"fieldName\\":\\"OriginalContractDate\\",\\"invalidValue\\":210318}]}]],\\"records\\":null},\\"message\\":null}","destinationResponse":{"response":{"result":false,"errorCode":"GSOBJ_1006","errorDesc":"Invalid dateTimes format (OriginalContractDate = 210318).","requestId":"7cba3c98-b04b-4e21-9e57-44807fa52b8a","data":{"count":0,"errors":[[{"success":false,"parsedValue":210318,"errors":[{"errorMessage":"Invalid dateTime format","errorCode":"GSOBJ_1006","fieldName":"OriginalContractDate","invalidValue":210318}]}]],"records":null},"message":null},"status":400}}', + statTags: { + destType: 'GAINSIGHT', + errorCategory: 'network', + errorType: 'aborted', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, ]; From 185b7721266b49e86f485d5737d513585d62930c Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Fri, 21 Jun 2024 13:04:21 +0530 Subject: [PATCH 009/201] chore: refactor code to remove duplication --- src/v0/destinations/gainsight/util.js | 36 ++++++++++++++++----------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index 8f35762a38..d89d022f0d 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -11,6 +11,21 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); const { handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util'); +const throwNetworkError = (errMsg, status, response) => { + throw new NetworkError( + errMsg, + status, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + response, + ); +}; + +const throwRetryableError = (errMsg, response) => { + throw new RetryableError(errMsg, 500, response); +}; + const searchGroup = async (groupName, Config) => { const { processedResponse } = await handleHttpRequest( 'post', @@ -32,18 +47,15 @@ const searchGroup = async (groupName, Config) => { ); if (!isHttpStatusSuccess(processedResponse.status)) { - throw new NetworkError( + throwNetworkError( `failed to search group ${JSON.stringify(processedResponse.response)}`, processedResponse.status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), - }, processedResponse, ); } if (!processedResponse?.response || processedResponse.status !== 200) { - throw new RetryableError('failed to search group', 500, processedResponse); + throwRetryableError('failed to search group', processedResponse); } return processedResponse.response; @@ -72,18 +84,15 @@ const createGroup = async (payload, Config) => { ); if (!isHttpStatusSuccess(processedResponse.status)) { - throw new NetworkError( + throwNetworkError( `failed to create group ${JSON.stringify(processedResponse.response)}`, processedResponse.status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), - }, processedResponse, ); } if (!processedResponse?.response || processedResponse.status !== 200) { - throw new RetryableError('failed to create group', 500, processedResponse); + throwRetryableError('failed to create group', processedResponse); } return processedResponse.response.data.records[0].Gsid; @@ -115,18 +124,15 @@ const updateGroup = async (payload, Config) => { ); if (!isHttpStatusSuccess(processedResponse.status)) { - throw new NetworkError( + throwNetworkError( `failed to update group ${JSON.stringify(processedResponse.response)}`, processedResponse.status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(processedResponse.status), - }, processedResponse, ); } if (!processedResponse?.response || processedResponse.status !== 200) { - throw new RetryableError('failed to update group', 500, processedResponse); + throwRetryableError('failed to update group', processedResponse); } return processedResponse.response.data.records[0].Gsid; From 3bac0e02f9d8289106d5dbdd83ff2ca48fba0a62 Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Tue, 25 Jun 2024 11:12:33 +0530 Subject: [PATCH 010/201] chore: upgrade packages --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e567d7271..10cb865d16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.15.0", - "@rudderstack/workflow-engine": "^0.8.9", + "@rudderstack/json-template-engine": "^0.16.0", + "@rudderstack/workflow-engine": "^0.8.10", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -4526,17 +4526,17 @@ } }, "node_modules/@rudderstack/json-template-engine": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.15.0.tgz", - "integrity": "sha512-RDBCn4oYvDjWhIEuV3d8QHmdTcFUyVbpBFxtRwOb1U7zSpTZ8H74/wxBG661ayN2psFh7UJYzZENju7cLWpFTw==" + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.16.0.tgz", + "integrity": "sha512-gcaaDdLFebEH/SbUCiBQw7CJ9O82ck8JR6BKo3V4+o+6fNFR/YIMiTPtaSO+xIUmbh60slZ+AMggBIMxInx8fQ==" }, "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.9.tgz", - "integrity": "sha512-4PxiXUeJ6ulhdlS7MHB6zPV6fdRVZZ0EDnl5fRbu7gDq1h4h32t5T44RwXjLbyupuu/vsPshkBNoEpo+heUBqg==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.10.tgz", + "integrity": "sha512-CBEJE5AgopHvaX+8HFWb2dtVlr1AXMxZa3Zl45TzZdWCc/IxwjL3JHMv6tPRkxAHM3xuY7TEhFpV61wAUaFOTA==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.15.0", + "@rudderstack/json-template-engine": "^0.16.0", "jsonata": "^2.0.5", "lodash": "^4.17.21", "object-sizeof": "^2.6.4", diff --git a/package.json b/package.json index 96ec42b79c..894b6cb4ae 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.15.0", - "@rudderstack/workflow-engine": "^0.8.9", + "@rudderstack/json-template-engine": "^0.16.0", + "@rudderstack/workflow-engine": "^0.8.10", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", From f1141ff75b3cf768c994b019d7a5cb526705d81c Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Tue, 25 Jun 2024 15:31:06 +0530 Subject: [PATCH 011/201] chore: refactor code to remove duplication --- src/v0/destinations/gainsight/util.js | 79 +++++++++++++-------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index d89d022f0d..8ed9083238 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -26,26 +26,38 @@ const throwRetryableError = (errMsg, response) => { throw new RetryableError(errMsg, 500, response); }; -const searchGroup = async (groupName, Config) => { - const { processedResponse } = await handleHttpRequest( - 'post', - `${ENDPOINTS.groupSearchEndpoint(Config.domain)}`, - getLookupPayload(groupName), +const makeHttpRequest = async ({ method, url, payload, config, statTags, options = {} }) => handleHttpRequest( + method, + url, + payload, { headers: { - Accesskey: Config.accessKey, + Accesskey: config.accessKey, 'Content-Type': JSON_MIME_TYPE, }, + ...options, }, { destType: 'gainsight', feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/data/objects/query/Company', + requestMethod: method.toUpperCase(), + endpointPath: url, module: 'router', + ...statTags, }, ); +const searchGroup = async (groupName, Config) => { + const { processedResponse } = await makeHttpRequest({ + method: 'post', + url: `${ENDPOINTS.groupSearchEndpoint(Config.domain)}`, + payload: getLookupPayload(groupName), + config: Config, + statTags: { + endpointPath: '/data/objects/query/Company', + }, + }); + if (!isHttpStatusSuccess(processedResponse.status)) { throwNetworkError( `failed to search group ${JSON.stringify(processedResponse.response)}`, @@ -62,26 +74,17 @@ const searchGroup = async (groupName, Config) => { }; const createGroup = async (payload, Config) => { - const { processedResponse } = await handleHttpRequest( - 'post', - `${ENDPOINTS.groupCreateEndpoint(Config.domain)}`, - { + const { processedResponse } = await makeHttpRequest({ + method: 'post', + url: `${ENDPOINTS.groupCreateEndpoint(Config.domain)}`, + payload: { records: [payload], }, - { - headers: { - Accesskey: Config.accessKey, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'gainsight', - feature: 'transformation', - requestMethod: 'POST', + config: Config, + options: { endpointPath: '/data/objects/Company', - module: 'router', }, - ); + }); if (!isHttpStatusSuccess(processedResponse.status)) { throwNetworkError( @@ -99,29 +102,23 @@ const createGroup = async (payload, Config) => { }; const updateGroup = async (payload, Config) => { - const { processedResponse } = await handleHttpRequest( - 'put', - `${ENDPOINTS.groupUpdateEndpoint(Config.domain)}`, - { + const { processedResponse } = await makeHttpRequest({ + method: 'put', + url: `${ENDPOINTS.groupUpdateEndpoint(Config.domain)}`, + payload: { records: [payload], }, - { - headers: { - Accesskey: Config.accessKey, - 'Content-Type': JSON_MIME_TYPE, - }, + config: Config, + options: { + endpointPath: '/data/objects/Company', + }, + + statTags: { params: { keys: 'Name', }, }, - { - destType: 'gainsight', - feature: 'transformation', - requestMethod: 'PUT', - endpointPath: '/data/objects/Company', - module: 'router', - }, - ); + }); if (!isHttpStatusSuccess(processedResponse.status)) { throwNetworkError( From 11c6f994a50969073ac9c41eec6cb31f63ff2a20 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Tue, 25 Jun 2024 16:04:37 +0530 Subject: [PATCH 012/201] chore: add reset merics api + periodic metrics reset --- src/routes/metricsRouter.js | 10 ++++++++ src/util/cluster.js | 31 +++++++++++++----------- src/util/metricsAggregator.js | 44 +++++++++++++++++++++++++++++++++++ src/util/prometheus.js | 13 +++++++++-- src/util/stats.js | 23 +++++++++++++++--- 5 files changed, 102 insertions(+), 19 deletions(-) diff --git a/src/routes/metricsRouter.js b/src/routes/metricsRouter.js index 757d88edde..1556d89c8f 100644 --- a/src/routes/metricsRouter.js +++ b/src/routes/metricsRouter.js @@ -16,6 +16,16 @@ if (enableStats) { ctx.body = error.message; } }); + + metricsRouter.get('/resetMetrics', async (ctx) => { + try { + await stats.resetMetricsController(ctx); + } catch (error) { + logger.error(error); + ctx.status = 400; + ctx.body = error.message; + } + }); } module.exports = { metricsRouter }; diff --git a/src/util/cluster.js b/src/util/cluster.js index 4a1a5a3e29..84537fcfdc 100644 --- a/src/util/cluster.js +++ b/src/util/cluster.js @@ -3,7 +3,7 @@ const gracefulShutdown = require('http-graceful-shutdown'); const logger = require('../logger'); const { logProcessInfo } = require('./utils'); const { RedisDB } = require('./redis/redisConnector'); -const { terminateWorkerThread } = require('./stats'); +const { shutdownMetricsClient } = require('./stats'); const numWorkers = parseInt(process.env.NUM_PROCS || '1', 10); const metricsPort = parseInt(process.env.METRICS_PORT || '9091', 10); @@ -19,14 +19,14 @@ function finalFunction() { // This function works only in master. // It sends SIGTERM to all the workers -function shutdownWorkers() { +async function shutdownWorkers() { Object.values(cluster.workers).forEach((worker) => { process.kill(worker.process.pid); logger.error(`Sent kill signal to worker ${worker.id} (pid: ${worker.process.pid})`); }); // TODO: find a better way to terminate worker thread, this is a temporary hack // ideally we should put a await here, we will fix this in future - terminateWorkerThread(); + await shutdownMetricsClient(); } function start(port, app, metricsApp) { @@ -55,35 +55,35 @@ function start(port, app, metricsApp) { }); let isShuttingDown = false; - cluster.on('exit', (worker) => { + cluster.on('exit', async (worker) => { if (!isShuttingDown) { logger.error(`Worker (pid: ${worker.process.pid}) died`); logger.error(`Killing other workers to avoid any side effects of the dead worker`); logProcessInfo(); isShuttingDown = true; - shutdownWorkers(); + await shutdownWorkers(); } }); - process.on('SIGTERM', () => { + process.on('SIGTERM', async () => { logger.error('SIGTERM signal received. Closing workers...'); logProcessInfo(); isShuttingDown = true; - shutdownWorkers(); + await shutdownWorkers(); }); - process.on('SIGINT', () => { + process.on('SIGINT', async () => { logger.error('SIGINT signal received. Closing workers...'); logProcessInfo(); isShuttingDown = true; - shutdownWorkers(); + await shutdownWorkers(); }); - process.on('SIGSEGV', () => { + process.on('SIGSEGV', async () => { logger.error('SIGSEGV - JavaScript memory error occurred. Closing workers...'); logProcessInfo(); isShuttingDown = true; - shutdownWorkers(); + await shutdownWorkers(); }); } else { const server = app.listen(port); @@ -94,16 +94,19 @@ function start(port, app, metricsApp) { finally: finalFunction, }); - process.on('SIGTERM', () => { + process.on('SIGTERM', async () => { logger.error(`SIGTERM signal received in the worker`); + await shutdownMetricsClient(); }); - process.on('SIGINT', () => { + process.on('SIGINT', async () => { logger.error(`SIGINT signal received in the worker`); + await shutdownMetricsClient(); }); - process.on('SIGSEGV', () => { + process.on('SIGSEGV', async () => { logger.error(`SIGSEGV - JavaScript memory error occurred in the worker`); + await shutdownMetricsClient(); }); logger.info(`Worker (pid: ${process.pid}) has started`); diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index 574bf64558..0926401af6 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -6,6 +6,13 @@ const GET_METRICS_REQ = 'rudder-transformer:getMetricsReq'; const GET_METRICS_RES = 'rudder-transformer:getMetricsRes'; const AGGREGATE_METRICS_REQ = 'rudder-transformer:aggregateMetricsReq'; const AGGREGATE_METRICS_RES = 'rudder-transformer:aggregateMetricsRes'; +const RESET_METRICS_REQUEST = 'rudder-transformer:resetMetricsReq'; +const METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED = + process.env.METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED === 'true'; +const METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS = process.env + .METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS + ? parseInt(process.env.METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS, 10) + : 30 * 60; class MetricsAggregator { constructor(prometheusInstance) { @@ -27,6 +34,10 @@ class MetricsAggregator { await this.handleMetricsResponse(message); } }); + // register callback to reset metrics if enabled + if (METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED) { + this.registerCallbackForPeriodicReset(METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS); + } return; } // register callback for worker process @@ -39,10 +50,26 @@ class MetricsAggregator { } catch (error) { cluster.worker.send({ type: GET_METRICS_RES, error: error.message }); } + } else if (message.type === RESET_METRICS_REQUEST) { + logger.info( + `[MetricsAggregator] Worker ${cluster.worker.id} received reset metrics request`, + ); + this.prometheusInstance.prometheusRegistry.resetMetrics(); + logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} reset metrics successfully`); } }); } + registerCallbackForPeriodicReset(intervalSeconds) { + // store the timer in the aggregator for future operations like shutdown + this.periodicResetTimer = setInterval(() => { + logger.info( + `[MetricsAggregator] Periodic reset interval of ${intervalSeconds} seconds expired, reseting metrics`, + ); + this.resetMetrics(); + }, intervalSeconds * 1000); + } + createWorkerThread() { if (cluster.isPrimary && isMainThread) { this.workerThread = new Worker('./src/util/worker.js'); @@ -118,6 +145,23 @@ class MetricsAggregator { `[MetricsAggregator] Worker thread terminated with exit code ${await this.workerThread.terminate()}`, ); } + + resetMetrics() { + for (const id in cluster.workers) { + logger.info(`[MetricsAggregator] Resetting metrics for worker ${id}`); + cluster.workers[id].send({ type: RESET_METRICS_REQUEST }); + } + } + + async shutdown() { + // terminate worker thread if the current process is the master + if (cluster.isPrimary) { + await this.terminateWorkerThread(); + } + if (this.periodicResetTimer) { + clearInterval(this.periodicResetTimer); + } + } } module.exports = { MetricsAggregator, AGGREGATE_METRICS_REQ, AGGREGATE_METRICS_RES }; diff --git a/src/util/prometheus.js b/src/util/prometheus.js index eb75c1a415..60b0e922b1 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -46,6 +46,15 @@ class Prometheus { return ctx.body; } + async resetMetricsController(ctx) { + ctx.status = 200; + if (clusterEnabled && useMetricsAggregator) { + this.metricsAggregator.resetMetrics(); + } + ctx.body = 'Metrics reset'; + return ctx.body; + } + newCounterStat(name, help, labelNames) { const counter = new prometheusClient.Counter({ name, @@ -202,9 +211,9 @@ class Prometheus { } } - async terminateWorkerThread() { + async shutdown() { if (this.metricsAggregator) { - await this.metricsAggregator.terminateWorkerThread(); + await this.metricsAggregator.shutdown(); } } diff --git a/src/util/stats.js b/src/util/stats.js index 301857dee0..36a95ee1ed 100644 --- a/src/util/stats.js +++ b/src/util/stats.js @@ -97,13 +97,29 @@ async function metricsController(ctx) { ctx.body = `Not supported`; } -async function terminateWorkerThread() { +async function resetMetricsController(ctx) { + if (!enableStats || !statsClient) { + ctx.status = 404; + ctx.body = `Not supported`; + return; + } + + if (statsClientType === 'prometheus') { + await statsClient.resetMetricsController(ctx); + return; + } + + ctx.status = 404; + ctx.body = `Not supported`; +} + +async function shutdownMetricsClient() { if (!enableStats || !statsClient) { return; } if (statsClientType === 'prometheus') { - await statsClient.terminateWorkerThread(); + await statsClient.shutdown(); } } @@ -118,5 +134,6 @@ module.exports = { gauge, histogram, metricsController, - terminateWorkerThread, + resetMetricsController, + shutdownMetricsClient, }; From f015cbc1034a84ad97f95080cab3190c9e80fe11 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Tue, 25 Jun 2024 17:00:18 +0530 Subject: [PATCH 013/201] chore: fix lint error --- src/v0/destinations/gainsight/util.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index 8ed9083238..a035da6993 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -26,7 +26,8 @@ const throwRetryableError = (errMsg, response) => { throw new RetryableError(errMsg, 500, response); }; -const makeHttpRequest = async ({ method, url, payload, config, statTags, options = {} }) => handleHttpRequest( +const makeHttpRequest = async ({ method, url, payload, config, statTags, options = {} }) => + handleHttpRequest( method, url, payload, From 847c944ad3fe47e7efda07d363576e64c48c9e5b Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Fri, 28 Jun 2024 21:24:16 +0530 Subject: [PATCH 014/201] chore: add tests for metrics aggregator --- test/__tests__/metricsAggregator.test.js | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/__tests__/metricsAggregator.test.js diff --git a/test/__tests__/metricsAggregator.test.js b/test/__tests__/metricsAggregator.test.js new file mode 100644 index 0000000000..80c10268b1 --- /dev/null +++ b/test/__tests__/metricsAggregator.test.js @@ -0,0 +1,26 @@ +const { MetricsAggregator } = require('../../src/util/metricsAggregator'); +const { Worker } = require('worker_threads'); +jest.mock('cluster'); +const cluster = require('cluster'); + +describe('MetricsAggregator', () => { + it('should create a worker thread and register callbacks on creation', async () => { + const clusterOnSpy = jest.spyOn(cluster, 'on'); + const metricsAggregator = new MetricsAggregator(); + // check if the worker thread is a an instance of a worker + expect(metricsAggregator.workerThread).toBeInstanceOf(Worker); + // check if the cluster.on method was called with the right arguments + expect(clusterOnSpy).toHaveBeenCalledWith('message', expect.any(Function)); + await metricsAggregator.shutdown(); + }); + + it('periodic reset should reset metrics', async () => { + jest.useFakeTimers(); + const metricsAggregator = new MetricsAggregator(); + const resetMetricsSpy = jest.spyOn(metricsAggregator, 'resetMetrics'); + metricsAggregator.registerCallbackForPeriodicReset(1); + jest.advanceTimersByTime(1000); + expect(resetMetricsSpy).toHaveBeenCalled(); + await metricsAggregator.shutdown(); + }); +}); From 396fa484641a910e5a6f8654f74a22e7cf3a5a0d Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi <43755122+dhawal1248@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:58:26 +0530 Subject: [PATCH 015/201] chore: remove high cardinality histogram metrics for UT (#3515) * chore: remove high cardinality histogram metrics for UT * chore: remove high cardinality histogram metrics for UT --- src/legacy/router.js | 1 - src/services/userTransform.ts | 10 -------- src/util/customTransformer-v1.js | 1 - src/util/customTransformer.js | 1 - src/util/openfaas/index.js | 1 - src/util/prometheus.js | 44 -------------------------------- 6 files changed, 58 deletions(-) diff --git a/src/legacy/router.js b/src/legacy/router.js index 043e37b66d..6cf035350c 100644 --- a/src/legacy/router.js +++ b/src/legacy/router.js @@ -644,7 +644,6 @@ if (startDestTransformer) { ctx.status = ctxStatusCode; ctx.set('apiVersion', API_VERSION); - stats.timing('user_transform_request_latency', startTime, {}); stats.timingSummary('user_transform_request_latency_summary', startTime, {}); stats.increment('user_transform_requests', {}); stats.histogram('user_transform_output_events', transformedEvents.length, {}); diff --git a/src/services/userTransform.ts b/src/services/userTransform.ts index 83e0c807d6..d526eed3a9 100644 --- a/src/services/userTransform.ts +++ b/src/services/userTransform.ts @@ -170,16 +170,6 @@ export class UserTransformService { ...getTransformationMetadata(eventsToProcess[0]?.metadata), }); } finally { - stats.timing('user_transform_request_latency', userFuncStartTime, { - ...metaTags, - ...getTransformationMetadata(eventsToProcess[0]?.metadata), - }); - - stats.timing('user_transform_batch_size', requestSize, { - ...metaTags, - ...getTransformationMetadata(eventsToProcess[0]?.metadata), - }); - stats.timingSummary('user_transform_request_latency_summary', userFuncStartTime, { ...metaTags, ...getTransformationMetadata(eventsToProcess[0]?.metadata), diff --git a/src/util/customTransformer-v1.js b/src/util/customTransformer-v1.js index 12dab547e6..dc9306681b 100644 --- a/src/util/customTransformer-v1.js +++ b/src/util/customTransformer-v1.js @@ -98,7 +98,6 @@ async function userTransformHandlerV1( ...(events.length && events[0].metadata ? getTransformationMetadata(events[0].metadata) : {}), }; stats.counter('user_transform_function_input_events', events.length, tags); - stats.timing('user_transform_function_latency', invokeTime, tags); stats.timingSummary('user_transform_function_latency_summary', invokeTime, tags); } diff --git a/src/util/customTransformer.js b/src/util/customTransformer.js index 5ca1fae47c..3fcc8e531f 100644 --- a/src/util/customTransformer.js +++ b/src/util/customTransformer.js @@ -259,7 +259,6 @@ async function runUserTransform( }; stats.counter('user_transform_function_input_events', events.length, tags); - stats.timing('user_transform_function_latency', invokeTime, tags); stats.timingSummary('user_transform_function_latency_summary', invokeTime, tags); } diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index c0369deb81..ac072c4599 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -379,7 +379,6 @@ const executeFaasFunction = async ( }; stats.counter('user_transform_function_input_events', events.length, tags); - stats.timing('user_transform_function_latency', startTime, tags); stats.timingSummary('user_transform_function_latency_summary', startTime, tags); } }; diff --git a/src/util/prometheus.js b/src/util/prometheus.js index 860c266565..c4b92e9b3c 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -839,34 +839,6 @@ class Prometheus { ], }, // histogram - { - name: 'user_transform_request_latency', - help: 'user_transform_request_latency', - type: 'histogram', - labelNames: [ - 'workspaceId', - 'transformationId', - 'sourceType', - 'destinationType', - 'k8_namespace', - ], - }, - { - name: 'user_transform_batch_size', - help: 'user_transform_batch_size', - type: 'histogram', - labelNames: [ - 'workspaceId', - 'transformationId', - 'sourceType', - 'destinationType', - 'k8_namespace', - ], - buckets: [ - 1024, 102400, 524288, 1048576, 10485760, 20971520, 52428800, 104857600, 209715200, - 524288000, - ], // 1KB, 100KB, 0.5MB, 1MB, 10MB, 20MB, 50MB, 100MB, 200MB, 500MB - }, { name: 'creation_time', help: 'creation_time', @@ -917,22 +889,6 @@ class Prometheus { labelNames: [], buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 200], }, - { - name: 'user_transform_function_latency', - help: 'user_transform_function_latency', - type: 'histogram', - labelNames: [ - 'identifier', - 'testMode', - 'sourceType', - 'destinationType', - 'k8_namespace', - 'errored', - 'statusCode', - 'transformationId', - 'workspaceId', - ], - }, // summary { name: 'user_transform_request_latency_summary', From dbcaf71798583819dcc0eca325521f6e264532f9 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Sat, 29 Jun 2024 00:25:40 +0530 Subject: [PATCH 016/201] chore: add test for metric aggregation --- src/util/metricsAggregator.js | 58 ++++++++++++++---------- test/__tests__/metricsAggregator.test.js | 56 ++++++++++++++++++++++- 2 files changed, 89 insertions(+), 25 deletions(-) diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index 0926401af6..7d5a781edd 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -25,15 +25,35 @@ class MetricsAggregator { this.registerCallbacks(); } + // onWorkerMessage is called when the master receives a message from a worker + async onWorkerMessage(worker, message) { + if (message.type === GET_METRICS_RES) { + logger.debug(`[MetricsAggregator] Master received metrics from worker ${worker.id}`); + await this.handleMetricsResponse(message); + } + } + + // onMasterMessage is called when a worker receives a message from the master + async onMasterMessage(message) { + if (message.type === GET_METRICS_REQ) { + logger.debug(`[MetricsAggregator] Worker ${cluster.worker.id} received metrics request`); + try { + const metrics = await this.prometheusInstance.prometheusRegistry.getMetricsAsJSON(); + cluster.worker.send({ type: GET_METRICS_RES, metrics }); + } catch (error) { + cluster.worker.send({ type: GET_METRICS_RES, error: error.message }); + } + } else if (message.type === RESET_METRICS_REQUEST) { + logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} received reset metrics request`); + this.prometheusInstance.prometheusRegistry.resetMetrics(); + logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} reset metrics successfully`); + } + } + registerCallbacks() { if (cluster.isPrimary) { // register callback for master process - cluster.on('message', async (worker, message) => { - if (message.type === GET_METRICS_RES) { - logger.debug(`[MetricsAggregator] Master received metrics from worker ${worker.id}`); - await this.handleMetricsResponse(message); - } - }); + cluster.on('message', this.onWorkerMessage.bind(this)); // register callback to reset metrics if enabled if (METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED) { this.registerCallbackForPeriodicReset(METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS); @@ -41,23 +61,7 @@ class MetricsAggregator { return; } // register callback for worker process - cluster.worker.on('message', async (message) => { - if (message.type === GET_METRICS_REQ) { - logger.debug(`[MetricsAggregator] Worker ${cluster.worker.id} received metrics request`); - try { - const metrics = await this.prometheusInstance.prometheusRegistry.getMetricsAsJSON(); - cluster.worker.send({ type: GET_METRICS_RES, metrics }); - } catch (error) { - cluster.worker.send({ type: GET_METRICS_RES, error: error.message }); - } - } else if (message.type === RESET_METRICS_REQUEST) { - logger.info( - `[MetricsAggregator] Worker ${cluster.worker.id} received reset metrics request`, - ); - this.prometheusInstance.prometheusRegistry.resetMetrics(); - logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} reset metrics successfully`); - } - }); + cluster.worker.on('message', this.onMasterMessage.bind(this)); } registerCallbackForPeriodicReset(intervalSeconds) { @@ -164,4 +168,10 @@ class MetricsAggregator { } } -module.exports = { MetricsAggregator, AGGREGATE_METRICS_REQ, AGGREGATE_METRICS_RES }; +module.exports = { + MetricsAggregator, + GET_METRICS_REQ, + GET_METRICS_RES, + AGGREGATE_METRICS_REQ, + AGGREGATE_METRICS_RES, +}; diff --git a/test/__tests__/metricsAggregator.test.js b/test/__tests__/metricsAggregator.test.js index 80c10268b1..c0265c99c7 100644 --- a/test/__tests__/metricsAggregator.test.js +++ b/test/__tests__/metricsAggregator.test.js @@ -1,4 +1,4 @@ -const { MetricsAggregator } = require('../../src/util/metricsAggregator'); +const { MetricsAggregator, AGGREGATE_METRICS_REQ, GET_METRICS_REQ, GET_METRICS_RES } = require('../../src/util/metricsAggregator'); const { Worker } = require('worker_threads'); jest.mock('cluster'); const cluster = require('cluster'); @@ -23,4 +23,58 @@ describe('MetricsAggregator', () => { expect(resetMetricsSpy).toHaveBeenCalled(); await metricsAggregator.shutdown(); }); + + it('should collect metrics from all workers and aggregate them', async () => { + // mock the getMetricsAsJSON method to return a single metric + const mockGetMetricsAsJSON = jest.fn().mockImplementation(() => { + return [{ + help: "Total user CPU time spent in seconds.", + name: "process_cpu_user_seconds_total", + type: "counter", + values: [ + { + value: 1, + labels: { + instanceName: "localhost", + }, + }, + ], + aggregator: "sum", + }]; + }); + + // mock master's send - this functions simulates worker -> master communication + // mockMasterSend(workerId) returns a function that simulates sending a message from a worker to the master + // workerId is used to mark which worker sent the message + const mockMasterSend = (workerId) => jest.fn().mockImplementation((message) => { + metricsAggregator.onWorkerMessage({ id: workerId }, message); + }); + + // mock worker's send - this functions simulates master -> worker communication + // mockSendForWorker(workerId) returns a function that simulates sending a message from the master to a worker + // workerId is used to mark which worker to send the message to + const mockSendForWorker = (workerId) => jest.fn().mockImplementation((message) => { + // set the cluster.worker object so that the worker can use it to send a message to the master + cluster.worker = { id: workerId, send: mockMasterSend(workerId) }; + metricsAggregator.onMasterMessage(message); + }); + // the functions above are used to simulate the communication between the master and the workers + + // set cluster.workers object to simulate multiple workers + cluster.workers = { + 1: { send: mockSendForWorker(1) }, + 2: { send: mockSendForWorker(2) }, + 3: { send: mockSendForWorker(3) }, + 4: { send: mockSendForWorker(4) }, + }; + + // create metrics aggregator + const metricsAggregator = new MetricsAggregator({ prometheusRegistry: {getMetricsAsJSON: mockGetMetricsAsJSON}}); + // start metric aggregation + const metrics = await metricsAggregator.aggregateMetrics(); + // check if the metrics are aggregated correctly + expect(metrics).toMatch(`process_cpu_user_seconds_total\{instanceName="localhost"\} ${Object.keys(cluster.workers).length}`); + // shutdown the metrics aggregator + await metricsAggregator.shutdown(); + }); }); From 854df31a3893901e757524aca07134689fa5b6e0 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Sat, 29 Jun 2024 00:45:56 +0530 Subject: [PATCH 017/201] chore: code cleanup + refactor --- src/util/cluster.js | 2 -- src/util/metricsAggregator.js | 38 +++++++++++++----------- src/util/stats.js | 2 +- src/util/worker.js | 8 ++--- test/__tests__/metricsAggregator.test.js | 2 +- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/util/cluster.js b/src/util/cluster.js index 84537fcfdc..b9b86cd3c6 100644 --- a/src/util/cluster.js +++ b/src/util/cluster.js @@ -24,8 +24,6 @@ async function shutdownWorkers() { process.kill(worker.process.pid); logger.error(`Sent kill signal to worker ${worker.id} (pid: ${worker.process.pid})`); }); - // TODO: find a better way to terminate worker thread, this is a temporary hack - // ideally we should put a await here, we will fix this in future await shutdownMetricsClient(); } diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index 7d5a781edd..99a6a733ef 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -2,11 +2,13 @@ const cluster = require('cluster'); const logger = require('../logger'); const { Worker, isMainThread } = require('worker_threads'); -const GET_METRICS_REQ = 'rudder-transformer:getMetricsReq'; -const GET_METRICS_RES = 'rudder-transformer:getMetricsRes'; -const AGGREGATE_METRICS_REQ = 'rudder-transformer:aggregateMetricsReq'; -const AGGREGATE_METRICS_RES = 'rudder-transformer:aggregateMetricsRes'; -const RESET_METRICS_REQUEST = 'rudder-transformer:resetMetricsReq'; +const MESSAGE_TYPES = { + GET_METRICS_REQ: 'rudder-transformer:getMetricsReq', + GET_METRICS_RES: 'rudder-transformer:getMetricsRes', + AGGREGATE_METRICS_REQ: 'rudder-transformer:aggregateMetricsReq', + AGGREGATE_METRICS_RES: 'rudder-transformer:aggregateMetricsRes', + RESET_METRICS_REQ: 'rudder-transformer:resetMetricsReq', +}; const METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED = process.env.METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED === 'true'; const METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS = process.env @@ -27,7 +29,7 @@ class MetricsAggregator { // onWorkerMessage is called when the master receives a message from a worker async onWorkerMessage(worker, message) { - if (message.type === GET_METRICS_RES) { + if (message.type === MESSAGE_TYPES.GET_METRICS_RES) { logger.debug(`[MetricsAggregator] Master received metrics from worker ${worker.id}`); await this.handleMetricsResponse(message); } @@ -35,15 +37,15 @@ class MetricsAggregator { // onMasterMessage is called when a worker receives a message from the master async onMasterMessage(message) { - if (message.type === GET_METRICS_REQ) { + if (message.type === MESSAGE_TYPES.GET_METRICS_REQ) { logger.debug(`[MetricsAggregator] Worker ${cluster.worker.id} received metrics request`); try { const metrics = await this.prometheusInstance.prometheusRegistry.getMetricsAsJSON(); - cluster.worker.send({ type: GET_METRICS_RES, metrics }); + cluster.worker.send({ type: MESSAGE_TYPES.GET_METRICS_RES, metrics }); } catch (error) { - cluster.worker.send({ type: GET_METRICS_RES, error: error.message }); + cluster.worker.send({ type: MESSAGE_TYPES.GET_METRICS_RES, error: error.message }); } - } else if (message.type === RESET_METRICS_REQUEST) { + } else if (message.type === MESSAGE_TYPES.RESET_METRICS_REQ) { logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} received reset metrics request`); this.prometheusInstance.prometheusRegistry.resetMetrics(); logger.info(`[MetricsAggregator] Worker ${cluster.worker.id} reset metrics successfully`); @@ -82,7 +84,7 @@ class MetricsAggregator { ); this.workerThread.on('message', (message) => { - if ((message.type = AGGREGATE_METRICS_RES)) { + if (message.type === MESSAGE_TYPES.AGGREGATE_METRICS_RES) { if (message.error) { this.rejectFunc(new Error(message.error)); this.resetAggregator(); @@ -122,13 +124,16 @@ class MetricsAggregator { for (const id in cluster.workers) { this.pendingMetricRequests++; logger.debug(`[MetricsAggregator] Requesting metrics from worker ${id}`); - cluster.workers[id].send({ type: GET_METRICS_REQ }); + cluster.workers[id].send({ type: MESSAGE_TYPES.GET_METRICS_REQ }); } }); } async aggregateMetricsInWorkerThread() { - this.workerThread.postMessage({ type: AGGREGATE_METRICS_REQ, metrics: this.metricsBuffer }); + this.workerThread.postMessage({ + type: MESSAGE_TYPES.AGGREGATE_METRICS_REQ, + metrics: this.metricsBuffer, + }); } async handleMetricsResponse(message) { @@ -153,7 +158,7 @@ class MetricsAggregator { resetMetrics() { for (const id in cluster.workers) { logger.info(`[MetricsAggregator] Resetting metrics for worker ${id}`); - cluster.workers[id].send({ type: RESET_METRICS_REQUEST }); + cluster.workers[id].send({ type: MESSAGE_TYPES.RESET_METRICS_REQ }); } } @@ -170,8 +175,5 @@ class MetricsAggregator { module.exports = { MetricsAggregator, - GET_METRICS_REQ, - GET_METRICS_RES, - AGGREGATE_METRICS_REQ, - AGGREGATE_METRICS_RES, + MESSAGE_TYPES, }; diff --git a/src/util/stats.js b/src/util/stats.js index 36a95ee1ed..4fba4b1bfb 100644 --- a/src/util/stats.js +++ b/src/util/stats.js @@ -99,7 +99,7 @@ async function metricsController(ctx) { async function resetMetricsController(ctx) { if (!enableStats || !statsClient) { - ctx.status = 404; + ctx.status = 501; ctx.body = `Not supported`; return; } diff --git a/src/util/worker.js b/src/util/worker.js index 97afc05509..d1b7b24d96 100644 --- a/src/util/worker.js +++ b/src/util/worker.js @@ -1,15 +1,15 @@ /* eslint-disable */ const { parentPort } = require('worker_threads'); -const { AGGREGATE_METRICS_REQ, AGGREGATE_METRICS_RES } = require('./metricsAggregator'); +const { MESSAGE_TYPES } = require('./metricsAggregator'); const { AggregatorRegistry } = require('prom-client'); parentPort.on('message', async (message) => { - if ((message.type = AGGREGATE_METRICS_REQ)) { + if ((message.type = MESSAGE_TYPES.AGGREGATE_METRICS_REQ)) { try { const promString = await AggregatorRegistry.aggregate(message.metrics).metrics(); - parentPort.postMessage({ type: AGGREGATE_METRICS_RES, metrics: promString }); + parentPort.postMessage({ type: MESSAGE_TYPES.AGGREGATE_METRICS_RES, metrics: promString }); } catch (error) { - parentPort.postMessage({ type: AGGREGATE_METRICS_RES, error: error.message }); + parentPort.postMessage({ type: MESSAGE_TYPES.AGGREGATE_METRICS_RES, error: error.message }); } } }); diff --git a/test/__tests__/metricsAggregator.test.js b/test/__tests__/metricsAggregator.test.js index c0265c99c7..28cdd4ad9d 100644 --- a/test/__tests__/metricsAggregator.test.js +++ b/test/__tests__/metricsAggregator.test.js @@ -1,4 +1,4 @@ -const { MetricsAggregator, AGGREGATE_METRICS_REQ, GET_METRICS_REQ, GET_METRICS_RES } = require('../../src/util/metricsAggregator'); +const { MetricsAggregator } = require('../../src/util/metricsAggregator'); const { Worker } = require('worker_threads'); jest.mock('cluster'); const cluster = require('cluster'); From 12e46f8b64a649401060c2083a99279335632109 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Sat, 29 Jun 2024 00:59:18 +0530 Subject: [PATCH 018/201] chore: code cleanup + refactor --- src/util/metricsAggregator.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/util/metricsAggregator.js b/src/util/metricsAggregator.js index 99a6a733ef..68f10d30fa 100644 --- a/src/util/metricsAggregator.js +++ b/src/util/metricsAggregator.js @@ -2,6 +2,7 @@ const cluster = require('cluster'); const logger = require('../logger'); const { Worker, isMainThread } = require('worker_threads'); + const MESSAGE_TYPES = { GET_METRICS_REQ: 'rudder-transformer:getMetricsReq', GET_METRICS_RES: 'rudder-transformer:getMetricsRes', @@ -9,12 +10,13 @@ const MESSAGE_TYPES = { AGGREGATE_METRICS_RES: 'rudder-transformer:aggregateMetricsRes', RESET_METRICS_REQ: 'rudder-transformer:resetMetricsReq', }; -const METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED = - process.env.METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED === 'true'; -const METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS = process.env - .METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS - ? parseInt(process.env.METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS, 10) - : 30 * 60; + +const config = { + isPeriodicResetEnabled: process.env.METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED === 'true', + periodicResetInterval: process.env.METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS + ? parseInt(process.env.METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS, 10) + : 30 * 60, +}; class MetricsAggregator { constructor(prometheusInstance) { @@ -56,9 +58,9 @@ class MetricsAggregator { if (cluster.isPrimary) { // register callback for master process cluster.on('message', this.onWorkerMessage.bind(this)); - // register callback to reset metrics if enabled - if (METRICS_AGGREGATOR_PERIODIC_RESET_ENABLED) { - this.registerCallbackForPeriodicReset(METRICS_AGGREGATOR_PERIODIC_RESET_INTERVAL_SECONDS); + if (config.isPeriodicResetEnabled) { + // register callback to reset metrics if enabled + this.registerCallbackForPeriodicReset(config.periodicResetInterval); } return; } From e33b25953b64642fc35a491101c255aa12377f6b Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Sat, 29 Jun 2024 01:06:59 +0530 Subject: [PATCH 019/201] chore: respond with 501 if reset metrics is not implemented --- src/util/stats.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/stats.js b/src/util/stats.js index 4fba4b1bfb..eeab36752d 100644 --- a/src/util/stats.js +++ b/src/util/stats.js @@ -109,7 +109,7 @@ async function resetMetricsController(ctx) { return; } - ctx.status = 404; + ctx.status = 501; ctx.body = `Not supported`; } From 85c8ea70d661f3692cd9dc1cef8151a474892408 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:44:04 +0530 Subject: [PATCH 020/201] feat: onboarding clicksend destination (#3486) * feat: onboarding clicksend destination * feat: adding scheduling logic * feat: adding default scheduling unit * feat: adding component tests * feat: adding data delivery tests * feat: reducing code duplication * feat: test cases clean up * feat: more deduplication --- src/cdk/v2/destinations/clicksend/config.ts | 10 + .../destinations/clicksend/procWorkflow.yaml | 98 ++++ .../v2/destinations/clicksend/rtWorkflow.yaml | 38 ++ src/cdk/v2/destinations/clicksend/utils.js | 127 +++++ .../v2/destinations/clicksend/utils.test.js | 132 +++++ src/features.json | 3 +- .../destinations/clicksend/networkHandler.js | 99 ++++ .../destinations/clicksend/commonConfig.ts | 103 ++++ .../clicksend/dataDelivery/data.ts | 514 ++++++++++++++++++ .../destinations/clicksend/network.ts | 242 +++++++++ .../destinations/clicksend/processor/data.ts | 3 + .../clicksend/processor/identify.ts | 224 ++++++++ .../destinations/clicksend/processor/track.ts | 293 ++++++++++ .../destinations/clicksend/router/data.ts | 485 +++++++++++++++++ 14 files changed, 2370 insertions(+), 1 deletion(-) create mode 100644 src/cdk/v2/destinations/clicksend/config.ts create mode 100644 src/cdk/v2/destinations/clicksend/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/clicksend/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/clicksend/utils.js create mode 100644 src/cdk/v2/destinations/clicksend/utils.test.js create mode 100644 src/v1/destinations/clicksend/networkHandler.js create mode 100644 test/integrations/destinations/clicksend/commonConfig.ts create mode 100644 test/integrations/destinations/clicksend/dataDelivery/data.ts create mode 100644 test/integrations/destinations/clicksend/network.ts create mode 100644 test/integrations/destinations/clicksend/processor/data.ts create mode 100644 test/integrations/destinations/clicksend/processor/identify.ts create mode 100644 test/integrations/destinations/clicksend/processor/track.ts create mode 100644 test/integrations/destinations/clicksend/router/data.ts diff --git a/src/cdk/v2/destinations/clicksend/config.ts b/src/cdk/v2/destinations/clicksend/config.ts new file mode 100644 index 0000000000..e956663fb5 --- /dev/null +++ b/src/cdk/v2/destinations/clicksend/config.ts @@ -0,0 +1,10 @@ +const SMS_SEND_ENDPOINT = 'https://rest.clicksend.com/v3/sms/send'; +const SMS_CAMPAIGN_ENDPOINT = 'https://rest.clicksend.com/v3/sms-campaigns/send'; +const COMMON_CONTACT_DOMAIN = 'https://rest.clicksend.com/v3/lists'; + +module.exports = { + SMS_SEND_ENDPOINT, + SMS_CAMPAIGN_ENDPOINT, + MAX_BATCH_SIZE: 1000, + COMMON_CONTACT_DOMAIN, +}; diff --git a/src/cdk/v2/destinations/clicksend/procWorkflow.yaml b/src/cdk/v2/destinations/clicksend/procWorkflow.yaml new file mode 100644 index 0000000000..0833bba198 --- /dev/null +++ b/src/cdk/v2/destinations/clicksend/procWorkflow.yaml @@ -0,0 +1,98 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + - name: defaultRequestConfig + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: isDefinedAndNotNull + path: ../../../../v0/util + - path: ./utils + - name: getDestinationExternalID + path: ../../../../v0/util + - name: base64Convertor + path: ../../../../v0/util + - path: ./config + +steps: + - name: messageType + template: | + .message.type.toLowerCase(); + - name: validateInput + template: | + let messageType = $.outputs.messageType; + $.assert(messageType, "message Type is not present. Aborting"); + $.assert(messageType in {{$.EventType.([.TRACK,.IDENTIFY])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.clicksendUsername, "Clicksend user name is not present. Aborting"); + $.assertConfig(.destination.Config.clicksendPassword, "Click send password is not present. Aborting"); + - name: prepareIdentifyPayload + condition: $.outputs.messageType === {{$.EventType.IDENTIFY}} + template: | + const payload = .message.({ + email: {{{{$.getGenericPaths("emailOnly")}}}}, + phone_number: {{{{$.getGenericPaths("phone")}}}}, + first_name: {{{{$.getGenericPaths("firstName")}}}}, + last_name: {{{{$.getGenericPaths("lastName")}}}}, + address_line_1: .traits.address_line_1 || .context.traits.address_line_1 || JSON.stringify({{{{$.getGenericPaths("address")}}}}) , + address_line_2: .traits.address_line_2 || .context.traits.address_line_2 || JSON.stringify({{{{$.getGenericPaths("address")}}}}) , + city: {{{{$.getGenericPaths("city")}}}}, + state: {{{{$.getGenericPaths("state")}}}}, + country: {{{{$.getGenericPaths("country")}}}}, + fax_number: .traits.fax_number || .context.traits.fax_number, + organization_name: .traits.fax_number || .context.traits.fax_number, + }); + $.validateIdentifyPayload(payload); + payload.contact_id = $.getDestinationExternalID(.message,'CLICKSEND_CONTACT_ID'); + const contactList = $.getDestinationExternalID(.message,'CLICKSEND_CONTACT_LIST_ID'); + $.assert(contactList, "externalId does not contain contact list Id of Clicksend. Aborting."); + $.context.endPoint = $.getEndIdentifyPoint(payload.contact_id, contactList); + $.context.payload = $.removeUndefinedAndNullValues(payload); + $.context.method = payload.contact_id ? 'PUT' : 'POST'; + - name: prepareTrackPayload + condition: $.outputs.messageType === {{$.EventType.TRACK}} + steps: + - name: sendSmsCampaignPayload + condition: $.isDefinedAndNotNull($.getDestinationExternalID(^.message,'CLICKSEND_CONTACT_LIST_ID')) + template: | + const sendCampaignPayload = .message.({ + list_id : parseInt($.getDestinationExternalID(^.message,'CLICKSEND_CONTACT_LIST_ID'), 10), + name : String(.properties.name), + body : String(.properties.body), + from : $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_EMAIL') || ^.destination.Config.defaultSenderEmail, + schedule : $.deduceSchedule(.properties.schedule,{{{{$.getGenericPaths("timestamp")}}}}, ^.destination.Config) + }); + $.assert(!Number.isNaN(sendCampaignPayload.list_id), "list_id must be an integer"); + $.validateTrackSMSCampaignPayload(sendCampaignPayload); + $.context.payload = $.removeUndefinedAndNullValues(sendCampaignPayload); + $.context.endPoint = $.SMS_CAMPAIGN_ENDPOINT; + $.context.method = 'POST'; + else: + name: sendSmsPayload + template: | + const sendSmsPayload = .message.({ + from: $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_EMAIL') || ^.destination.Config.defaultSenderEmail, + email: {{{{$.getGenericPaths("emailOnly")}}}}, + to: {{{{$.getGenericPaths("phone")}}}}, + body: .properties.body, + source: .properties.source || ^.destination.Config.defaultSource, + schedule: $.deduceSchedule(.properties.schedule, {{{{$.getGenericPaths("timestamp")}}}}, ^.destination.Config), + custom_string: .properties.custom_string, + country: {{{{$.getGenericPaths("country")}}}}, + from_email: .properties.from_email + }); + $.assert((sendSmsPayload.from && sendSmsPayload.to && sendSmsPayload.body), "all of sender email, phone and body needs to be present for track call"); + $.context.payload = $.removeUndefinedAndNullValues(sendSmsPayload); + $.context.endPoint = $.SMS_SEND_ENDPOINT; + $.context.method = 'POST'; + - name: buildResponse + template: | + const response = $.defaultRequestConfig(); + response.body.JSON = $.context.payload; + response.endpoint = $.context.endPoint; + response.method = $.context.method; + response.headers = { + Authorization : "Basic " + $.base64Convertor(.destination.Config.clicksendUsername + ":" + .destination.Config.clicksendPassword), + "Content-Type" : "application/json", + }; + response diff --git a/src/cdk/v2/destinations/clicksend/rtWorkflow.yaml b/src/cdk/v2/destinations/clicksend/rtWorkflow.yaml new file mode 100644 index 0000000000..0e7132ccad --- /dev/null +++ b/src/cdk/v2/destinations/clicksend/rtWorkflow.yaml @@ -0,0 +1,38 @@ +bindings: + - path: ./utils + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + bindings: + - name: batchMode + value: true + loopOverInput: true + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "message": .[], + "destination": ^ [idx].destination, + "metadata": ^ [idx].metadata + })[] + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + + - name: batchSuccessfulEvents + description: Batches the successfulEvents + template: | + $.context.batchedPayload = $.batchResponseBuilder($.outputs.successfulEvents); + + - name: finalPayload + template: | + [...$.outputs.failedEvents, ...$.context.batchedPayload] diff --git a/src/cdk/v2/destinations/clicksend/utils.js b/src/cdk/v2/destinations/clicksend/utils.js new file mode 100644 index 0000000000..d0671df45c --- /dev/null +++ b/src/cdk/v2/destinations/clicksend/utils.js @@ -0,0 +1,127 @@ +const { InstrumentationError } = require('@rudderstack/integrations-lib'); +const lodash = require('lodash'); +const { BatchUtils } = require('@rudderstack/workflow-engine'); +const { SMS_SEND_ENDPOINT, MAX_BATCH_SIZE, COMMON_CONTACT_DOMAIN } = require('./config'); +const { isDefinedAndNotNullAndNotEmpty, isDefinedAndNotNull } = require('../../../../v0/util'); + +const getEndIdentifyPoint = (contactId, contactListId) => + `${COMMON_CONTACT_DOMAIN}/${contactListId}/contacts${isDefinedAndNotNullAndNotEmpty(contactId) ? `/${contactId}` : ''}`; + +const validateIdentifyPayload = (payload) => { + if ( + !( + isDefinedAndNotNullAndNotEmpty(payload.phone_number) || + isDefinedAndNotNullAndNotEmpty(payload.email) || + isDefinedAndNotNullAndNotEmpty(payload.fax_number) + ) + ) { + throw new InstrumentationError( + 'Either phone number or email or fax_number is mandatory for contact creation', + ); + } +}; + +const validateTrackSMSCampaignPayload = (payload) => { + if (!(payload.body && payload.name && payload.list_id && payload.from)) { + throw new InstrumentationError( + 'All of contact list Id, name, body and from are required to trigger an sms campaign', + ); + } +}; + +const deduceSchedule = (eventLevelSchedule, timestamp, destConfig) => { + if (isDefinedAndNotNull(eventLevelSchedule) && !Number.isNaN(eventLevelSchedule)) { + return eventLevelSchedule; + } + const { defaultCampaignScheduleUnit = 'minute', defaultCampaignSchedule = 0 } = destConfig; + const date = new Date(timestamp); + + if (defaultCampaignScheduleUnit === 'day') { + date.setDate(date.getDate() + defaultCampaignSchedule); + } else if (defaultCampaignScheduleUnit === 'minute') { + date.setMinutes(date.getMinutes() + defaultCampaignSchedule); + } else { + throw new Error("Invalid delta unit. Use 'day' or 'minute'."); + } + + return Math.floor(date.getTime() / 1000); +}; + +const mergeMetadata = (batch) => batch.map((event) => event.metadata); + +const getMergedEvents = (batch) => batch.map((event) => event.message[0].body.JSON); + +const getHttpMethodForEndpoint = (endpoint) => { + const contactIdPattern = /\/contacts\/[^/]+$/; + return contactIdPattern.test(endpoint) ? 'PUT' : 'POST'; +}; + +const buildBatchedRequest = (batch, constants, endpoint) => ({ + batchedRequest: { + body: { + JSON: + endpoint === SMS_SEND_ENDPOINT + ? { messages: getMergedEvents(batch) } + : batch[0].message[0].body.JSON, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: getHttpMethodForEndpoint(endpoint), + endpoint, + headers: constants.headers, + params: {}, + files: {}, + }, + metadata: mergeMetadata(batch), + batched: endpoint === SMS_SEND_ENDPOINT, + statusCode: 200, + destination: batch[0].destination, +}); + +const initializeConstants = (successfulEvents) => { + if (successfulEvents.length === 0) return null; + return { + version: successfulEvents[0].message[0].version, + type: successfulEvents[0].message[0].type, + headers: successfulEvents[0].message[0].headers, + destination: successfulEvents[0].destination, + endPoint: successfulEvents[0].message[0].endpoint, + }; +}; + +const batchResponseBuilder = (events) => { + const response = []; + const constants = initializeConstants(events); + if (!constants) return []; + const typedEventGroups = lodash.groupBy(events, (event) => event.message[0].endpoint); + + Object.keys(typedEventGroups).forEach((eventEndPoint) => { + if (eventEndPoint === SMS_SEND_ENDPOINT) { + const batchesOfSMSEvents = BatchUtils.chunkArrayBySizeAndLength( + typedEventGroups[eventEndPoint], + { maxItems: MAX_BATCH_SIZE }, + ); + batchesOfSMSEvents.items.forEach((batch) => { + response.push(buildBatchedRequest(batch, constants, eventEndPoint)); + }); + } else { + response.push( + buildBatchedRequest([typedEventGroups[eventEndPoint][0]], constants, eventEndPoint), + ); + } + }); + + return response; +}; + +module.exports = { + batchResponseBuilder, + getEndIdentifyPoint, + validateIdentifyPayload, + validateTrackSMSCampaignPayload, + deduceSchedule, + getHttpMethodForEndpoint, +}; diff --git a/src/cdk/v2/destinations/clicksend/utils.test.js b/src/cdk/v2/destinations/clicksend/utils.test.js new file mode 100644 index 0000000000..4999f55678 --- /dev/null +++ b/src/cdk/v2/destinations/clicksend/utils.test.js @@ -0,0 +1,132 @@ +const { + validateTrackSMSCampaignPayload, + deduceSchedule, + getHttpMethodForEndpoint, +} = require('./utils'); + +describe('validateTrackSMSCampaignPayload', () => { + // payload with all required fields defined and non-empty does not throw an error + it('should not throw an error when all required fields are defined and non-empty', () => { + const payload = { + body: 'Test message', + name: 'Test Campaign', + list_id: '12345', + from: 'TestSender', + }; + expect(() => validateTrackSMSCampaignPayload(payload)).not.toThrow(); + }); + + // payload with body field missing throws an error + it('should throw an error when body field is missing', () => { + const payload = { + name: 'Test Campaign', + list_id: '12345', + from: 'TestSender', + }; + expect(() => validateTrackSMSCampaignPayload(payload)).toThrow( + 'All of contact list Id, name, body and from are required to trigger an sms campaign', + ); + }); + + it('should throw an error when from field is empty string', () => { + const payload = { + name: 'Test Campaign', + list_id: '12345', + from: '', + body: 'Test message', + }; + expect(() => validateTrackSMSCampaignPayload(payload)).toThrow( + 'All of contact list Id, name, body and from are required to trigger an sms campaign', + ); + }); +}); + +describe('deduceSchedule', () => { + // returns eventLevelSchedule if it is defined, not null, and not empty + it('should return eventLevelSchedule when it is defined, not null, and not empty', () => { + const eventLevelSchedule = 1234567890; + const timestamp = '2023-10-01T00:00:00Z'; + const destConfig = { defaultCampaignScheduleUnit: 'minute', defaultCampaignSchedule: 5 }; + + const result = deduceSchedule(eventLevelSchedule, timestamp, destConfig); + + expect(result).toBe(eventLevelSchedule); + }); + + // throws error for invalid defaultCampaignScheduleUnit + it('should throw error when defaultCampaignScheduleUnit is invalid', () => { + const eventLevelSchedule = null; + const timestamp = '2023-10-01T00:00:00Z'; + const destConfig = { defaultCampaignScheduleUnit: 'hour', defaultCampaignSchedule: 5 }; + + expect(() => { + deduceSchedule(eventLevelSchedule, timestamp, destConfig); + }).toThrow("Invalid delta unit. Use 'day' or 'minute'."); + }); + + // calculates future timestamp correctly when defaultCampaignScheduleUnit is 'minute' + it('should calculate future timestamp correctly when defaultCampaignScheduleUnit is minute', () => { + const eventLevelSchedule = null; + const timestamp = '2023-10-01T00:00:00Z'; + const destConfig = { defaultCampaignScheduleUnit: 'minute', defaultCampaignSchedule: 5 }; + + const result = deduceSchedule(eventLevelSchedule, timestamp, destConfig); + + const expectedTimestamp = new Date('2023-10-01T00:05:00Z').getTime() / 1000; + + expect(result).toBe(expectedTimestamp); + }); + + // calculates future timestamp correctly when defaultCampaignScheduleUnit is 'day' + it('should calculate future timestamp correctly when defaultCampaignScheduleUnit is day', () => { + const eventLevelSchedule = null; + const timestamp = '2023-10-01T00:00:00Z'; + const destConfig = { defaultCampaignScheduleUnit: 'day', defaultCampaignSchedule: 1 }; + + const result = deduceSchedule(eventLevelSchedule, timestamp, destConfig); + + const expectedTimestamp = new Date('2023-10-02T00:00:00Z').getTime() / 1000; + + expect(result).toBe(expectedTimestamp); + }); + + // returns UNIX timestamp in seconds + it('should return UNIX timestamp in seconds', () => { + const eventLevelSchedule = null; + const timestamp = '2023-10-01T00:00:00Z'; + const destConfig = { defaultCampaignScheduleUnit: 'minute', defaultCampaignSchedule: 5 }; + + const result = deduceSchedule(eventLevelSchedule, timestamp, destConfig); + + expect(typeof result).toBe('number'); + expect(result.toString()).toMatch(/^\d+$/); + }); +}); + +describe('getHttpMethodForEndpoint', () => { + // returns 'PUT' for endpoint matching /contacts/{id} + it('should return PUT when endpoint matches /contacts/{id}', () => { + const endpoint = 'https://rest.clicksend.com/v3/lists//contacts/'; + const result = getHttpMethodForEndpoint(endpoint); + expect(result).toBe('PUT'); + }); + + // handles empty string as endpoint + it('should return POST when endpoint is an empty string', () => { + const endpoint = 'https://rest.clicksend.com/v3/lists//contacts'; + const result = getHttpMethodForEndpoint(endpoint); + expect(result).toBe('POST'); + }); + + it('should return POST when endpoint is an empty string', () => { + const endpoint = 'https://rest.clicksend.com/v3/sms-campaigns/send'; + const result = getHttpMethodForEndpoint(endpoint); + expect(result).toBe('POST'); + }); + + it('should return POST when endpoint is an empty string', () => { + const endpoint = 'https://rest.clicksend.com/v3/sms/send'; + const result = getHttpMethodForEndpoint(endpoint); + expect(result).toBe('POST'); + }); +}); diff --git a/src/features.json b/src/features.json index 58af795a77..b9a82ebbcc 100644 --- a/src/features.json +++ b/src/features.json @@ -72,7 +72,8 @@ "BLOOMREACH": true, "MOVABLE_INK": true, "EMARSYS": true, - "KODDI": true + "KODDI": true, + "CLICKSEND": true }, "regulations": [ "BRAZE", diff --git a/src/v1/destinations/clicksend/networkHandler.js b/src/v1/destinations/clicksend/networkHandler.js new file mode 100644 index 0000000000..b6137ae67c --- /dev/null +++ b/src/v1/destinations/clicksend/networkHandler.js @@ -0,0 +1,99 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +const { TransformerProxyError } = require('../../../v0/util/errorTypes'); +const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network'); +const { isHttpStatusSuccess } = require('../../../v0/util/index'); + +const { + processAxiosResponse, + getDynamicErrorType, +} = require('../../../adapters/utils/networkUtils'); +const tags = require('../../../v0/util/tags'); + +function checkIfEventIsAbortableAndExtractErrorMessage(singleResponse) { + const successStatuses = [ + 'SUCCESS', + 'Success', + 'QUEUED', + 'Queued', + 'CREATED', + 'Created', + 'NO_CONTENT', + ]; + + const { status } = singleResponse; + // eslint-disable-next-line unicorn/consistent-destructuring + const campaignStatus = singleResponse?.sms_campaign?.status; + + // Determine if the status is in the success statuses + const isStatusSuccess = status && successStatuses.includes(status); + const isCampaignStatusSuccess = campaignStatus && successStatuses.includes(campaignStatus); + + return { + isAbortable: !(isStatusSuccess || isCampaignStatusSuccess), + errorMsg: status || campaignStatus || '', + }; +} +const handleErrorResponse = (status, response, rudderJobMetadata) => { + const errorMessage = response.replyText || 'unknown error format'; + const responseWithIndividualEvents = rudderJobMetadata.map((metadata) => ({ + statusCode: status, + metadata, + error: errorMessage, + })); + throw new TransformerProxyError( + `CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. ${errorMessage}`, + status, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + { response, status }, + '', + responseWithIndividualEvents, + ); +}; + +const responseHandler = (responseParams) => { + const { destinationResponse, rudderJobMetadata } = responseParams; + const message = '[CLICKSEND Response V1 Handler] - Request Processed Successfully'; + const { response, status } = destinationResponse; + + if (!isHttpStatusSuccess(status)) { + handleErrorResponse(status, response, rudderJobMetadata); + } + + const { messages } = response.data; + const finalData = messages || [response.data]; + const responseWithIndividualEvents = finalData.map((singleResponse, idx) => { + const proxyOutput = { + statusCode: 200, + metadata: rudderJobMetadata[idx], + error: 'success', + }; + const { isAbortable, errorMsg } = checkIfEventIsAbortableAndExtractErrorMessage(singleResponse); + if (isAbortable) { + proxyOutput.statusCode = 400; + proxyOutput.error = errorMsg; + } + return proxyOutput; + }); + + return { + status, + message, + destinationResponse, + response: responseWithIndividualEvents, + }; +}; + +module.exports = { + responseHandler, +}; + +function networkHandler() { + this.prepareProxy = prepareProxyRequest; + this.proxy = proxyRequest; + this.processAxiosResponse = processAxiosResponse; + this.responseHandler = responseHandler; +} + +module.exports = { networkHandler, checkIfEventIsAbortableAndExtractErrorMessage }; diff --git a/test/integrations/destinations/clicksend/commonConfig.ts b/test/integrations/destinations/clicksend/commonConfig.ts new file mode 100644 index 0000000000..04c51736f0 --- /dev/null +++ b/test/integrations/destinations/clicksend/commonConfig.ts @@ -0,0 +1,103 @@ +export const destination = { + ID: 'random_id', + Name: 'clicksend', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + clicksendUsername: 'dummy', + clicksendPassword: 'dummy', + defaultCampaignScheduleUnit: 'day', + defaultCampaignSchedule: '2', + defaultSource: 'php', + defaultSenderEmail: 'abc@gmail.com', + defaultSenderPhoneNumber: '+919XXXXXXXX8', + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +export const metadata = { + destinationId: 'dummyDestId', +}; +export const commonProperties = { + name: 'new campaign', + body: 'abcd', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + custom_string: 'test string', +}; +export const traitsWithIdentifiers = { + firstName: 'John', + lastName: 'Doe', + phone: '+9182XXXX068', + email: 'abc@gmail.com', + address: { city: 'New York', country: 'USA', pinCode: '123456' }, +}; +export const traitsWithoutIdenfiers = { + firstName: 'John', + lastName: 'Doe', + address: { city: 'New York', country: 'USA', pinCode: '123456' }, +}; +export const contextWithoutScheduleAndWithContactId = { + externalId: [{ type: 'CLICKSEND_CONTACT_LIST_ID', id: '123345' }], + traitsWithoutIdenfiers, +}; +export const commonInput = { + anonymousId: 'anon_123', + messageId: 'dummy_msg_id', + contextWithoutScheduleAndWithContactId, + channel: 'web', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', +}; + +export const commonOutput = { + anonymousId: 'anon_123', + messageId: 'dummy_msg_id', + contextWithoutScheduleAndWithContactId, + channel: 'web', + originalTimestamp: '2021-01-25T15:32:56.409Z', +}; + +export const SMS_SEND_ENDPOINT = 'https://rest.clicksend.com/v3/sms/send'; +export const SMS_CAMPAIGN_ENDPOINT = 'https://rest.clicksend.com/v3/sms-campaigns/send'; +export const COMMON_CONTACT_DOMAIN = 'https://rest.clicksend.com/v3/lists'; +export const routerInstrumentationErrorStatTags = { + destType: 'CLICKSEND', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', +}; +export const commonIdentifyOutput = { + address_line_1: '{"city":"New York","country":"USA","pinCode":"123456"}', + address_line_2: '{"city":"New York","country":"USA","pinCode":"123456"}', + city: 'New York', + email: 'abc@gmail.com', + first_name: 'John', + last_name: 'Doe', + phone_number: '+9182XXXX068', +}; +export const processInstrumentationErrorStatTags = { + destType: 'CLICKSEND', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'dummyDestId', +}; + +export const commonHeader = { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', +}; diff --git a/test/integrations/destinations/clicksend/dataDelivery/data.ts b/test/integrations/destinations/clicksend/dataDelivery/data.ts new file mode 100644 index 0000000000..f376e757ea --- /dev/null +++ b/test/integrations/destinations/clicksend/dataDelivery/data.ts @@ -0,0 +1,514 @@ +import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; +import { ProxyV1TestData } from '../../../testTypes'; + +export const headerBlockWithCorrectAccessToken = { + 'Content-Type': 'application/json', + Authorization: 'dummy-key', +}; + +export const contactPayload = { + phone_number: '+919433127939', + first_name: 'john', + last_name: 'Doe', +}; + +export const statTags = { + destType: 'CLICKSEND', + errorCategory: 'network', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', +}; + +export const metadata = [ + { + jobId: 1, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + { + jobId: 2, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + { + jobId: 3, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + { + jobId: 4, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, +]; + +export const singleMetadata = [ + { + jobId: 1, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, +]; + +const commonIdentifyRequestParametersWithWrongData = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { ...contactPayload, address_line_1: { city: 'kolkata' } }, +}; + +const commonIdentifyRequestParameters = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { ...contactPayload }, +}; + +const commonIdentifyUpdateRequestParameters = { + method: 'PUT', + headers: headerBlockWithCorrectAccessToken, + JSON: { ...contactPayload }, +}; + +const trackSmSCampaignPayload = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { + list_id: 'wrong-id', + name: 'My Campaign 1', + body: 'This is my new campaign message.', + }, +}; + +const trackSmSSendPayload = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { + messages: [ + { + body: 'test message, please ignore', + to: '+919XXXXXXX8', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX9', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX0', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX7', + from: '+9182XXXXXX8', + }, + ], + }, +}; + +export const testScenariosForV1API: ProxyV1TestData[] = [ + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Identify Event for creating contact fails due to wrong contact list Id', + successCriteria: 'Should return 400 and aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/lists/wrong-id/contacts', + ...commonIdentifyRequestParameters, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 403, + statTags, + message: + 'CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. unknown error format', + response: [ + { + statusCode: 403, + metadata: generateMetadata(1), + error: + '{"http_code":403,"response_code":"FORBIDDEN","response_msg":"Resource not found or you don\'t have the permissions to access this resource.","data":null}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Identify Event for updating contact fails due to wrong contact list Id', + successCriteria: 'Should return 400 and aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/lists//contacts/', + ...commonIdentifyUpdateRequestParameters, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 404, + statTags, + message: + 'CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. unknown error format', + response: [ + { + statusCode: 404, + metadata: generateMetadata(1), + error: + '{"http_code":404,"response_code":"NOT_FOUND","response_msg":"Contact record not found.","data":null}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Identify Event for updating contact fails due to wrong contact list Id', + successCriteria: 'Should return 400 and aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/lists//contacts/', + ...commonIdentifyUpdateRequestParameters, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 404, + statTags, + message: + 'CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. unknown error format', + response: [ + { + statusCode: 404, + metadata: generateMetadata(1), + error: + '{"http_code":404,"response_code":"NOT_FOUND","response_msg":"Contact record not found.","data":null}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Identify Event for creating contact fails due to wrong parameter', + successCriteria: 'Should return 400 and aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/lists//contacts/', + ...commonIdentifyRequestParametersWithWrongData, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 400, + statTags, + message: + 'CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. unknown error format', + response: [ + { + statusCode: 400, + metadata: generateMetadata(1), + error: + '{"http_code":400,"response_code":400,"response_msg":"preg_replace(): Parameter mismatch, pattern is a string while replacement is an array","data":null}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Track sms campaign Event fails due to wrong list id', + successCriteria: 'Should return 400 and aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/sms-campaigns/send', + ...trackSmSCampaignPayload, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 404, + statTags, + message: + 'CLICKSEND: Error transformer proxy v1 during CLICKSEND response transformation. unknown error format', + response: [ + { + statusCode: 404, + metadata: generateMetadata(1), + error: + '{"http_code":404,"response_code":"NOT_FOUND","response_msg":"Your list is not found.","data":null}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'clicksend_v1_scenario_1', + name: 'clicksend', + description: 'Track sms send Event partially passing', + successCriteria: 'Should return 200 and 400 based on success status', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://rest.clicksend.com/v3/sms/send', + ...trackSmSSendPayload, + }, + metadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + destinationResponse: { + response: { + data: { + _currency: { + currency_name_long: 'Indian Rupees', + currency_name_short: 'INR', + currency_prefix_c: '¢', + currency_prefix_d: '₹', + }, + blocked_count: 2, + messages: [ + { + body: 'test message, please ignore', + carrier: 'BSNL MOBILE', + contact_id: null, + country: 'IN', + custom_string: '', + date: 1718728461, + direction: 'out', + from: '+61447254068', + from_email: null, + is_shared_system_number: false, + list_id: null, + message_id: '1EF2D909-D81A-65FA-BEC7-33227BD3AB16', + message_parts: 1, + message_price: '7.7050', + schedule: 1718728461, + status: 'SUCCESS', + subaccount_id: 589721, + to: '+919XXXXXXX8', + user_id: 518988, + }, + { + body: 'test message, please ignore', + carrier: 'BSNL MOBILE', + contact_id: null, + country: 'IN', + custom_string: '', + date: 1718728461, + direction: 'out', + from: '+61447254068', + from_email: null, + is_shared_system_number: false, + list_id: null, + message_id: '1EF2D909-D8C4-6D02-9EF0-1575A27E0783', + message_parts: 1, + message_price: '7.7050', + schedule: 1718728461, + status: 'SUCCESS', + subaccount_id: 589721, + to: '+919XXXXXXX9', + user_id: 518988, + }, + { + body: 'test message, please ignore', + carrier: 'Optus', + country: 'AU', + custom_string: '', + from: '+61447238703', + is_shared_system_number: true, + message_id: '1EF2D909-D8CB-6684-AFF9-DDE3218AE055', + message_parts: 0, + message_price: '0.0000', + schedule: '', + status: 'COUNTRY_NOT_ENABLED', + to: '+614XXXXXX7', + }, + { + body: 'test message, please ignore', + carrier: 'Optus', + country: 'AU', + custom_string: '', + from: '+61447268001', + is_shared_system_number: true, + message_id: '1EF2D909-D8D2-645C-A69F-57D016B5E549', + message_parts: 0, + message_price: '0.0000', + schedule: '', + status: 'COUNTRY_NOT_ENABLED', + to: '+614XXXXXXX2', + }, + ], + queued_count: 2, + total_count: 4, + total_price: 15.41, + }, + http_code: 200, + response_code: 'SUCCESS', + response_msg: 'Messages queued for delivery.', + }, + status: 200, + }, + message: '[CLICKSEND Response V1 Handler] - Request Processed Successfully', + response: [ + { + statusCode: 200, + metadata: generateMetadata(1), + error: 'success', + }, + { + statusCode: 200, + metadata: generateMetadata(2), + error: 'success', + }, + { + statusCode: 400, + metadata: generateMetadata(3), + error: 'COUNTRY_NOT_ENABLED', + }, + { + statusCode: 400, + metadata: generateMetadata(4), + error: 'COUNTRY_NOT_ENABLED', + }, + ], + }, + }, + }, + }, + }, +]; + +export const data = [...testScenariosForV1API]; diff --git a/test/integrations/destinations/clicksend/network.ts b/test/integrations/destinations/clicksend/network.ts new file mode 100644 index 0000000000..aa1013d816 --- /dev/null +++ b/test/integrations/destinations/clicksend/network.ts @@ -0,0 +1,242 @@ +export const headerBlockWithCorrectAccessToken = { + 'Content-Type': 'application/json', + Authorization: 'dummy-key', +}; + +export const contactPayload = { + phone_number: '+919433127939', + first_name: 'john', + last_name: 'Doe', +}; + +// MOCK DATA +const businessMockData = [ + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list', + httpReq: { + method: 'POST', + url: 'https://rest.clicksend.com/v3/lists/wrong-id/contacts', + headers: headerBlockWithCorrectAccessToken, + data: contactPayload, + }, + httpRes: { + data: { + http_code: 403, + response_code: 'FORBIDDEN', + response_msg: + "Resource not found or you don't have the permissions to access this resource.", + data: null, + }, + status: 403, + }, + }, + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list while updating contact', + httpReq: { + method: 'PUT', + url: 'https://rest.clicksend.com/v3/lists//contacts/', + headers: headerBlockWithCorrectAccessToken, + data: contactPayload, + }, + httpRes: { + data: { + http_code: 404, + response_code: 'NOT_FOUND', + response_msg: 'Contact record not found.', + data: null, + }, + status: 404, + }, + }, + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list', + httpReq: { + method: 'PUT', + url: 'https://rest.clicksend.com/v3/lists//contacts/', + headers: headerBlockWithCorrectAccessToken, + data: contactPayload, + }, + httpRes: { + data: { + http_code: 404, + response_code: 'NOT_FOUND', + response_msg: 'Contact record not found.', + data: null, + }, + status: 404, + }, + }, + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list', + httpReq: { + method: 'POST', + url: 'https://rest.clicksend.com/v3/lists//contacts/', + headers: headerBlockWithCorrectAccessToken, + data: { ...contactPayload, address_line_1: { city: 'kolkata' } }, + }, + httpRes: { + data: { + http_code: 400, + response_code: 400, + response_msg: + 'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array', + data: null, + }, + status: 400, + }, + }, + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list', + httpReq: { + method: 'POST', + url: 'https://rest.clicksend.com/v3/sms-campaigns/send', + headers: headerBlockWithCorrectAccessToken, + data: { + list_id: 'wrong-id', + name: 'My Campaign 1', + body: 'This is my new campaign message.', + }, + }, + httpRes: { + data: { + http_code: 404, + response_code: 'NOT_FOUND', + response_msg: 'Your list is not found.', + data: null, + }, + status: 404, + }, + }, + { + description: + 'Mock response from destination depicting request with a correct contact payload but with wrong contact list', + httpReq: { + method: 'POST', + url: 'https://rest.clicksend.com/v3/sms/send', + headers: headerBlockWithCorrectAccessToken, + data: { + messages: [ + { + body: 'test message, please ignore', + to: '+919XXXXXXX8', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX9', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX0', + from: '+9182XXXXXX8', + }, + { + body: 'test message, please ignore', + to: '+919XXXXXXX7', + from: '+9182XXXXXX8', + }, + ], + }, + }, + httpRes: { + data: { + http_code: 200, + response_code: 'SUCCESS', + response_msg: 'Messages queued for delivery.', + data: { + total_price: 15.41, + total_count: 4, + queued_count: 2, + messages: [ + { + direction: 'out', + date: 1718728461, + to: '+919XXXXXXX8', + body: 'test message, please ignore', + from: '+61447254068', + schedule: 1718728461, + message_id: '1EF2D909-D81A-65FA-BEC7-33227BD3AB16', + message_parts: 1, + message_price: '7.7050', + from_email: null, + list_id: null, + custom_string: '', + contact_id: null, + user_id: 518988, + subaccount_id: 589721, + is_shared_system_number: false, + country: 'IN', + carrier: 'BSNL MOBILE', + status: 'SUCCESS', + }, + { + direction: 'out', + date: 1718728461, + to: '+919XXXXXXX9', + body: 'test message, please ignore', + from: '+61447254068', + schedule: 1718728461, + message_id: '1EF2D909-D8C4-6D02-9EF0-1575A27E0783', + message_parts: 1, + message_price: '7.7050', + from_email: null, + list_id: null, + custom_string: '', + contact_id: null, + user_id: 518988, + subaccount_id: 589721, + is_shared_system_number: false, + country: 'IN', + carrier: 'BSNL MOBILE', + status: 'SUCCESS', + }, + { + to: '+614XXXXXX7', + body: 'test message, please ignore', + from: '+61447238703', + schedule: '', + message_id: '1EF2D909-D8CB-6684-AFF9-DDE3218AE055', + message_parts: 0, + message_price: '0.0000', + custom_string: '', + is_shared_system_number: true, + country: 'AU', + carrier: 'Optus', + status: 'COUNTRY_NOT_ENABLED', + }, + { + to: '+614XXXXXXX2', + body: 'test message, please ignore', + from: '+61447268001', + schedule: '', + message_id: '1EF2D909-D8D2-645C-A69F-57D016B5E549', + message_parts: 0, + message_price: '0.0000', + custom_string: '', + is_shared_system_number: true, + country: 'AU', + carrier: 'Optus', + status: 'COUNTRY_NOT_ENABLED', + }, + ], + _currency: { + currency_name_short: 'INR', + currency_prefix_d: '₹', + currency_prefix_c: '¢', + currency_name_long: 'Indian Rupees', + }, + blocked_count: 2, + }, + }, + status: 200, + }, + }, +]; + +export const networkCallsData = [...businessMockData]; diff --git a/test/integrations/destinations/clicksend/processor/data.ts b/test/integrations/destinations/clicksend/processor/data.ts new file mode 100644 index 0000000000..42cb70459d --- /dev/null +++ b/test/integrations/destinations/clicksend/processor/data.ts @@ -0,0 +1,3 @@ +import { track } from './track'; +import { identify } from './identify'; +export const data = [...identify, ...track]; diff --git a/test/integrations/destinations/clicksend/processor/identify.ts b/test/integrations/destinations/clicksend/processor/identify.ts new file mode 100644 index 0000000000..231d5e6f1d --- /dev/null +++ b/test/integrations/destinations/clicksend/processor/identify.ts @@ -0,0 +1,224 @@ +import { + destination, + contextWithoutScheduleAndWithContactId, + traitsWithoutIdenfiers, + traitsWithIdentifiers, + commonInput, + metadata, + processInstrumentationErrorStatTags, + commonIdentifyOutput, + commonHeader, + COMMON_CONTACT_DOMAIN, +} from '../commonConfig'; +export const identify = [ + { + id: 'clicksend-test-identify-success-1', + name: 'clicksend', + description: 'identify call without externalId with contact list Id', + scenario: 'Framework+Buisness', + successCriteria: 'Identify call should fail as external ID is mandatory', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + ...commonInput, + userId: 'sajal12', + traits: traitsWithIdentifiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'externalId does not contain contact list Id of Clicksend. Aborting.: Workflow: procWorkflow, Step: prepareIdentifyPayload, ChildStep: undefined, OriginalError: externalId does not contain contact list Id of Clicksend. Aborting.', + metadata, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-identify-success-1', + name: 'clicksend', + description: 'identify call with externalId with contact list Id', + scenario: 'Framework+Buisness', + successCriteria: 'Identify call should be successful', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + ...commonInput, + context: contextWithoutScheduleAndWithContactId, + userId: 'sajal12', + traits: traitsWithIdentifiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: `${COMMON_CONTACT_DOMAIN}/123345/contacts`, + headers: commonHeader, + params: {}, + body: { + JSON: commonIdentifyOutput, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + metadata, + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-identify-success-1', + name: 'clicksend', + description: 'identify call without phone, email or fax number', + scenario: 'Framework+Buisness', + successCriteria: 'Identify call should fail as one of the above identifier is mandatory', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + ...commonInput, + userId: 'sajal12', + traits: traitsWithoutIdenfiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Either phone number or email or fax_number is mandatory for contact creation: Workflow: procWorkflow, Step: prepareIdentifyPayload, ChildStep: undefined, OriginalError: Either phone number or email or fax_number is mandatory for contact creation', + metadata, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-identify-success-1', + name: 'clicksend', + description: 'identify call with externalId with contact Id', + scenario: 'Framework+Buisness', + successCriteria: 'Identify call to be made to contact update API', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + ...commonInput, + context: { + ...contextWithoutScheduleAndWithContactId, + externalId: [ + { type: 'CLICKSEND_CONTACT_LIST_ID', id: '123345' }, + { type: 'CLICKSEND_CONTACT_ID', id: '111' }, + ], + }, + userId: 'sajal12', + traits: traitsWithIdentifiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: `${COMMON_CONTACT_DOMAIN}/123345/contacts/111`, + headers: commonHeader, + params: {}, + body: { + JSON: { ...commonIdentifyOutput, contact_id: '111' }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + metadata, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/clicksend/processor/track.ts b/test/integrations/destinations/clicksend/processor/track.ts new file mode 100644 index 0000000000..e4a8c5be97 --- /dev/null +++ b/test/integrations/destinations/clicksend/processor/track.ts @@ -0,0 +1,293 @@ +import { + destination, + commonProperties, + metadata, + contextWithoutScheduleAndWithContactId, + SMS_CAMPAIGN_ENDPOINT, + commonHeader, + processInstrumentationErrorStatTags, + traitsWithoutIdenfiers, + traitsWithIdentifiers, + SMS_SEND_ENDPOINT, +} from '../commonConfig'; +import { transformResultBuilder } from '../../../testUtils'; +export const track = [ + { + id: 'clicksend-test-track-success-1', + name: 'clicksend', + description: + 'Track call containing CLICKSEND_CONTACT_LIST_ID as externalID and all mappings available', + scenario: 'Framework+Buisness', + successCriteria: + 'It will trigger sms campaign for that entire list. Also, scheduling is updated based on configuration', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + context: contextWithoutScheduleAndWithContactId, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata, + output: transformResultBuilder({ + method: 'POST', + endpoint: SMS_CAMPAIGN_ENDPOINT, + headers: commonHeader, + JSON: { + list_id: 123345, + body: 'abcd', + from: 'abc@gmail.com', + name: 'new campaign', + schedule: 1631201576, + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-track-success-2', + name: 'clicksend', + description: + 'Track call containing CLICKSEND_CONTACT_LIST_ID as externalID and one of mandatory fields absent', + scenario: 'Framework+Buisness', + successCriteria: + 'as list Id, name, body and from fields are required ones to trigger event, hence it will fail', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + context: contextWithoutScheduleAndWithContactId, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: { ...commonProperties, name: '' }, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'All of contact list Id, name, body and from are required to trigger an sms campaign: Workflow: procWorkflow, Step: prepareTrackPayload, ChildStep: sendSmsCampaignPayload, OriginalError: All of contact list Id, name, body and from are required to trigger an sms campaign', + metadata, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-track-success-3', + name: 'clicksend', + description: + 'Track call containing CLICKSEND_CONTACT_LIST_ID as externalID and list ID is sent as a boolean', + scenario: 'Framework+Buisness', + successCriteria: 'It should fail, as list Id must be an integer', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + context: { + ...contextWithoutScheduleAndWithContactId, + externalId: [{ type: 'CLICKSEND_CONTACT_LIST_ID', id: true }], + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'list_id must be an integer: Workflow: procWorkflow, Step: prepareTrackPayload, ChildStep: sendSmsCampaignPayload, OriginalError: list_id must be an integer', + metadata, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-track-success-4', + name: 'clicksend', + description: + 'Track call not containing CLICKSEND_CONTACT_LIST_ID as externalID and all mappings available', + scenario: 'Framework+Buisness', + successCriteria: + 'It will trigger sms send call for that phone number. Also, scheduling is updated based on configuration', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + context: { + traits: traitsWithIdentifiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata, + output: transformResultBuilder({ + method: 'POST', + endpoint: SMS_SEND_ENDPOINT, + headers: commonHeader, + JSON: { + email: 'abc@gmail.com', + body: 'abcd', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + custom_string: 'test string', + schedule: 1631201576, + source: 'php', + to: '+9182XXXX068', + }, + userId: '', + }), + statusCode: 200, + }, + ], + }, + }, + }, + { + id: 'clicksend-test-track-success-5', + name: 'clicksend', + description: + 'Track call not containing CLICKSEND_CONTACT_LIST_ID as externalID and mandatory identifiers missing', + scenario: 'Framework+Buisness', + successCriteria: 'It will not trigger sms send call and fail with error', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + context: { + traits: traitsWithoutIdenfiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'all of sender email, phone and body needs to be present for track call: Workflow: procWorkflow, Step: prepareTrackPayload, ChildStep: sendSmsCampaignPayload, OriginalError: all of sender email, phone and body needs to be present for track call', + metadata, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/clicksend/router/data.ts b/test/integrations/destinations/clicksend/router/data.ts new file mode 100644 index 0000000000..b8b6c49b90 --- /dev/null +++ b/test/integrations/destinations/clicksend/router/data.ts @@ -0,0 +1,485 @@ +import { + commonInput, + destination, + routerInstrumentationErrorStatTags, + contextWithoutScheduleAndWithContactId, + commonProperties, + traitsWithIdentifiers, +} from '../commonConfig'; + +const commonDestination = { + ID: 'random_id', + Name: 'clicksend', + Config: { + clicksendPassword: 'dummy', + clicksendUsername: 'dummy', + defaultCampaignSchedule: '2', + defaultCampaignScheduleUnit: 'day', + defaultSenderEmail: 'abc@gmail.com', + defaultSenderPhoneNumber: '+919XXXXXXXX8', + defaultSource: 'php', + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, +}; + +export const data = [ + { + name: 'clicksend', + id: 'Test 0 - router', + description: 'Batch calls with all three type of calls as success', + scenario: 'FrameworkBuisness', + successCriteria: + 'All events should be transformed successfully but should not be under same batch and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + message: { + context: contextWithoutScheduleAndWithContactId, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 1, userId: 'u1' }, + }, + { + destination, + message: { + context: { + traits: traitsWithIdentifiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 2, userId: 'u2' }, + }, + { + destination, + message: { + type: 'identify', + ...commonInput, + context: { + ...contextWithoutScheduleAndWithContactId, + externalId: [ + { type: 'CLICKSEND_CONTACT_LIST_ID', id: '123345' }, + { type: 'CLICKSEND_CONTACT_ID', id: '111' }, + ], + }, + userId: 'sajal12', + traits: traitsWithIdentifiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 3, userId: 'u3' }, + }, + ], + destType: 'clicksend', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + batchedRequest: { + body: { + FORM: {}, + JSON: { + body: 'abcd', + from: 'abc@gmail.com', + list_id: 123345, + name: 'new campaign', + schedule: 1631201576, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://rest.clicksend.com/v3/sms-campaigns/send', + files: {}, + headers: { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + metadata: [ + { + jobId: 1, + + userId: 'u1', + }, + ], + destination: commonDestination, + statusCode: 200, + }, + { + batched: true, + batchedRequest: { + body: { + FORM: {}, + JSON: { + messages: [ + { + body: 'abcd', + custom_string: 'test string', + email: 'abc@gmail.com', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + schedule: 1631201576, + source: 'php', + to: '+9182XXXX068', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://rest.clicksend.com/v3/sms/send', + files: {}, + headers: { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + metadata: [ + { + jobId: 2, + + userId: 'u2', + }, + ], + destination: commonDestination, + statusCode: 200, + }, + { + batched: false, + batchedRequest: { + body: { + FORM: {}, + JSON: { + address_line_1: '{"city":"New York","country":"USA","pinCode":"123456"}', + address_line_2: '{"city":"New York","country":"USA","pinCode":"123456"}', + city: 'New York', + contact_id: '111', + email: 'abc@gmail.com', + first_name: 'John', + last_name: 'Doe', + phone_number: '+9182XXXX068', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://rest.clicksend.com/v3/lists/123345/contacts/111', + files: {}, + headers: { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', + }, + method: 'PUT', + params: {}, + type: 'REST', + version: '1', + }, + destination: commonDestination, + metadata: [ + { + jobId: 3, + + userId: 'u3', + }, + ], + statusCode: 200, + }, + ], + }, + }, + }, + }, + { + name: 'clicksend', + id: 'Test 0 - router', + description: 'Batch calls with all five type of calls as two successful and one failure', + scenario: 'FrameworkBuisness', + successCriteria: + 'All events should be transformed successfully but should not be under same batch and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + message: { + context: contextWithoutScheduleAndWithContactId, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 1, userId: 'u1' }, + }, + { + destination, + message: { + context: { + traits: traitsWithIdentifiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 2, userId: 'u2' }, + }, + { + destination, + message: { + type: 'identify', + ...commonInput, + context: { + ...contextWithoutScheduleAndWithContactId, + externalId: [{ type: 'CLICKSEND_CONTACT_ID', id: '111' }], + }, + userId: 'sajal12', + traits: traitsWithIdentifiers, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 3, userId: 'u3' }, + }, + { + destination, + message: { + context: { + traits: traitsWithIdentifiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 4, userId: 'u4' }, + }, + { + destination, + message: { + context: { + traits: traitsWithIdentifiers, + }, + type: 'track', + event: 'product purchased', + userId: 'sajal12', + channel: 'mobile', + messageId: 'dummy_msg_id', + properties: commonProperties, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { jobId: 5, userId: 'u5' }, + }, + ], + destType: 'clicksend', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + destination, + error: 'externalId does not contain contact list Id of Clicksend. Aborting.', + metadata: [{ jobId: 3, userId: 'u3' }], + statTags: routerInstrumentationErrorStatTags, + statusCode: 400, + }, + { + batched: false, + batchedRequest: { + body: { + FORM: {}, + JSON: { + body: 'abcd', + from: 'abc@gmail.com', + list_id: 123345, + name: 'new campaign', + schedule: 1631201576, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://rest.clicksend.com/v3/sms-campaigns/send', + files: {}, + headers: { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + metadata: [ + { + jobId: 1, + + userId: 'u1', + }, + ], + destination: commonDestination, + statusCode: 200, + }, + { + batched: true, + batchedRequest: { + body: { + FORM: {}, + JSON: { + messages: [ + { + body: 'abcd', + custom_string: 'test string', + email: 'abc@gmail.com', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + schedule: 1631201576, + source: 'php', + to: '+9182XXXX068', + }, + { + body: 'abcd', + custom_string: 'test string', + email: 'abc@gmail.com', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + schedule: 1631201576, + source: 'php', + to: '+9182XXXX068', + }, + { + body: 'abcd', + custom_string: 'test string', + email: 'abc@gmail.com', + from: 'abc@gmail.com', + from_email: 'dummy@gmail.com', + schedule: 1631201576, + source: 'php', + to: '+9182XXXX068', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://rest.clicksend.com/v3/sms/send', + files: {}, + headers: { + Authorization: 'Basic ZHVtbXk6ZHVtbXk=', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + metadata: [ + { + jobId: 2, + + userId: 'u2', + }, + { + jobId: 4, + + userId: 'u4', + }, + { + jobId: 5, + + userId: 'u5', + }, + ], + destination: commonDestination, + statusCode: 200, + }, + ], + }, + }, + }, + }, +]; From c8fd8de666f17777980f2242f17135174545a97c Mon Sep 17 00:00:00 2001 From: Jayachand Date: Mon, 1 Jul 2024 13:23:51 +0530 Subject: [PATCH 021/201] chore: record ut events request size in summary (#3516) * chore: record ut events request size in summary --- src/services/userTransform.ts | 2 +- src/util/stats.js | 9 +++++++++ src/util/statsd.js | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/services/userTransform.ts b/src/services/userTransform.ts index d526eed3a9..9ad92e8ca3 100644 --- a/src/services/userTransform.ts +++ b/src/services/userTransform.ts @@ -175,7 +175,7 @@ export class UserTransformService { ...getTransformationMetadata(eventsToProcess[0]?.metadata), }); - stats.timingSummary('user_transform_batch_size_summary', requestSize, { + stats.summary('user_transform_batch_size_summary', requestSize, { ...metaTags, ...getTransformationMetadata(eventsToProcess[0]?.metadata), }); diff --git a/src/util/stats.js b/src/util/stats.js index 0aa13fc85c..2d6dbe4e3f 100644 --- a/src/util/stats.js +++ b/src/util/stats.js @@ -49,6 +49,14 @@ const timingSummary = (name, start, tags = {}) => { statsClient.timingSummary(name, start, tags); }; +const summary = (name, value, tags = {}) => { + if (!enableStats || !statsClient) { + return; + } + + statsClient.summary(name, value, tags); +}; + const increment = (name, tags = {}) => { if (!enableStats || !statsClient) { return; @@ -103,6 +111,7 @@ module.exports = { init, timing, timingSummary, + summary, increment, counter, gauge, diff --git a/src/util/statsd.js b/src/util/statsd.js index 7613de7975..497b091f70 100644 --- a/src/util/statsd.js +++ b/src/util/statsd.js @@ -26,6 +26,11 @@ class Statsd { this.statsdClient.timing(name, start, tags); } + // summary is just a wrapper around timing for statsd.For prometheus, we will have to implement a different function. + summary(name, value, tags = {}) { + this.statsdClient.timing(name, value, tags); + } + increment(name, tags = {}) { this.statsdClient.increment(name, 1, tags); } From 210475455e470e016452e4da6a3ac7527584ebbd Mon Sep 17 00:00:00 2001 From: Jayachand Date: Mon, 1 Jul 2024 13:59:31 +0530 Subject: [PATCH 022/201] chore: add ivm heap usage metrics (#3517) * chore: record ivm heap size used metric --- src/util/customTransformer-v1.js | 7 +++++++ src/util/prometheus.js | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/util/customTransformer-v1.js b/src/util/customTransformer-v1.js index dc9306681b..b6ed8f9654 100644 --- a/src/util/customTransformer-v1.js +++ b/src/util/customTransformer-v1.js @@ -89,6 +89,12 @@ async function userTransformHandlerV1( throw err; } finally { logger.debug(`Destroying IsolateVM`); + let used_heap_size = 0; + try { + used_heap_size = isolatevm.isolate.getHeapStatisticsSync()?.used_heap_size || 0; + } catch (err) { + logger.error(`Error encountered while getting heap size: ${err.message}`); + } isolatevmFactory.destroy(isolatevm); // send the observability stats const tags = { @@ -99,6 +105,7 @@ async function userTransformHandlerV1( }; stats.counter('user_transform_function_input_events', events.length, tags); stats.timingSummary('user_transform_function_latency_summary', invokeTime, tags); + stats.summary('user_transform_used_heap_size', used_heap_size, tags); } return { transformedEvents, logs }; diff --git a/src/util/prometheus.js b/src/util/prometheus.js index c4b92e9b3c..e261e575bf 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -930,6 +930,22 @@ class Prometheus { 'workspaceId', ], }, + { + name: 'user_transform_used_heap_size', + help: 'user_transform_used_heap_size', + type: 'summary', + labelNames: [ + 'identifier', + 'testMode', + 'sourceType', + 'destinationType', + 'k8_namespace', + 'errored', + 'statusCode', + 'transformationId', + 'workspaceId', + ], + }, ]; metrics.forEach((metric) => { From bb9369ee26f135635a8e0bdda3bc5226ef15db6b Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 1 Jul 2024 09:13:19 +0000 Subject: [PATCH 023/201] chore(release): 1.70.0 --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbe8ae98fe..c6132776a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,38 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.70.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.69.1...v1.70.0) (2024-07-01) + + +### Features + +* add support in fb pixel for advertiser_tracking_enabled ([#3025](https://github.com/rudderlabs/rudder-transformer/issues/3025)) ([769161a](https://github.com/rudderlabs/rudder-transformer/commit/769161a54de03fa3d4fe9f5db9ac51c11fa89dac)) +* add tags to a company in intercom ([#3434](https://github.com/rudderlabs/rudder-transformer/issues/3434)) ([dc8eae2](https://github.com/rudderlabs/rudder-transformer/commit/dc8eae2e8d87df8bb02cdf2662a6003289599525)) +* cm360 enhanced conversions ([#3414](https://github.com/rudderlabs/rudder-transformer/issues/3414)) ([04d0783](https://github.com/rudderlabs/rudder-transformer/commit/04d078310d4b102588f35cf9eb2bc34bf18b23ca)) +* garl record event support ([#3403](https://github.com/rudderlabs/rudder-transformer/issues/3403)) ([60fee0e](https://github.com/rudderlabs/rudder-transformer/commit/60fee0e5a442c4f6c773234d88d86b447434de9b)) +* **integrations/auth0:** add Auth0 event type to event context ([#3433](https://github.com/rudderlabs/rudder-transformer/issues/3433)) ([d4d5a89](https://github.com/rudderlabs/rudder-transformer/commit/d4d5a89951414f02d02101a6582b6e9fa8f9a7a5)) +* onboard closeCRM source ([#3467](https://github.com/rudderlabs/rudder-transformer/issues/3467)) ([bba1a3b](https://github.com/rudderlabs/rudder-transformer/commit/bba1a3b7f09e15f5a59aeed22593751d46960ebb)) +* onboard klaviyo bulk upload destination ([#3348](https://github.com/rudderlabs/rudder-transformer/issues/3348)) ([f55c481](https://github.com/rudderlabs/rudder-transformer/commit/f55c4818155cfbbfeda761153b036563e0877329)) +* onboarding clicksend destination ([#3486](https://github.com/rudderlabs/rudder-transformer/issues/3486)) ([85c8ea7](https://github.com/rudderlabs/rudder-transformer/commit/85c8ea70d661f3692cd9dc1cef8151a474892408)) + + +### Bug Fixes + +* add missing userid and anonymousid for revenuecat source ([#3485](https://github.com/rudderlabs/rudder-transformer/issues/3485)) ([a08de31](https://github.com/rudderlabs/rudder-transformer/commit/a08de31e5ac5829bc5cca7da8982c9a4156b1ed5)) +* adding actual error messgae for default code in facebook destinations ([#3490](https://github.com/rudderlabs/rudder-transformer/issues/3490)) ([dfa0cbd](https://github.com/rudderlabs/rudder-transformer/commit/dfa0cbd3608d22340c9acb5769af4173be4d4bfc)) +* credential error handling ([7eb537c](https://github.com/rudderlabs/rudder-transformer/commit/7eb537c91f40ee4802f14a088a249ebed903e7b5)) +* credential param ([c280d81](https://github.com/rudderlabs/rudder-transformer/commit/c280d81307a3c5da02f728961d7eeeabb79a7e39)) +* credentials payload fix ([e6c5098](https://github.com/rudderlabs/rudder-transformer/commit/e6c50980a12960a419f5c03e120739eea642767a)) +* fixes in javascript transformation ([67e9277](https://github.com/rudderlabs/rudder-transformer/commit/67e9277120e39402b32eac55ffa34a0053b6af61)) +* lint issues ([136ca64](https://github.com/rudderlabs/rudder-transformer/commit/136ca64b3d8b1949950f98d4431a9670e22810cf)) +* mapping changes for aifa,andi and asid ([#3465](https://github.com/rudderlabs/rudder-transformer/issues/3465)) ([a0f5c2f](https://github.com/rudderlabs/rudder-transformer/commit/a0f5c2f7fe2dc8bc983a35840e86655d0f92482b)) +* metadata tags capturing in v0 transformation ([#3492](https://github.com/rudderlabs/rudder-transformer/issues/3492)) ([8129a06](https://github.com/rudderlabs/rudder-transformer/commit/8129a06e3a12c9bca17354598849750498c72d2e)) +* onboard custom alias support for braze ([#3335](https://github.com/rudderlabs/rudder-transformer/issues/3335)) ([1a01362](https://github.com/rudderlabs/rudder-transformer/commit/1a013627d13e0dc286f55de8925bfbb12d9a462b)) +* pr comments ([46cd341](https://github.com/rudderlabs/rudder-transformer/commit/46cd3413af065b76e4f89fb5b2720cbf6213e51b)) +* test ([3137964](https://github.com/rudderlabs/rudder-transformer/commit/31379645c33b9dc75cd839849952297fa233f2cb)) +* tests names, credentialsMap refactor ([3db810c](https://github.com/rudderlabs/rudder-transformer/commit/3db810c857017318c1979965ce653eca3b3fdadf)) +* undefined tests ([819f508](https://github.com/rudderlabs/rudder-transformer/commit/819f508b017f988e302b6e2579cb3da4030dcfa0)) + ### [1.69.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.69.0...v1.69.1) (2024-06-25) diff --git a/package-lock.json b/package-lock.json index e44a756d85..aaa0edfdd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.69.1", + "version": "1.70.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.69.1", + "version": "1.70.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index cc3806cb43..cc35b1a43c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.69.1", + "version": "1.70.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From e752317c7e3aa7bd355c72dab54401a6efc29b30 Mon Sep 17 00:00:00 2001 From: Dhawal Sanghvi Date: Mon, 1 Jul 2024 16:20:11 +0530 Subject: [PATCH 024/201] chore: update changelog to include metric aggregation in a thread --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6132776a4..dee5cac09f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. See [standa * onboard closeCRM source ([#3467](https://github.com/rudderlabs/rudder-transformer/issues/3467)) ([bba1a3b](https://github.com/rudderlabs/rudder-transformer/commit/bba1a3b7f09e15f5a59aeed22593751d46960ebb)) * onboard klaviyo bulk upload destination ([#3348](https://github.com/rudderlabs/rudder-transformer/issues/3348)) ([f55c481](https://github.com/rudderlabs/rudder-transformer/commit/f55c4818155cfbbfeda761153b036563e0877329)) * onboarding clicksend destination ([#3486](https://github.com/rudderlabs/rudder-transformer/issues/3486)) ([85c8ea7](https://github.com/rudderlabs/rudder-transformer/commit/85c8ea70d661f3692cd9dc1cef8151a474892408)) +* add ability to aggregate metrics in a thread ([#3458](https://github.com/rudderlabs/rudder-transformer/pull/3458)) ### Bug Fixes From c8cf2ab75b2c0be4749feb06bb100b6d107a7fc9 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 1 Jul 2024 16:31:32 +0530 Subject: [PATCH 025/201] chore: update changelog for aggregate metrics task --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dee5cac09f..14f8dd61a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ All notable changes to this project will be documented in this file. See [standa * onboard closeCRM source ([#3467](https://github.com/rudderlabs/rudder-transformer/issues/3467)) ([bba1a3b](https://github.com/rudderlabs/rudder-transformer/commit/bba1a3b7f09e15f5a59aeed22593751d46960ebb)) * onboard klaviyo bulk upload destination ([#3348](https://github.com/rudderlabs/rudder-transformer/issues/3348)) ([f55c481](https://github.com/rudderlabs/rudder-transformer/commit/f55c4818155cfbbfeda761153b036563e0877329)) * onboarding clicksend destination ([#3486](https://github.com/rudderlabs/rudder-transformer/issues/3486)) ([85c8ea7](https://github.com/rudderlabs/rudder-transformer/commit/85c8ea70d661f3692cd9dc1cef8151a474892408)) -* add ability to aggregate metrics in a thread ([#3458](https://github.com/rudderlabs/rudder-transformer/pull/3458)) +* add ability to aggregate metrics in a thread ([#3458](https://github.com/rudderlabs/rudder-transformer/pull/3458)) ([6be9d3e](https://github.com/rudderlabs/rudder-transformer/commit/6be9d3e727520ec01697d78a868d9c1a1e4ea085)) ### Bug Fixes From 38946e30fbc26896cfbb92124ba4ca8a4b8c431b Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 2 Jul 2024 09:39:33 +0530 Subject: [PATCH 026/201] fix: update access token key for garl destination (#3522) * fix: update access token key for garl destination * chore: use a new util for garl destination --------- Co-authored-by: Sai Sankeerth --- .../recordTransform.js | 2 +- .../transform.js | 2 +- .../dataDelivery/business.ts | 10 +- .../processor/data.ts | 98 +++++++++---------- .../router/audience.ts | 8 +- .../router/data.ts | 16 +-- .../router/record.ts | 12 +-- test/integrations/testUtils.ts | 14 +++ 8 files changed, 88 insertions(+), 74 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/recordTransform.js b/src/v0/destinations/google_adwords_remarketing_lists/recordTransform.js index 18e7f96821..b05ddb07a2 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/recordTransform.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/recordTransform.js @@ -79,7 +79,7 @@ const processRecordEventArray = ( async function processRecordInputs(groupedRecordInputs) { const { destination, message, metadata } = groupedRecordInputs[0]; - const accessToken = getAccessToken(metadata, 'accessToken'); + const accessToken = getAccessToken(metadata, 'access_token'); const developerToken = getValueFromMessage(metadata, 'secret.developer_token'); const groupedRecordsByAction = lodash.groupBy(groupedRecordInputs, (record) => diff --git a/src/v0/destinations/google_adwords_remarketing_lists/transform.js b/src/v0/destinations/google_adwords_remarketing_lists/transform.js index d879a39c63..3deb9be775 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/transform.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/transform.js @@ -108,7 +108,7 @@ const processEvent = async (metadata, message, destination) => { ); } - const accessToken = getAccessToken(metadata, 'accessToken'); + const accessToken = getAccessToken(metadata, 'access_token'); const developerToken = getValueFromMessage(metadata, 'secret.developer_token'); Object.values(createdPayload).forEach((data) => { diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts index 2aefb18fdd..a036da149d 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts @@ -1,5 +1,5 @@ import { - generateMetadata, + generateGoogleOAuthMetadata, generateProxyV0Payload, generateProxyV1Payload, } from '../../../testUtils'; @@ -90,7 +90,7 @@ const invalidArgumentRequestPayload = { ], }; -const metadataArray = [generateMetadata(1)]; +const metadataArray = [generateGoogleOAuthMetadata(1)]; const expectedStatTags = { destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', @@ -272,7 +272,7 @@ export const testScenariosForV1API = [ response: [ { error: '""', - metadata: generateMetadata(1), + metadata: generateGoogleOAuthMetadata(1), statusCode: 200, }, ], @@ -318,7 +318,7 @@ export const testScenariosForV1API = [ { error: 'Request contains an invalid argument. during ga_audience response transformation', - metadata: generateMetadata(1), + metadata: generateGoogleOAuthMetadata(1), statusCode: 400, }, ], @@ -363,7 +363,7 @@ export const testScenariosForV1API = [ response: [ { error: '""', - metadata: generateMetadata(1), + metadata: generateGoogleOAuthMetadata(1), statusCode: 200, }, ], diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts index 639e28403c..83eae90aea 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts @@ -11,7 +11,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -120,7 +120,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -143,7 +143,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -239,7 +239,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -262,7 +262,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -358,7 +358,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -381,7 +381,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -456,7 +456,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -489,7 +489,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -546,7 +546,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -579,7 +579,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -635,7 +635,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -667,7 +667,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -711,7 +711,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -743,7 +743,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -807,7 +807,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -839,7 +839,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -2712,7 +2712,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -2735,7 +2735,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -2887,7 +2887,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -2967,7 +2967,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -2990,7 +2990,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -5400,7 +5400,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6700,7 +6700,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6723,7 +6723,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6857,7 +6857,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6880,7 +6880,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6944,7 +6944,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -6977,7 +6977,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -9387,7 +9387,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -10687,7 +10687,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -10710,7 +10710,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -10862,7 +10862,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -10942,7 +10942,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -10965,7 +10965,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11115,7 +11115,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11190,7 +11190,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11213,7 +11213,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11316,7 +11316,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11419,7 +11419,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11523,7 +11523,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11546,7 +11546,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11661,7 +11661,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11684,7 +11684,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11799,7 +11799,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11822,7 +11822,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11942,7 +11942,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -11965,7 +11965,7 @@ export const data = [ { metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, @@ -12082,7 +12082,7 @@ export const data = [ }, metadata: { secret: { - accessToken: 'dummy-access', + access_token: 'dummy-access', refresh_token: 'dummy-refresh', developer_token: 'dummy-dev-token', }, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/audience.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/audience.ts index 233f160ad3..e0b534bb15 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/audience.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/audience.ts @@ -1,5 +1,5 @@ import { Destination, RouterTransformationRequest } from '../../../../../src/types'; -import { generateMetadata } from '../../../testUtils'; +import { generateGoogleOAuthMetadata } from '../../../testUtils'; const destination: Destination = { Config: { @@ -30,7 +30,7 @@ const destination: Destination = { export const rETLAudienceRouterRequest: RouterTransformationRequest = { input: [ { - metadata: generateMetadata(1), + metadata: generateGoogleOAuthMetadata(1), destination: destination, message: { userId: 'user 1', @@ -57,7 +57,7 @@ export const rETLAudienceRouterRequest: RouterTransformationRequest = { }, }, { - metadata: generateMetadata(3), + metadata: generateGoogleOAuthMetadata(3), destination: destination, message: { userId: 'user 1', @@ -84,7 +84,7 @@ export const rETLAudienceRouterRequest: RouterTransformationRequest = { }, }, { - metadata: generateMetadata(4), + metadata: generateGoogleOAuthMetadata(4), destination: destination, message: { userId: 'user 1', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts index 35da4daff5..a282b0a56c 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts @@ -79,7 +79,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -175,7 +175,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -322,7 +322,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -442,7 +442,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -558,7 +558,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -571,7 +571,7 @@ export const data = [ dontBatch: false, jobId: 3, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -668,7 +668,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', @@ -711,7 +711,7 @@ export const data = [ destinationId: 'default-destinationId', dontBatch: false, secret: { - accessToken: 'default-accessToken', + access_token: 'default-accessToken', }, sourceId: 'default-sourceId', userId: 'default-userId', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/record.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/record.ts index 743213bcc1..bedf112866 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/record.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/record.ts @@ -1,5 +1,5 @@ import { Destination, RouterTransformationRequest } from '../../../../../src/types'; -import { generateMetadata } from '../../../testUtils'; +import { generateGoogleOAuthMetadata } from '../../../testUtils'; const destination: Destination = { Config: { @@ -51,7 +51,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { }, type: 'record', }, - metadata: generateMetadata(2), + metadata: generateGoogleOAuthMetadata(2), }, { destination: destination, @@ -75,7 +75,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { }, type: 'record', }, - metadata: generateMetadata(4), + metadata: generateGoogleOAuthMetadata(4), }, { destination: destination, @@ -99,7 +99,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { }, type: 'record', }, - metadata: generateMetadata(1), + metadata: generateGoogleOAuthMetadata(1), }, { destination: destination, @@ -123,7 +123,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { }, type: 'record', }, - metadata: generateMetadata(5), + metadata: generateGoogleOAuthMetadata(5), }, { destination: destination, @@ -147,7 +147,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { }, type: 'record', }, - metadata: generateMetadata(3), + metadata: generateGoogleOAuthMetadata(3), }, ], destType: 'google_adwords_remarketing_lists', diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index a6f0720e37..5e0df874f8 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -577,3 +577,17 @@ export const generateMetadata = (jobId: number): any => { dontBatch: false, }; }; +export const generateGoogleOAuthMetadata = (jobId: number): any => { + return { + jobId, + attemptNum: 1, + userId: 'default-userId', + sourceId: 'default-sourceId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + secret: { + access_token: 'default-accessToken', // applicable for google destinations + }, + dontBatch: false, + }; +}; From b18572bd1f064dd15bc43d41a16b091ad53e2433 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Tue, 2 Jul 2024 10:18:52 +0530 Subject: [PATCH 027/201] chore: update changelog to include garl access token key changes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14f8dd61a3..adb96e6d62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ All notable changes to this project will be documented in this file. See [standa * test ([3137964](https://github.com/rudderlabs/rudder-transformer/commit/31379645c33b9dc75cd839849952297fa233f2cb)) * tests names, credentialsMap refactor ([3db810c](https://github.com/rudderlabs/rudder-transformer/commit/3db810c857017318c1979965ce653eca3b3fdadf)) * undefined tests ([819f508](https://github.com/rudderlabs/rudder-transformer/commit/819f508b017f988e302b6e2579cb3da4030dcfa0)) +* update access token key for garl destination ([#3522](https://github.com/rudderlabs/rudder-transformer/issues/3522)) ([38946e3](https://github.com/rudderlabs/rudder-transformer/commit/38946e30fbc26896cfbb92124ba4ca8a4b8c431b)) ### [1.69.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.69.0...v1.69.1) (2024-06-25) From 823d7451174a3fbd2b544fb4774064ac933d2db5 Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Tue, 2 Jul 2024 13:40:12 +0530 Subject: [PATCH 028/201] chore: upgrade packages --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index a51de82788..cfea71087d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.16.0", - "@rudderstack/workflow-engine": "^0.8.10", + "@rudderstack/json-template-engine": "^0.17.0", + "@rudderstack/workflow-engine": "^0.8.11", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -4526,17 +4526,17 @@ } }, "node_modules/@rudderstack/json-template-engine": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.16.0.tgz", - "integrity": "sha512-gcaaDdLFebEH/SbUCiBQw7CJ9O82ck8JR6BKo3V4+o+6fNFR/YIMiTPtaSO+xIUmbh60slZ+AMggBIMxInx8fQ==" + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.0.tgz", + "integrity": "sha512-+M09/mqltvL9fkE7kT1ibH5lIf2Nh63ERoQ8+PpUleYR2QD0fW8HGmvRFicqfOmlWH8afAVvH/KzHjf0p2GGLw==" }, "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.10.tgz", - "integrity": "sha512-CBEJE5AgopHvaX+8HFWb2dtVlr1AXMxZa3Zl45TzZdWCc/IxwjL3JHMv6tPRkxAHM3xuY7TEhFpV61wAUaFOTA==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.11.tgz", + "integrity": "sha512-45y5tBC64zKuppaL6dUhHOnoKyadE22xMnELuE9Hz2qZPiyKlQBeMWpjxQLDXQ2S/Q8zx+J+n1L07zUZyg2rCA==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.16.0", + "@rudderstack/json-template-engine": "^0.17.0", "jsonata": "^2.0.5", "lodash": "^4.17.21", "object-sizeof": "^2.6.4", diff --git a/package.json b/package.json index d68d6e68c5..64310a7c7a 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.16.0", - "@rudderstack/workflow-engine": "^0.8.10", + "@rudderstack/json-template-engine": "^0.17.0", + "@rudderstack/workflow-engine": "^0.8.11", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", From d1bce051034f75fe63cf5d995cd8ce8fe63ca2b7 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Tue, 2 Jul 2024 15:22:13 +0530 Subject: [PATCH 029/201] chore: correcting variable name in clicksend (#3524) --- src/cdk/v2/destinations/clicksend/procWorkflow.yaml | 4 ++-- test/integrations/destinations/clicksend/commonConfig.ts | 2 +- test/integrations/destinations/clicksend/router/data.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cdk/v2/destinations/clicksend/procWorkflow.yaml b/src/cdk/v2/destinations/clicksend/procWorkflow.yaml index 0833bba198..f1680853b7 100644 --- a/src/cdk/v2/destinations/clicksend/procWorkflow.yaml +++ b/src/cdk/v2/destinations/clicksend/procWorkflow.yaml @@ -59,7 +59,7 @@ steps: list_id : parseInt($.getDestinationExternalID(^.message,'CLICKSEND_CONTACT_LIST_ID'), 10), name : String(.properties.name), body : String(.properties.body), - from : $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_EMAIL') || ^.destination.Config.defaultSenderEmail, + from : $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_ID') || ^.destination.Config.defaultSenderId, schedule : $.deduceSchedule(.properties.schedule,{{{{$.getGenericPaths("timestamp")}}}}, ^.destination.Config) }); $.assert(!Number.isNaN(sendCampaignPayload.list_id), "list_id must be an integer"); @@ -71,7 +71,7 @@ steps: name: sendSmsPayload template: | const sendSmsPayload = .message.({ - from: $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_EMAIL') || ^.destination.Config.defaultSenderEmail, + from: $.getDestinationExternalID(^.message,'CLICKSEND_SENDER_ID') || ^.destination.Config.defaultSenderId, email: {{{{$.getGenericPaths("emailOnly")}}}}, to: {{{{$.getGenericPaths("phone")}}}}, body: .properties.body, diff --git a/test/integrations/destinations/clicksend/commonConfig.ts b/test/integrations/destinations/clicksend/commonConfig.ts index 04c51736f0..815973b8d9 100644 --- a/test/integrations/destinations/clicksend/commonConfig.ts +++ b/test/integrations/destinations/clicksend/commonConfig.ts @@ -12,7 +12,7 @@ export const destination = { defaultCampaignScheduleUnit: 'day', defaultCampaignSchedule: '2', defaultSource: 'php', - defaultSenderEmail: 'abc@gmail.com', + defaultSenderId: 'abc@gmail.com', defaultSenderPhoneNumber: '+919XXXXXXXX8', oneTrustCookieCategories: [ { diff --git a/test/integrations/destinations/clicksend/router/data.ts b/test/integrations/destinations/clicksend/router/data.ts index b8b6c49b90..3aa3c0abc4 100644 --- a/test/integrations/destinations/clicksend/router/data.ts +++ b/test/integrations/destinations/clicksend/router/data.ts @@ -15,7 +15,7 @@ const commonDestination = { clicksendUsername: 'dummy', defaultCampaignSchedule: '2', defaultCampaignScheduleUnit: 'day', - defaultSenderEmail: 'abc@gmail.com', + defaultSenderId: 'abc@gmail.com', defaultSenderPhoneNumber: '+919XXXXXXXX8', defaultSource: 'php', oneTrustCookieCategories: [ From aa0ea60c994d5f74925d3e4860684f18cf7975fe Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 2 Jul 2024 19:56:23 +0530 Subject: [PATCH 030/201] chore: filtered logging and log for all destinations (#3484) * chore: filtered logging and log for all destinations Signed-off-by: Sai Sankeerth * chore: update request & response logs to info level, remove level based filtering * chore: update to info log * chore: clean-up code * chore: remove unused imports * chore: add test-case for request & response logs Signed-off-by: Sai Sankeerth * chore: add no metadata tc * chore: log when metadata is array of objects - add test-cases * chore: empty string default endpointPath Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> * chore: filtered logging and log for all destinations refactor (#3503) * chore: filtered logging and log for all destinations refactor Signed-off-by: Sai Sankeerth * chore: remove unnecessary comments * chore: rename variable --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth * chore: update log level to always lower-case * chore: fix error response handling in commonHandler --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> --- src/adapters/network.js | 177 +++++----- src/adapters/network.test.js | 311 +++++++++++++++++- src/logger.js | 49 ++- src/util/logger.js | 25 ++ .../networkHandler.js | 46 +-- .../networkHandler.js | 89 +---- .../utils.js | 20 +- .../networkHandler.js | 85 +---- src/v0/destinations/klaviyo/util.js | 22 +- .../campaign_manager/networkHandler.js | 12 +- src/v1/destinations/monday/networkHandler.js | 11 +- 11 files changed, 479 insertions(+), 368 deletions(-) create mode 100644 src/util/logger.js diff --git a/src/adapters/network.js b/src/adapters/network.js index 850ba649c8..86af19d6a1 100644 --- a/src/adapters/network.js +++ b/src/adapters/network.js @@ -5,9 +5,9 @@ const lodash = require('lodash'); const http = require('http'); const https = require('https'); const axios = require('axios'); -const log = require('../logger'); +const logger = require('../logger'); const stats = require('../util/stats'); -const { removeUndefinedValues } = require('../v0/util'); +const { removeUndefinedValues, isDefinedAndNotNullAndNotEmpty } = require('../v0/util'); const { processAxiosResponse } = require('./utils/networkUtils'); // Only for tests const { setResponsesForMockAxiosAdapter } = require('../../test/testHelper'); @@ -56,7 +56,7 @@ const fireOutgoingReqStats = ({ statusCode, clientResponse, }) => { - const logMetaInfo = log.getLogMetadata(metadata); + const logMetaInfo = logger.getLogMetadata(metadata); stats.timing('outgoing_request_latency', startTime, { ...logMetaInfo, feature, @@ -118,24 +118,66 @@ const enhanceRequestOptions = (options) => { return requestOptions; }; -/** - * sends an http request with underlying client, expects request options - * @param {*} options - * @returns - */ -const httpSend = async (options, statTags = {}) => { +const getResponseDetails = (clientResponse) => { + if (!clientResponse.success) { + const { response } = clientResponse.response; + // non 2xx status handling for axios response + if (response) { + const { data, status, headers } = response; + return { + body: data || '', + status: status || 500, + ...(isDefinedAndNotNullAndNotEmpty(headers) ? { headers } : {}), + }; + } + return {}; + } + const { data, status, headers } = clientResponse.response; + return { + body: data || '', + status: status || 500, + ...(isDefinedAndNotNullAndNotEmpty(headers) ? { headers } : {}), + }; +}; + +const getHttpMethodArgs = (method, { url, data, requestOptions }) => { + const requestMethod = method?.toLowerCase?.(); + switch (requestMethod) { + case 'post': + case 'put': + case 'patch': + return [url, data, requestOptions]; + case 'get': + case 'delete': + return [url, requestOptions]; + default: // constructor + return [requestOptions]; + } +}; +const commonHandler = async (axiosMethod, { statTags, method, ...args }) => { let clientResponse; - // here the options argument K-Vs will take priority over the default options - const requestOptions = enhanceRequestOptions(options); + const { url, data, options, requestOptions } = args; + const commonMsg = `[${statTags?.destType?.toUpperCase?.() || ''}] ${statTags?.endpointPath || ''}`; + logger.requestLog(`${commonMsg} request`, { + metadata: statTags?.metadata, + requestDetails: { + url: url || requestOptions?.url, + body: data || requestOptions?.data, + method, + }, + }); const startTime = new Date(); - const { url, data, method } = requestOptions; try { - const response = await axios(requestOptions); + const response = await axiosMethod(...getHttpMethodArgs(method, args)); clientResponse = { success: true, response }; } catch (err) { clientResponse = { success: false, response: err }; } finally { + logger.responseLog(`${commonMsg} response`, { + metadata: statTags?.metadata, + responseDetails: getResponseDetails(clientResponse), + }); fireHTTPStats(clientResponse, startTime, statTags); } @@ -143,6 +185,16 @@ const httpSend = async (options, statTags = {}) => { return clientResponse; }; +/** + * sends an http request with underlying client, expects request options + * @param {*} options + * @returns + */ +const httpSend = async (options, statTags = {}) => { + const requestOptions = enhanceRequestOptions(options); + return commonHandler(axios, { statTags, options, requestOptions }); +}; + /** * * @param {*} url @@ -152,21 +204,8 @@ const httpSend = async (options, statTags = {}) => { * handles http GET requests returns promise as a response throws error in case of non 2XX statuses */ const httpGET = async (url, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.get(url, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, options, method: 'GET' }, clientResponse); - return clientResponse; + return commonHandler(axios.get, { statTags, method: 'get', url, options, requestOptions }); }; /** @@ -178,21 +217,8 @@ const httpGET = async (url, options, statTags = {}) => { * handles http DELETE requests returns promise as a response throws error in case of non 2XX statuses */ const httpDELETE = async (url, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.delete(url, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, options, method: 'DELETE' }, clientResponse); - return clientResponse; + return commonHandler(axios.delete, { statTags, method: 'delete', url, options, requestOptions }); }; /** @@ -205,21 +231,15 @@ const httpDELETE = async (url, options, statTags = {}) => { * handles http POST requests returns promise as a response throws error in case of non 2XX statuses */ const httpPOST = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.post(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'POST' }, clientResponse); - return clientResponse; + return commonHandler(axios.post, { + statTags, + url, + method: 'post', + data, + options, + requestOptions, + }); }; /** @@ -232,21 +252,8 @@ const httpPOST = async (url, data, options, statTags = {}) => { * handles http PUT requests returns promise as a response throws error in case of non 2XX statuses */ const httpPUT = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.put(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'PUT' }, clientResponse); - return clientResponse; + return commonHandler(axios.put, { statTags, url, data, method: 'put', options, requestOptions }); }; /** @@ -259,21 +266,15 @@ const httpPUT = async (url, data, options, statTags = {}) => { * handles http PATCH requests returns promise as a response throws error in case of non 2XX statuses */ const httpPATCH = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.patch(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'PATCH' }, clientResponse); - return clientResponse; + return commonHandler(axios.patch, { + statTags, + url, + method: 'patch', + data, + options, + requestOptions, + }); }; const getPayloadData = (body) => { @@ -352,7 +353,7 @@ const prepareProxyRequest = (request) => { // TODO: break; default: - log.debug(`body format ${payloadFormat} not supported`); + logger.debug(`body format ${payloadFormat} not supported`); } // Ref: https://github.com/rudderlabs/rudder-server/blob/master/router/network.go#L164 headers['User-Agent'] = 'RudderLabs'; @@ -426,14 +427,6 @@ const proxyRequest = async (request, destType) => { headers, method, }; - log.requestLog(`[${destType.toUpperCase()}] delivering data`, { - metadata, - requestDetails: { - body: data, - url: endpoint, - method, - }, - }); const response = await httpSend(requestOptions, { feature: 'proxy', destType, diff --git a/src/adapters/network.test.js b/src/adapters/network.test.js index ff112c53d4..5f5ad97437 100644 --- a/src/adapters/network.test.js +++ b/src/adapters/network.test.js @@ -1,6 +1,29 @@ -const { getFormData } = require('./network'); +const mockLoggerInstance = { + info: jest.fn(), +}; +const { getFormData, httpPOST, httpGET, httpSend } = require('./network'); const { getFuncTestData } = require('../../test/testHelper'); +jest.mock('@rudderstack/integrations-lib', () => { + return { + ...jest.requireActual('@rudderstack/integrations-lib'), + structuredLogger: jest.fn().mockReturnValue(mockLoggerInstance), + }; +}); + +jest.mock('axios', () => jest.fn()); + +jest.mock('../util/logger', () => ({ + ...jest.requireActual('../util/logger'), + getMatchedMetadata: jest.fn(), +})); + +const axios = require('axios'); +const loggerUtil = require('../util/logger'); + +axios.post = jest.fn(); +axios.get = jest.fn(); + const funcName = 'getFormData'; describe(`${funcName} Tests`, () => { @@ -15,3 +38,289 @@ describe(`${funcName} Tests`, () => { expect(result.toString()).toEqual(output); }); }); + +describe('logging in http methods', () => { + beforeEach(() => { + mockLoggerInstance.info.mockClear(); + loggerUtil.getMatchedMetadata.mockClear(); + }); + test('post - when proper metadata(object) is sent should call logger without error', async () => { + const statTags = { + metadata: { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + }, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([statTags.metadata]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(1, ' [DT] /m/n/o request', { + body: {}, + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + url: 'https://some.web.com/m/n/o', + method: 'post', + }); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(2, ' [DT] /m/n/o response', { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + body: { a: 1, b: 2, c: 'abc' }, + status: 200, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + }); + + test('post - when metadata is not sent should call logger without error', async () => { + const statTags = { + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('post - when metadata is string should call logger without error', async () => { + const statTags = { + metadata: 'random metadata', + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([statTags.metadata]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('post - when proper metadata(Array) is sent should call logger without error', async () => { + const metadata = [ + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 1, + }, + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 2, + }, + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 3, + }, + ]; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(metadata.length * 2); + + [1, 2, 3].forEach((i) => { + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(i, ' [DT] /m/n/o request', { + body: {}, + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + url: 'https://some.web.com/m/n/o', + method: 'post', + }); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith( + i + metadata.length, + ' [DT] /m/n/o response', + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + body: { a: 1, b: 2, c: 'abc' }, + status: 200, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }, + ); + }); + }); + + test('post - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios.post).toHaveBeenCalledWith( + 'https://some.web.com/m/n/o', + {}, + expect.objectContaining({}), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('get - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.get.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpGET('https://some.web.com/m/n/o', {}, statTags)).resolves.not.toThrow(Error); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios.get).toHaveBeenCalledWith( + 'https://some.web.com/m/n/o', + expect.objectContaining({}), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('constructor - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect( + httpSend({ url: 'https://some.web.com/m/n/o', method: 'get' }, statTags), + ).resolves.not.toThrow(Error); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios).toHaveBeenCalledWith( + expect.objectContaining({ + url: 'https://some.web.com/m/n/o', + method: 'get', + }), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); +}); diff --git a/src/logger.js b/src/logger.js index 6daff56c67..6863bc4558 100644 --- a/src/logger.js +++ b/src/logger.js @@ -1,10 +1,10 @@ /* istanbul ignore file */ const { LOGLEVELS, structuredLogger } = require('@rudderstack/integrations-lib'); - +const { getMatchedMetadata } = require('./util/logger'); // LOGGER_IMPL can be `console` or `winston` const loggerImpl = process.env.LOGGER_IMPL ?? 'winston'; -let logLevel = process.env.LOG_LEVEL ?? 'error'; +let logLevel = (process.env.LOG_LEVEL ?? 'error').toLowerCase(); const logger = structuredLogger({ level: logLevel, @@ -88,16 +88,18 @@ const log = (logMethod, logArgs) => { if (logInfo) { const { metadata, ...otherLogInfoArgs } = logInfo; if (Array.isArray(metadata)) { - metadata.forEach((m) => { - logMethod( - message, - { - ...getLogMetadata(m), - ...otherLogInfoArgs, - }, - ...otherArgs, - ); - }); + metadata + .filter((m) => typeof m === 'object' && !Array.isArray(m)) + .forEach((m) => { + logMethod( + message, + { + ...getLogMetadata(m), + ...otherLogInfoArgs, + }, + ...otherArgs, + ); + }); return; } logMethod( @@ -143,20 +145,19 @@ const error = (...args) => { const requestLog = (identifierMsg, { metadata, requestDetails: { url, body, method } }) => { const logger = getLogger(); - if (LOGLEVELS[logLevel] === LOGLEVELS.warn) { - const reqLogArgs = [identifierMsg, { metadata, url, body, method }]; - log(logger.warn, reqLogArgs); + const filteredMetadata = getMatchedMetadata(metadata); + if (filteredMetadata.length > 0) { + const reqLogArgs = [identifierMsg, { metadata: filteredMetadata, url, body, method }]; + log(logger.info, reqLogArgs); } }; -const responseLog = ( - identifierMsg, - { metadata, responseDetails: { response: body, status, headers } }, -) => { +const responseLog = (identifierMsg, { metadata, responseDetails: { body, status, headers } }) => { const logger = getLogger(); - if (LOGLEVELS[logLevel] === LOGLEVELS.warn) { - const resLogArgs = [identifierMsg, { metadata, body, status, headers }]; - log(logger.warn, resLogArgs); + const filteredMetadata = getMatchedMetadata(metadata); + if (filteredMetadata.length > 0) { + const resLogArgs = [identifierMsg, { metadata: filteredMetadata, body, status, headers }]; + log(logger.info, resLogArgs); } }; @@ -166,10 +167,6 @@ module.exports = { warn, error, setLogLevel, - // levelDebug, - // levelInfo, - // levelWarn, - // levelError, responseLog, getLogMetadata, requestLog, diff --git a/src/util/logger.js b/src/util/logger.js new file mode 100644 index 0000000000..9a5a3d52db --- /dev/null +++ b/src/util/logger.js @@ -0,0 +1,25 @@ +const logDestIds = (process.env.LOG_DEST_IDS ?? '').split(',')?.map?.((s) => s?.trim?.()); // should be comma separated +const logWspIds = (process.env.LOG_WSP_IDS ?? '').split(',')?.map?.((s) => s?.trim?.()); // should be comma separated + +const isMetadataMatching = (m) => { + const isDestIdConfigured = logDestIds?.find?.((envDId) => envDId && envDId === m?.destinationId); + const isWspIdConfigured = logWspIds?.find?.( + (envWspId) => envWspId && envWspId === m?.workspaceId, + ); + return Boolean(isDestIdConfigured || isWspIdConfigured); +}; + +const getMatchedMetadata = (metadata) => { + if (!Array.isArray(metadata)) { + if (isMetadataMatching(metadata)) { + return [metadata]; + } + return []; + } + return metadata.filter((m) => isMetadataMatching(m)); +}; + +module.exports = { + isMetadataMatching, + getMatchedMetadata, +}; diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index d82349c04d..21a5fff78b 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -4,9 +4,8 @@ const { NetworkError, NetworkInstrumentationError } = require('@rudderstack/inte const SqlString = require('sqlstring'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); -const { CONVERSION_ACTION_ID_CACHE_TTL, destType } = require('./config'); +const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config'); const Cache = require('../../util/cache'); -const logger = require('../../../logger'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -39,10 +38,6 @@ const getConversionActionId = async ({ method, headers, params, metadata }) => { query: queryString, }; const searchStreamEndpoint = `${BASE_ENDPOINT}/${params.customerId}/googleAds:searchStream`; - logger.requestLog(`[${destType.toUpperCase()}] get conversion action id request`, { - metadata, - requestDetails: { url: searchStreamEndpoint, body: data, method }, - }); const requestBody = { url: searchStreamEndpoint, data, @@ -61,15 +56,7 @@ const getConversionActionId = async ({ method, headers, params, metadata }) => { metadata, }, ); - const { status, response, headers: responseHeaders } = gaecConversionActionIdResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion action id response`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { status, response } = gaecConversionActionIdResponse; if (!isHttpStatusSuccess(status)) { throw new NetworkError( `"${JSON.stringify( @@ -116,31 +103,14 @@ const ProxyRequest = async (request) => { 'conversionAdjustments[0].conversionAction', `customers/${params.customerId}/conversionActions/${conversionActionId}`, ); - logger.requestLog(`[${destType.toUpperCase()}] conversion enhancement request`, { - metadata, - requestDetails: { url: endpoint, body: body.JSON, method }, - }); const requestBody = { url: endpoint, data: body.JSON, headers, method }; - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - requestBody, - { - destType: 'google_adwords_enhanced_conversions', - feature: 'proxy', - endpointPath: `/googleAds:uploadOfflineUserData`, - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - const { response: processedResp, status, headers: responseHeaders } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] conversion enhancement response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', requestBody, { + destType: 'google_adwords_enhanced_conversions', + feature: 'proxy', + endpointPath: `/googleAds:uploadOfflineUserData`, + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: { - response: processedResp, - status, - headers: responseHeaders, - }, }); return response; }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index 51bc57d176..8c86fc9bc0 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -21,20 +21,11 @@ const { getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); -const logger = require('../../../logger'); const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL); const createJob = async ({ endpoint, headers, payload, metadata }) => { const endPoint = `${endpoint}:create`; - logger.requestLog(`[${destType.toUpperCase()}] job creation request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); let createJobResponse = await httpPOST( endPoint, payload, @@ -49,15 +40,7 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { }, ); createJobResponse = processAxiosResponse(createJobResponse); - const { response, status, headers: responseHeaders } = createJobResponse; - logger.responseLog(`[${destType.toUpperCase()}] create job`, { - metadata, - responseDetails: { - headers: responseHeaders, - status, - response, - }, - }); + const { response, status } = createJobResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, @@ -71,14 +54,6 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata }) => { const endPoint = `${endpoint}/${jobId}:addOperations`; - logger.requestLog(`[${destType.toUpperCase()}] add conversion to job request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); let addConversionToJobResponse = await httpPOST( endPoint, payload, @@ -93,15 +68,7 @@ const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata }, ); addConversionToJobResponse = processAxiosResponse(addConversionToJobResponse); - const { response, status, headers: responseHeaders } = addConversionToJobResponse; - logger.responseLog(`[${destType.toUpperCase()}] add conversion to job`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = addConversionToJobResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Add Conversion`, @@ -115,15 +82,7 @@ const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata const runTheJob = async ({ endpoint, headers, payload, jobId, metadata }) => { const endPoint = `${endpoint}/${jobId}:run`; - logger.requestLog(`[${destType.toUpperCase()}] run job request`, { - metadata, - requestDetails: { - body: payload, - method: 'POST', - url: endPoint, - }, - }); - const { httpResponse: executeJobResponse, processedResponse } = await handleHttpRequest( + const { httpResponse: executeJobResponse } = await handleHttpRequest( 'post', endPoint, payload, @@ -137,15 +96,6 @@ const runTheJob = async ({ endpoint, headers, payload, jobId, metadata }) => { metadata, }, ); - const { headers: responseHeaders, response, status } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] run job`, { - metadata, - responseDetails: { - response, - status, - responseHeaders, - }, - }); return executeJobResponse; }; @@ -167,14 +117,6 @@ const getConversionCustomVariable = async ({ headers, params, metadata }) => { const requestOptions = { headers, }; - logger.requestLog(`[${destType.toUpperCase()}] get conversion custom variable request`, { - metadata, - requestDetails: { - url: endpoint, - body: data, - method: 'post', - }, - }); let searchStreamResponse = await httpPOST(endpoint, data, requestOptions, { destType: 'google_adwords_offline_conversions', feature: 'proxy', @@ -184,15 +126,7 @@ const getConversionCustomVariable = async ({ headers, params, metadata }) => { metadata, }); searchStreamResponse = processAxiosResponse(searchStreamResponse); - const { response, status, headers: responseHeaders } = searchStreamResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion custom variable`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = searchStreamResponse; if (!isHttpStatusSuccess(status)) { throw new NetworkError( `[Google Ads Offline Conversions]:: ${response?.[0]?.error?.message} during google_ads_offline_conversions response transformation`, @@ -339,11 +273,7 @@ const ProxyRequest = async (request) => { } } const requestBody = { url: endpoint, data: body.JSON, headers, method }; - logger.requestLog(`[${destType.toUpperCase()}] offline conversion creation request`, { - metadata, - requestDetails: { url: requestBody.url, body: requestBody.data, method }, - }); - const { httpResponse, processedResponse } = await handleHttpRequest('constructor', requestBody, { + const { httpResponse } = await handleHttpRequest('constructor', requestBody, { feature: 'proxy', destType: 'gogole_adwords_offline_conversions', endpointPath: `/proxy`, @@ -351,15 +281,6 @@ const ProxyRequest = async (request) => { module: 'dataDelivery', metadata, }); - const { headers: responseHeaders, status, response } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] deliver event to destination`, { - metadata, - responseDetails: { - response, - headers: responseHeaders, - status, - }, - }); return httpResponse; }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index bf1773d450..7c21371ccf 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -30,13 +30,11 @@ const { CLICK_CONVERSION, trackCallConversionsMapping, consentConfigMap, - destType, } = require('./config'); const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const Cache = require('../../util/cache'); const helper = require('./helper'); const { finaliseConsent } = require('../../util/googleUtils'); -const logger = require('../../../logger'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -71,14 +69,6 @@ const getConversionActionId = async ({ headers, params, metadata }) => { const requestOptions = { headers, }; - logger.requestLog(`[${destType.toUpperCase()}] get conversion action id request`, { - metadata, - requestDetails: { - url: endpoint, - body: data, - method: 'post', - }, - }); let searchStreamResponse = await httpPOST(endpoint, data, requestOptions, { destType: 'google_adwords_offline_conversions', feature: 'transformation', @@ -88,15 +78,7 @@ const getConversionActionId = async ({ headers, params, metadata }) => { metadata, }); searchStreamResponse = processAxiosResponse(searchStreamResponse); - const { response, status, headers: responseHeaders } = searchStreamResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion action id response`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = searchStreamResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${JSON.stringify( diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 82fb62b74e..4c9a9156e8 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,14 +1,12 @@ const { NetworkError } = require('@rudderstack/integrations-lib'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); -const logger = require('../../../logger'); const { processAxiosResponse, getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); -const { destType } = require('./config'); /** * This function helps to create a offlineUserDataJobs * @param endpoint @@ -39,29 +37,13 @@ const createJob = async ({ endpoint, headers, method, params, metadata }) => { headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] job creation request`, { + const { httpResponse } = await handleHttpRequest('constructor', jobCreatingRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/customers/create', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - requestDetails: { - url: jobCreatingRequest.url, - body: jobCreatingRequest.data, - method: jobCreatingRequest.method, - }, - }); - const { httpResponse, processedResponse } = await handleHttpRequest( - 'constructor', - jobCreatingRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/customers/create', - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] job creation response`, { - metadata, - responseDetails: processedResponse, }); return httpResponse; }; @@ -82,29 +64,13 @@ const addUserToJob = async ({ endpoint, headers, method, jobId, body, metadata } headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] add user to job request`, { - metadata, - requestDetails: { - url: secondRequest.url, - body: secondRequest.data, - method: secondRequest.method, - }, - }); - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - secondRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/addOperations', - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] add user to job response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', secondRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/addOperations', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: processedResponse, }); return response; }; @@ -123,28 +89,13 @@ const runTheJob = async ({ endpoint, headers, method, jobId, metadata }) => { headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] run job request`, { - metadata, - requestDetails: { - url: thirdRequest.url, - body: thirdRequest.data, - method: thirdRequest.method, - }, - }); - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - thirdRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/run', - requestMethod: 'POST', - module: 'dataDelivery', - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] run job response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', thirdRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/run', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: processedResponse, }); return response; }; diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 4db59cfb05..3f6f6ca2ca 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -2,7 +2,6 @@ const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils'); const lodash = require('lodash'); const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib'); const { WhiteListedTraits } = require('../../../constants'); -const logger = require('../../../logger'); const { constructPayload, @@ -18,13 +17,7 @@ const tags = require('../../util/tags'); const { handleHttpRequest } = require('../../../adapters/network'); const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); -const { - BASE_ENDPOINT, - MAPPING_CONFIG, - CONFIG_CATEGORIES, - MAX_BATCH_SIZE, - destType, -} = require('./config'); +const { BASE_ENDPOINT, MAPPING_CONFIG, CONFIG_CATEGORIES, MAX_BATCH_SIZE } = require('./config'); const REVISION_CONSTANT = '2023-02-22'; @@ -43,14 +36,6 @@ const getIdFromNewOrExistingProfile = async ({ endpoint, payload, requestOptions let response; let profileId; const endpointPath = '/api/profiles'; - logger.requestLog(`[${destType.toUpperCase()}] get id from profile request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); const { processedResponse: resp } = await handleHttpRequest( 'post', endpoint, @@ -62,12 +47,9 @@ const getIdFromNewOrExistingProfile = async ({ endpoint, payload, requestOptions endpointPath, requestMethod: 'POST', module: 'router', + metadata, }, ); - logger.responseLog(`[${destType.toUpperCase()}] get id from profile response`, { - metadata, - responseDetails: resp, - }); /** * 201 - profile is created with updated payload no need to update it again (suppress event with 299 status code) diff --git a/src/v1/destinations/campaign_manager/networkHandler.js b/src/v1/destinations/campaign_manager/networkHandler.js index eee3869fb5..300b5f9676 100644 --- a/src/v1/destinations/campaign_manager/networkHandler.js +++ b/src/v1/destinations/campaign_manager/networkHandler.js @@ -9,7 +9,6 @@ const { getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../../v0/util/tags'); -const logger = require('../../../logger'); function isEventAbortableAndExtractErrMsg(element, proxyOutputObj) { let isAbortable = false; @@ -39,16 +38,7 @@ const responseHandler = (responseParams) => { const { destinationResponse, rudderJobMetadata } = responseParams; const message = `[CAMPAIGN_MANAGER Response V1 Handler] - Request Processed Successfully`; const responseWithIndividualEvents = []; - const { response, status, headers } = destinationResponse; - - logger.responseLog('[campaign_manager] response handling', { - metadata: rudderJobMetadata, - responseDetails: { - headers, - response, - status, - }, - }); + const { response, status } = destinationResponse; if (isHttpStatusSuccess(status)) { // check for Partial Event failures and Successes diff --git a/src/v1/destinations/monday/networkHandler.js b/src/v1/destinations/monday/networkHandler.js index 5a0313a27b..28a7f1abc0 100644 --- a/src/v1/destinations/monday/networkHandler.js +++ b/src/v1/destinations/monday/networkHandler.js @@ -6,7 +6,6 @@ const { } = require('../../../adapters/utils/networkUtils'); const { isHttpStatusSuccess } = require('../../../v0/util/index'); const tags = require('../../../v0/util/tags'); -const logger = require('../../../logger'); const checkIfUpdationOfStatusRequired = (response) => { let errorMsg = ''; @@ -42,16 +41,8 @@ const responseHandler = (responseParams) => { const message = '[MONDAY Response V1 Handler] - Request Processed Successfully'; const responseWithIndividualEvents = []; - const { response, status, headers } = destinationResponse; + const { response, status } = destinationResponse; - logger.responseLog('[monday] proxy response', { - metadata: rudderJobMetadata, - responseDetails: { - headers, - response, - status, - }, - }); // batching not supported if (isHttpStatusSuccess(status)) { const proxyOutput = { From f71c105bed8474a5c5fdf80e9c957cf5a1d92b17 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 2 Jul 2024 19:57:20 +0530 Subject: [PATCH 031/201] chore: handle too many soql queries in salesforce (#3498) --- src/v0/destinations/salesforce/utils.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/salesforce/utils.js b/src/v0/destinations/salesforce/utils.js index 85061ce2b2..bb1236d290 100644 --- a/src/v0/destinations/salesforce/utils.js +++ b/src/v0/destinations/salesforce/utils.js @@ -58,12 +58,13 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey, authori } else if ( status === 400 && matchErrorCode('CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY') && - response?.message?.includes('UNABLE_TO_LOCK_ROW') + (response?.message?.includes('UNABLE_TO_LOCK_ROW') || + response?.message?.includes('Too many SOQL queries')) ) { // handling the error case where the record is locked by another background job // this is a retryable error throw new RetryableError( - `${DESTINATION} Request Failed - "Row locked due to another background running on the same object", (Retryable) ${sourceMessage}`, + `${DESTINATION} Request Failed - "${response.message}", (Retryable) ${sourceMessage}`, 500, destResponse, ); From 3b6b13ee9c610ace844be4719fdc9c5402b1c353 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Wed, 3 Jul 2024 10:30:57 +0530 Subject: [PATCH 032/201] chore: add metadata to stattags --- src/v0/destinations/gainsight/transform.js | 12 ++++++------ src/v0/destinations/gainsight/util.js | 19 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/v0/destinations/gainsight/transform.js b/src/v0/destinations/gainsight/transform.js index a55febb844..8c39b168fb 100644 --- a/src/v0/destinations/gainsight/transform.js +++ b/src/v0/destinations/gainsight/transform.js @@ -79,7 +79,7 @@ const identifyResponseBuilder = (message, { Config }) => { * Person Object. * https://support.gainsight.com/Gainsight_NXT/API_and_Developer_Docs/Company_API/Company_API_Documentation */ -const groupResponseBuilder = async (message, { Config }) => { +const groupResponseBuilder = async (message, { Config }, metadata) => { const { accessKey } = getConfigOrThrowError(Config, ['accessKey'], 'group'); const groupName = getValueFromMessage(message, 'traits.name'); if (!groupName) { @@ -91,7 +91,7 @@ const groupResponseBuilder = async (message, { Config }) => { throw new InstrumentationError('user email is required for group'); } - const resp = await searchGroup(groupName, Config); + const resp = await searchGroup(groupName, Config, metadata); let payload = constructPayload(message, groupMapping); const defaultKeys = Object.keys(payload); @@ -104,9 +104,9 @@ const groupResponseBuilder = async (message, { Config }) => { let groupGsid; if (resp.data.records.length === 0) { - groupGsid = await createGroup(payload, Config); + groupGsid = await createGroup(payload, Config, metadata); } else { - groupGsid = await updateGroup(payload, Config); + groupGsid = await updateGroup(payload, Config, metadata); } const responsePayload = { @@ -184,7 +184,7 @@ const trackResponseBuilder = (message, { Config }) => { * Processing Single event */ const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -196,7 +196,7 @@ const process = async (event) => { response = identifyResponseBuilder(message, destination); break; case EventType.GROUP: - response = await groupResponseBuilder(message, destination); + response = await groupResponseBuilder(message, destination, metadata); break; case EventType.TRACK: response = trackResponseBuilder(message, destination); diff --git a/src/v0/destinations/gainsight/util.js b/src/v0/destinations/gainsight/util.js index a035da6993..332d307211 100644 --- a/src/v0/destinations/gainsight/util.js +++ b/src/v0/destinations/gainsight/util.js @@ -42,13 +42,12 @@ const makeHttpRequest = async ({ method, url, payload, config, statTags, options destType: 'gainsight', feature: 'transformation', requestMethod: method.toUpperCase(), - endpointPath: url, module: 'router', ...statTags, }, ); -const searchGroup = async (groupName, Config) => { +const searchGroup = async (groupName, Config, metadata) => { const { processedResponse } = await makeHttpRequest({ method: 'post', url: `${ENDPOINTS.groupSearchEndpoint(Config.domain)}`, @@ -56,6 +55,7 @@ const searchGroup = async (groupName, Config) => { config: Config, statTags: { endpointPath: '/data/objects/query/Company', + metadata, }, }); @@ -74,7 +74,7 @@ const searchGroup = async (groupName, Config) => { return processedResponse.response; }; -const createGroup = async (payload, Config) => { +const createGroup = async (payload, Config, metadata) => { const { processedResponse } = await makeHttpRequest({ method: 'post', url: `${ENDPOINTS.groupCreateEndpoint(Config.domain)}`, @@ -82,7 +82,8 @@ const createGroup = async (payload, Config) => { records: [payload], }, config: Config, - options: { + statTags: { + metadata, endpointPath: '/data/objects/Company', }, }); @@ -102,7 +103,7 @@ const createGroup = async (payload, Config) => { return processedResponse.response.data.records[0].Gsid; }; -const updateGroup = async (payload, Config) => { +const updateGroup = async (payload, Config, metadata) => { const { processedResponse } = await makeHttpRequest({ method: 'put', url: `${ENDPOINTS.groupUpdateEndpoint(Config.domain)}`, @@ -111,14 +112,14 @@ const updateGroup = async (payload, Config) => { }, config: Config, options: { - endpointPath: '/data/objects/Company', - }, - - statTags: { params: { keys: 'Name', }, }, + statTags: { + endpointPath: '/data/objects/Company', + metadata, + }, }); if (!isHttpStatusSuccess(processedResponse.status)) { From a0026152e4763569dc05693af1639e5a44d47b05 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:34:47 +0530 Subject: [PATCH 033/201] chore: revert fb pixel change --- .../data/FBPIXELCommonConfig.json | 5 - .../facebook_pixel/router/data.ts | 110 ------------------ 2 files changed, 115 deletions(-) diff --git a/src/v0/destinations/facebook_pixel/data/FBPIXELCommonConfig.json b/src/v0/destinations/facebook_pixel/data/FBPIXELCommonConfig.json index 1ba6c4c82f..11a81a20ab 100644 --- a/src/v0/destinations/facebook_pixel/data/FBPIXELCommonConfig.json +++ b/src/v0/destinations/facebook_pixel/data/FBPIXELCommonConfig.json @@ -33,10 +33,5 @@ "context.traits.action_source", "properties.action_source" ] - }, - { - "destKey": "advertiser_tracking_enabled", - "sourceKeys": "context.device.adTrackingEnabled", - "required": false } ] diff --git a/test/integrations/destinations/facebook_pixel/router/data.ts b/test/integrations/destinations/facebook_pixel/router/data.ts index 1d3b35b42a..c754ffdc61 100644 --- a/test/integrations/destinations/facebook_pixel/router/data.ts +++ b/test/integrations/destinations/facebook_pixel/router/data.ts @@ -202,114 +202,4 @@ export const data = [ }, }, }, - { - name: 'facebook_pixel', - description: - 'Test 1 : adTrackingEnabled is passed in context, advertiser_tracking_enabled set to true', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - message: { - anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - destination_props: { Fb: { app_id: 'RudderFbApp' } }, - context: { - device: { - id: 'df16bffa-5c3d-4fbb-9bce-3bab098129a7R', - manufacturer: 'Xiaomi', - model: 'Redmi 6', - name: 'xiaomi', - adTrackingEnabled: true, - }, - network: { carrier: 'Banglalink' }, - os: { name: 'android', version: '8.1.0' }, - screen: { height: '100', density: 50 }, - traits: { - email: 'abc@gmail.com', - anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', - }, - }, - event: 'spin_result', - integrations: { All: true }, - message_id: 'a80f82be-9bdc-4a9f-b2a5-15621ee41df8', - properties: { revenue: 400, additional_bet_index: 0 }, - timestamp: '2023-10-14T15:46:51.693229+05:30', - type: 'track', - }, - metadata: { jobId: 1, userId: 'u1' }, - destination: { - Config: { - limitedDataUsage: true, - blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], - removeExternalId: true, - accessToken: '09876', - pixelId: 'dummyPixelId', - eventsToEvents: [{ from: '', to: '' }], - eventCustomProperties: [{ eventCustomProperties: '' }], - valueFieldIdentifier: '', - advancedMapping: false, - whitelistPiiProperties: [{ whitelistPiiProperties: '' }], - }, - Enabled: true, - }, - }, - ], - destType: 'facebook_pixel', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', - headers: {}, - params: {}, - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: { - data: [ - '{"user_data":{"em":"48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08"},"event_name":"spin_result","event_time":1697278611,"advertiser_tracking_enabled":true,"action_source":"other","custom_data":{"additional_bet_index":0,"value":400}}', - ], - }, - }, - files: {}, - }, - metadata: [{ jobId: 1, userId: 'u1' }], - batched: false, - statusCode: 200, - destination: { - Config: { - limitedDataUsage: true, - blacklistPiiProperties: [{ blacklistPiiProperties: '', blacklistPiiHash: false }], - removeExternalId: true, - accessToken: '09876', - pixelId: 'dummyPixelId', - eventsToEvents: [{ from: '', to: '' }], - eventCustomProperties: [{ eventCustomProperties: '' }], - valueFieldIdentifier: '', - advancedMapping: false, - whitelistPiiProperties: [{ whitelistPiiProperties: '' }], - }, - Enabled: true, - }, - }, - ], - }, - }, - }, - }, ].map((d) => ({ ...d, mockFns })); From 73046cc6b9853dd29bdcce31f95b68b785a875f3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 3 Jul 2024 11:17:14 +0000 Subject: [PATCH 034/201] chore(release): 1.70.1 --- CHANGELOG.md | 2 ++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index adb96e6d62..9c0bb79342 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.70.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.70.0...v1.70.1) (2024-07-03) + ## [1.70.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.69.1...v1.70.0) (2024-07-01) diff --git a/package-lock.json b/package-lock.json index aaa0edfdd2..15a565263b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.70.0", + "version": "1.70.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.70.0", + "version": "1.70.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index cc35b1a43c..8cf611e249 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.70.0", + "version": "1.70.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From ea427660846a4b94f64d73c9f44740730747060a Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:52:49 +0530 Subject: [PATCH 035/201] chore: changelog update --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c0bb79342..9b47af2d5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. See [standa ### [1.70.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.70.0...v1.70.1) (2024-07-03) +### Bug Fixes + +* revert fb pixel change ([769161a](https://github.com/rudderlabs/rudder-transformer/commit/a0026152e4763569dc05693af1639e5a44d47b05)) + ## [1.70.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.69.1...v1.70.0) (2024-07-01) From c93b26194cd3a97870af2cf68b47776b3f9099a7 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:13:45 +0530 Subject: [PATCH 036/201] chore: update trengo drip kustomer axios handler (#3488) --- src/v0/destinations/drip/transform.js | 14 +- src/v0/destinations/drip/util.js | 125 +++++++++--------- src/v0/destinations/kustomer/transform.js | 11 +- src/v0/destinations/kustomer/util.js | 54 ++++---- src/v0/destinations/trengo/transform.js | 76 ++++++----- .../destinations/trengo/network.ts | 19 +++ .../destinations/trengo/processor/data.ts | 83 ++++++++++++ 7 files changed, 248 insertions(+), 134 deletions(-) diff --git a/src/v0/destinations/drip/transform.js b/src/v0/destinations/drip/transform.js index 4ccba076d0..1729ef3cdc 100644 --- a/src/v0/destinations/drip/transform.js +++ b/src/v0/destinations/drip/transform.js @@ -38,7 +38,7 @@ const { } = require('./util'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const identifyResponseBuilder = async (message, { Config }) => { +const identifyResponseBuilder = async (message, { Config }, metadata) => { const id = getDestinationExternalID(message, 'dripId'); let email = getFieldValueFromMessage(message, 'email'); @@ -117,7 +117,7 @@ const identifyResponseBuilder = async (message, { Config }) => { response.method = defaultPostRequestConfig.requestMethod; const campaignId = getDestinationExternalID(message, 'dripCampaignId') || Config.campaignId; if (campaignId && email) { - const check = await createUpdateUser(finalpayload, Config, basicAuth); + const check = await createUpdateUser(finalpayload, Config, basicAuth, metadata); if (!check) { throw new NetworkInstrumentationError('Unable to create/update user.'); } @@ -139,7 +139,7 @@ const identifyResponseBuilder = async (message, { Config }) => { return response; }; -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async (message, { Config }, metadata) => { const id = getDestinationExternalID(message, 'dripId'); let email = getValueFromMessage(message, [ @@ -162,7 +162,7 @@ const trackResponseBuilder = async (message, { Config }) => { event = event.trim().toLowerCase(); if (!Config.enableUserCreation && !id) { - const check = await userExists(Config, email); + const check = await userExists(Config, email, metadata); if (!check) { throw new NetworkInstrumentationError( 'User creation mode is disabled and user does not exist. Track call aborted.', @@ -239,7 +239,7 @@ const trackResponseBuilder = async (message, { Config }) => { }; const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -255,10 +255,10 @@ const process = async (event) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(message, destination, metadata); break; case EventType.TRACK: - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder(message, destination, metadata); break; default: throw new InstrumentationError(`Message type ${messageType} not supported`); diff --git a/src/v0/destinations/drip/util.js b/src/v0/destinations/drip/util.js index b7015c9351..d3e6760f32 100644 --- a/src/v0/destinations/drip/util.js +++ b/src/v0/destinations/drip/util.js @@ -1,11 +1,11 @@ const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const logger = require('../../../logger'); const { constructPayload, isDefinedAndNotNull } = require('../../util'); const { ENDPOINT, productMapping } = require('./config'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); const isValidEmail = (email) => { const re = @@ -19,82 +19,87 @@ const isValidTimestamp = (timestamp) => { return re.test(String(timestamp)); }; -const userExists = async (Config, id) => { +const userExists = async (Config, id, metadata) => { const basicAuth = Buffer.from(Config.apiKey).toString('base64'); - let response; - try { - response = await myAxios.get( - `${ENDPOINT}/v2/${Config.accountId}/subscribers/${id}`, - { - headers: { - Authorization: `Basic ${basicAuth}`, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'drip', - feature: 'transformation', - requestMethod: 'GET', - endpointPath: '/subscribers/id', - module: 'router', + + const { httpResponse } = await handleHttpRequest( + 'get', + `${ENDPOINT}/v2/${Config.accountId}/subscribers/${id}`, + { + headers: { + Authorization: `Basic ${basicAuth}`, + 'Content-Type': JSON_MIME_TYPE, }, - ); - if (response && response.status) { - return response.status === 200; + }, + { + metadata, + destType: 'drip', + feature: 'transformation', + requestMethod: 'GET', + endpointPath: '/subscribers/id', + module: 'router', + }, + ); + if (httpResponse.success) { + if (httpResponse.response.status) { + return httpResponse.response.status === 200; } throw new NetworkError( 'Invalid response.', - response?.status, + httpResponse.response?.status, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(response?.status), + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(httpResponse.response.status), }, - response, + httpResponse.response, ); - } catch (error) { - let errMsg = ''; - let errStatus = 400; - if (error.response) { - errStatus = error.response.status || 400; - errMsg = error.response.data - ? JSON.stringify(error.response.data) - : 'error response not found'; - } - throw new NetworkError(`Error occurred while checking user : ${errMsg}`, errStatus, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errStatus), - }); } + + const error = httpResponse.response?.response; + let errMsg = ''; + let errStatus = 400; + if (error) { + errStatus = error.status || 400; + errMsg = error.data ? JSON.stringify(error.data) : 'error response not found'; + } + throw new NetworkError(`Error occurred while checking user : ${errMsg}`, errStatus, { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errStatus), + }); }; -const createUpdateUser = async (finalpayload, Config, basicAuth) => { - try { - const response = await myAxios.post( - `${ENDPOINT}/v2/${Config.accountId}/subscribers`, - finalpayload, - { - headers: { - Authorization: `Basic ${basicAuth}`, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'drip', - feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/subscribers', - module: 'router', +const createUpdateUser = async (finalpayload, Config, basicAuth, metadata) => { + const { httpResponse } = await handleHttpRequest( + 'post', + `${ENDPOINT}/v2/${Config.accountId}/subscribers`, + finalpayload, + { + headers: { + Authorization: `Basic ${basicAuth}`, + 'Content-Type': JSON_MIME_TYPE, }, - ); + }, + { + metadata, + destType: 'drip', + feature: 'transformation', + requestMethod: 'POST', + endpointPath: '/subscribers', + module: 'router', + }, + ); + if (httpResponse.success) { + const { response } = httpResponse; if (response) { return response.status === 200 || response.status === 201; } throw new AbortedError('Invalid response.'); - } catch (error) { - let errMsg = ''; - if (error.response && error.response.data) { - errMsg = JSON.stringify(error.response.data); - } - throw new AbortedError(`Error occurred while creating or updating user : ${errMsg}`); } + + const error = httpResponse.response; + let errMsg = ''; + if (error.response && error.response.data) { + errMsg = JSON.stringify(error.response.data); + } + throw new AbortedError(`Error occurred while creating or updating user : ${errMsg}`); }; const createList = (productList) => { diff --git a/src/v0/destinations/kustomer/transform.js b/src/v0/destinations/kustomer/transform.js index e5010f55e0..1760a2db55 100644 --- a/src/v0/destinations/kustomer/transform.js +++ b/src/v0/destinations/kustomer/transform.js @@ -83,7 +83,7 @@ const constructKustomerPayload = (message, category, email) => { // Main process function responsible for building payload for all // type of events. -const responseBuilderSimple = async (message, category, destination) => { +const responseBuilderSimple = async (message, category, destination, metadata) => { let payload = {}; // Reference for base endpoint @@ -119,6 +119,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/email=${userEmail}`, destination, + metadata, ); } // If response.userExists flag is false @@ -128,6 +129,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/externalId=${userId}`, destination, + metadata, ); } // If response.userExists flag is still false @@ -137,6 +139,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/externalId=${get(message, 'anonymousId')}`, destination, + metadata, ); } // URL to use for creating new Kustomer @@ -206,7 +209,7 @@ const responseBuilderSimple = async (message, category, destination) => { throw new TransformationError('Payload could not be constructed'); }; -const processEvent = (message, destination) => { +const processEvent = (message, destination, metadata) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -227,10 +230,10 @@ const processEvent = (message, destination) => { default: throw new InstrumentationError(`Event type ${message.type} is not supported`); } - return responseBuilderSimple(message, category, destination); + return responseBuilderSimple(message, category, destination, metadata); }; -const process = (event) => processEvent(event.message, event.destination); +const process = (event) => processEvent(event.message, event.destination, event.metadata); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/kustomer/util.js b/src/v0/destinations/kustomer/util.js index 530983bb26..cafaffcdd9 100644 --- a/src/v0/destinations/kustomer/util.js +++ b/src/v0/destinations/kustomer/util.js @@ -2,12 +2,12 @@ const lodash = require('lodash'); const set = require('set-value'); const get = require('get-value'); -const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); +const { NetworkError } = require('@rudderstack/integrations-lib'); const { DEFAULT_BASE_ENDPOINT } = require('./config'); const { getType, isDefinedAndNotNull, isObject } = require('../../util'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); +const { handleHttpRequest } = require('../../../adapters/network'); /** * RegExp to test a string for a ISO 8601 Date spec @@ -97,8 +97,8 @@ const handleAdvancedtransformations = (event) => { return cloneEvent; }; -const handleResponse = (response) => { - const { status, data } = response; +const handleResponse = (processedResponse) => { + const { status, response: data } = processedResponse; switch (status) { case 200: if (data && data.data && data.data.id) { @@ -113,7 +113,7 @@ const handleResponse = (response) => { { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, - response, + processedResponse, ); case 404: return { userExists: false }; @@ -124,36 +124,30 @@ const handleResponse = (response) => { { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status || 400), }, - response, + processedResponse, ); } }; -const fetchKustomer = async (url, destination) => { - let response; - try { - response = await myAxios.get( - url, - { - headers: { - Authorization: `Bearer ${destination.Config.apiKey}`, - }, - }, - { - destType: 'kustomer', - feature: 'transformation', - endpointPath: '/customers/email', - requestMethod: 'GET', - module: 'processor', +const fetchKustomer = async (url, destination, metadata) => { + const { processedResponse } = await handleHttpRequest( + 'get', + url, + { + headers: { + Authorization: `Bearer ${destination.Config.apiKey}`, }, - ); - } catch (err) { - if (err.response) { - return handleResponse(err.response); - } - throw new AbortedError(err.message); - } - return handleResponse(response); + }, + { + metadata, + destType: 'kustomer', + feature: 'transformation', + endpointPath: '/customers/email', + requestMethod: 'GET', + module: 'processor', + }, + ); + return handleResponse(processedResponse); }; module.exports = { diff --git a/src/v0/destinations/trengo/transform.js b/src/v0/destinations/trengo/transform.js index 01c5cfeb25..b5ce5f0fa6 100644 --- a/src/v0/destinations/trengo/transform.js +++ b/src/v0/destinations/trengo/transform.js @@ -9,7 +9,6 @@ const { InstrumentationError, NetworkInstrumentationError, } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { EventType } = require('../../../constants'); const { EndPoints, BASE_URL } = require('./config'); const { @@ -27,6 +26,7 @@ const { const tags = require('../../util/tags'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); /** * @@ -80,39 +80,44 @@ const validate = (email, phone, channelIdentifier) => { * * In case no contact is founf for a particular identifer it returns -1 */ -const lookupContact = async (term, destination) => { - let res; - try { - res = await myAxios.get( - `${BASE_URL}/contacts?page=1&term=${term}`, - { - headers: { - Authorization: `Bearer ${destination.Config.apiToken}`, - }, - }, - { - destType: 'trengo', - feature: 'transformation', - endpointPath: '/contacts', - requestMethod: 'GET', - module: 'router', +const lookupContact = async (term, destination, metadata) => { + const { httpResponse, processedResponse } = await handleHttpRequest( + 'get', + `${BASE_URL}/contacts?page=1&term=${term}`, + { + headers: { + Authorization: `Bearer ${destination.Config.apiToken}`, }, - ); - } catch (err) { - // check if exists err.response && err.response.status else 500 - const status = err.response?.status || 400; + }, + { + metadata, + destType: 'trengo', + feature: 'transformation', + endpointPath: '/contacts', + requestMethod: 'GET', + module: 'router', + }, + ); + if (!httpResponse.success) { + const status = processedResponse?.status || 400; throw new NetworkError( - `Inside lookupContact, failed to make request: ${err.response?.statusText}`, + `Inside lookupContact, failed to make request: ${httpResponse.response?.response?.statusText}`, status, - { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, - err.response, + processedResponse, ); } - if (res && res.status === 200 && res.data && res.data.data && Array.isArray(res.data.data)) { - const { data } = res.data; + // check if exists err.response && err.response.status else 500 + + if ( + processedResponse && + processedResponse.status === 200 && + processedResponse.response && + Array.isArray(processedResponse.response.data) + ) { + const { data } = processedResponse.response; if (data.length > 1) { throw new NetworkInstrumentationError( `Inside lookupContact, duplicates present for identifier : ${term}`, @@ -141,6 +146,7 @@ const contactBuilderTrengo = async ( destination, identifier, extIds, + metadata, createScope = true, ) => { let result; @@ -175,7 +181,7 @@ const contactBuilderTrengo = async ( let contactId = get(extIds, 'contactId'); if (!contactId) { // If we alrady dont have contactId in our message we do lookup - contactId = await lookupContact(identifier, destination); + contactId = await lookupContact(identifier, destination, metadata); if (!contactId) { // In case contactId is returned null we throw error (This indicates and search API issue in trengo end) throw new NetworkInstrumentationError( @@ -202,13 +208,13 @@ const contactBuilderTrengo = async ( return result; }; -const ticketBuilderTrengo = async (message, destination, identifer, extIds) => { +const ticketBuilderTrengo = async (message, destination, identifer, extIds, metadata) => { let subjectLine; const template = getTemplate(message, destination); const externalId = get(extIds, 'externalId'); let contactId = get(extIds, 'contactId'); if (!contactId) { - contactId = await lookupContact(identifer, destination); + contactId = await lookupContact(identifer, destination, metadata); if (!contactId) { throw new InstrumentationError( `LookupContact failed for term:${identifer} track event failed`, @@ -263,7 +269,7 @@ const ticketBuilderTrengo = async (message, destination, identifer, extIds) => { * based on type of event and the destination configurations the * payloads are generated. */ -const responseBuilderSimple = async (message, messageType, destination) => { +const responseBuilderSimple = async (message, messageType, destination, metadata) => { let trengoPayload; // ChannelId is a mandatory field if it is not present in destination config // we will abort events. @@ -293,6 +299,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, false, ); if (trengoPayload === -1) { @@ -306,6 +313,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, true, ); } @@ -320,6 +328,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, true, ); } @@ -331,6 +340,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, ); } // Wrapped payload with structure @@ -370,7 +380,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { * If event type is not identify or track it will discard * the event */ -const processEvent = async (message, destination) => { +const processEvent = async (message, destination, metadata) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -378,12 +388,12 @@ const processEvent = async (message, destination) => { if (messageType !== EventType.IDENTIFY && messageType !== EventType.TRACK) { throw new InstrumentationError(`Event type ${messageType} is not supported`); } - const resp = await responseBuilderSimple(message, messageType, destination); + const resp = await responseBuilderSimple(message, messageType, destination, metadata); return resp; }; const process = async (event) => { - const response = await processEvent(event.message, event.destination); + const response = await processEvent(event.message, event.destination, event.metadata); return response; }; diff --git a/test/integrations/destinations/trengo/network.ts b/test/integrations/destinations/trengo/network.ts index e409489b8f..62b5016558 100644 --- a/test/integrations/destinations/trengo/network.ts +++ b/test/integrations/destinations/trengo/network.ts @@ -1323,4 +1323,23 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + headers: { + Authorization: 'Bearer wrong_trengo_integration_test_api_token', + }, + + method: 'GET', + + url: 'https://app.trengo.com/api/v2/contacts?page=1&term=null', + }, + httpRes: { + data: { + message: 'Unauthenticated.', + errors: [], + }, + statusText: 'UNAUTHORIZED', + status: 401, + }, + }, ]; diff --git a/test/integrations/destinations/trengo/processor/data.ts b/test/integrations/destinations/trengo/processor/data.ts index 88d03bbfb5..6772a1b940 100644 --- a/test/integrations/destinations/trengo/processor/data.ts +++ b/test/integrations/destinations/trengo/processor/data.ts @@ -1461,4 +1461,87 @@ export const data = [ }, }, }, + { + name: 'trengo', + description: 'Test 16', + feature: 'processor', + module: 'destination', + id: 'processor_trengo', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + apiToken: 'wrong_trengo_integration_test_api_token', + channelId: 'trengo_phone_channel', + channelIdentifier: 'email', + enableDedup: false, + eventTemplateMap: [ + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, + ], + }, + }, + message: { + userId: 'randomUserId', + type: 'track', + event: 'Stress test2', + properties: { name: 'Random_Track_call', value: 5000 }, + context: { + ip: '14.5.67.21', + app: { + build: '1', + name: 'RudderAndroidClient', + namespace: 'com.rudderstack.demo.android', + version: '1.0', + }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: [ + { + // though we are getting undefined as statusText through mocked response but we are getting that from actual response + error: + '{"message":"Inside lookupContact, failed to make request: undefined","destinationResponse":{"response":{"message":"Unauthenticated.","errors":[]},"status":401}}', + statTags: { + destType: 'TRENGO', + errorCategory: 'network', + errorType: 'aborted', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 401, + }, + ], + }, + }, + }, ]; From 277c1f00606b0ec5974e6bf24dae6749a1679069 Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:23:46 +0530 Subject: [PATCH 037/201] fix: zapier event lower case issue (#3535) --- src/cdk/v2/destinations/zapier/procWorkflow.yaml | 4 ++-- .../destinations/zapier/{ => processor}/data.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename test/integrations/destinations/zapier/{ => processor}/data.ts (99%) diff --git a/src/cdk/v2/destinations/zapier/procWorkflow.yaml b/src/cdk/v2/destinations/zapier/procWorkflow.yaml index 9f1512836e..c14c57378c 100644 --- a/src/cdk/v2/destinations/zapier/procWorkflow.yaml +++ b/src/cdk/v2/destinations/zapier/procWorkflow.yaml @@ -20,14 +20,14 @@ steps: condition: $.context.messageType === {{$.EventType.TRACK}} template: | const trackEventsMap = $.getHashFromArray(.destination.Config.trackEventsToZap); - const eventName = .message.event; + const eventName = .message.event.toLowerCase(); (eventName && trackEventsMap[eventName]) ? ($.context.endpoint = trackEventsMap[eventName]) else: name: endpointForOthers template: | const pageScreenEventsMap = $.getHashFromArray(.destination.Config.pageScreenEventsToZap); - const pageName = .message.name; + const pageName = .message.name.toLowerCase(); (pageName && pageScreenEventsMap[pageName]) ? ($.context.endpoint = pageScreenEventsMap[pageName]) - name: buildResponse diff --git a/test/integrations/destinations/zapier/data.ts b/test/integrations/destinations/zapier/processor/data.ts similarity index 99% rename from test/integrations/destinations/zapier/data.ts rename to test/integrations/destinations/zapier/processor/data.ts index 122ffd2d1d..b938f68dc5 100644 --- a/test/integrations/destinations/zapier/data.ts +++ b/test/integrations/destinations/zapier/processor/data.ts @@ -140,7 +140,7 @@ export const data = [ body: [ { message: { - event: 'def', + event: 'Def', userId: 'identified user id', type: 'track', anonymousId: 'anon-id-new', @@ -220,7 +220,7 @@ export const data = [ params: {}, body: { JSON: { - event: 'def', + event: 'Def', userId: 'identified user id', type: 'track', anonymousId: 'anon-id-new', @@ -279,7 +279,7 @@ export const data = [ body: [ { message: { - name: 'page_test', + name: 'Page_Test', userId: 'identified user id', type: 'page', anonymousId: 'anon-id-new', @@ -368,7 +368,7 @@ export const data = [ params: {}, body: { JSON: { - name: 'page_test', + name: 'Page_Test', userId: 'identified user id', type: 'page', anonymousId: 'anon-id-new', From 7f49a01b04322a38c5f96199d21097a9210e80fc Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Fri, 5 Jul 2024 14:28:58 +0530 Subject: [PATCH 038/201] feat: onboard new custom destination: wunderkind (#3456) * feat: onboard new custom destination: wunderkind * feat: add destination canonical name and update payload * test: add processor and router testcases * refactor: testcases --- .../destinations/wunderkind/procWorkflow.yaml | 68 +++++ .../destinations/wunderkind/rtWorkflow.yaml | 31 ++ src/constants/destinationCanonicalNames.js | 1 + src/features.json | 3 +- .../destinations/wunderkind/common.ts | 123 ++++++++ .../destinations/wunderkind/processor/data.ts | 3 + .../wunderkind/processor/track.ts | 265 ++++++++++++++++++ .../wunderkind/processor/validation.ts | 50 ++++ .../destinations/wunderkind/router/data.ts | 127 +++++++++ 9 files changed, 670 insertions(+), 1 deletion(-) create mode 100644 src/cdk/v2/destinations/wunderkind/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml create mode 100644 test/integrations/destinations/wunderkind/common.ts create mode 100644 test/integrations/destinations/wunderkind/processor/data.ts create mode 100644 test/integrations/destinations/wunderkind/processor/track.ts create mode 100644 test/integrations/destinations/wunderkind/processor/validation.ts create mode 100644 test/integrations/destinations/wunderkind/router/data.ts diff --git a/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml b/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml new file mode 100644 index 0000000000..e976f7da60 --- /dev/null +++ b/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml @@ -0,0 +1,68 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - path: ../../../../v0/destinations/webhook/utils + - name: getHashFromArray + path: ../../../../v0/util + - name: getIntegrationsObj + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: CommonUtils + path: ../../../../util/common + +steps: + - name: checkIfProcessed + condition: .message.statusCode + template: | + $.batchMode ? .message.body.JSON : .message + onComplete: return + + - name: messageType + template: | + $.context.messageType = .message.type.toLowerCase(); + + - name: validateInput + template: | + let messageType = $.context.messageType; + $.assert(messageType, "message Type is not present. Aborting"); + $.assert(messageType in {{$.EventType.([.TRACK])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.accountID, "Account ID is not present. Aborting"); + $.assertConfig(.destination.Config.instanceID, "Instance ID is not present. Aborting"); + $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting"); + + - name: buildAccountPayload + template: | + { + account_id: .destination.Config.accountID, + account_settings: { + instance_id: .destination.Config.instanceID, + key: .destination.Config.apiKey + } + } + + - name: buildPayload + template: | + const integrationObj = $.getIntegrationsObj(.message, "wunderkind") + const event = { + ...integrationObj.extraEventProperties, + attributes: .message.properties + } + + const payload = { + account: $.outputs.buildAccountPayload, + ...integrationObj.lambdaRootLevelProperties, + user_attributes: .message.().( + {{{{$.getGenericPaths("traits")}}}} + ), + events: $.CommonUtils.toArray(event) + } + + - name: buildResponseForProcessTransformation + template: | + + { + payload: JSON.stringify($.outputs.buildPayload), + } diff --git a/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml b/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml new file mode 100644 index 0000000000..335293b6db --- /dev/null +++ b/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml @@ -0,0 +1,31 @@ +bindings: + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + loopOverInput: true + + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "batchedRequest": ., + "batched": false, + "destination": ^[idx].destination, + "metadata": ^[idx].metadata[], + "statusCode": 200 + })[] + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + - name: finalPayload + template: | + [...$.outputs.failedEvents, ...$.outputs.successfulEvents] diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index 419c56d2c6..915ac50b26 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -174,6 +174,7 @@ const DestCanonicalNames = { 'klaviyobulkupload', ], emarsys: ['EMARSYS', 'Emarsys', 'emarsys'], + wunderkind: ['wunderkind', 'Wunderkind', 'WUNDERKIND'], }; module.exports = { DestHandlerMap, DestCanonicalNames }; diff --git a/src/features.json b/src/features.json index b9a82ebbcc..c7e4f90e15 100644 --- a/src/features.json +++ b/src/features.json @@ -73,6 +73,7 @@ "MOVABLE_INK": true, "EMARSYS": true, "KODDI": true, + "WUNDERKIND": true, "CLICKSEND": true }, "regulations": [ @@ -92,4 +93,4 @@ ], "supportSourceTransformV1": true, "supportTransformerProxyV1": true -} +} \ No newline at end of file diff --git a/test/integrations/destinations/wunderkind/common.ts b/test/integrations/destinations/wunderkind/common.ts new file mode 100644 index 0000000000..48472b0059 --- /dev/null +++ b/test/integrations/destinations/wunderkind/common.ts @@ -0,0 +1,123 @@ +import { Destination } from '../../../../src/types'; + +export const destType = 'wunderkind'; +const destTypeInUpperCase = 'WUNDERKIND'; +const displayName = 'WUNDERKIND'; +export const destination: Destination = { + Config: { + accountID: 'test-account-id', + instanceID: 'test-instance-id', + apiKey: 'test-api-key', + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', +}; + +export const properties = { + profileLoginType: 'logged-in', + launchType: 'organic', + platform: 'iphone-app', + fuelType: 'Gasoline', + makeName: 'Volvo', + vehicleAdCategory: 'multi_cat', + searchInstanceId: 'test-search-instance-id', + customerId: 'test-customer-id', + drivetrain: 'All-wheel Drive', + year: '2024', + canonical_mmt: 'volvo:xc90:b5_core_bright_theme', + mileage: '5', + make: 'volvo', + pushNotification: 'disabled', + advertiserId: '00000000-0000-0000-0000-000000000000', + exteriorColor: 'Crystal White', + adobeId: 'test-adobe-id', + pageChannel: 'shopping', + bodyStyle: 'suv', + tripId: 'test-trip-id', + stockType: 'new', + makeModelTrim: 'volvo:xc90:b5_core_bright_theme', + pageName: 'shopping/vehicle-details', + model: 'xc90', + deviceType: 'mobile', + listingId: 'test-listing-id', + dealerZip: '30341', + cpoIndicator: 'false', + trim: 'b5_core_bright_theme', + canonical_mmty: 'volvo:xc90:b5_core_bright_theme:2024', + sellerType: 'franchise', + price: '56002', + vin: 'test-vin', + resultSelected: '89', + zip: '85381', + stockSubStock: 'new', + profileUserId: 'test-profile-user-id', + pageKey: 'vehicle-details', + badges: 'homeDelivery,virtualAppointment', + modelName: 'XC90', +}; + +export const runtimeEnvironment = { + sdk_version: '8.8.0', + type: 'ios', + identities: [ + { + type: 'apple_push_notification_token', + encoding: 'raw', + value: '9e3dba8db39f9d130f3d1584c8aab674e9f4b06d0b1b52867e128d3e7b1130f1', + }, + { + type: 'ios_vendor_id', + encoding: 'raw', + value: '78c53c15-32a1-4b65-adac-bec2d7bb8fab', + }, + ], + build_id: '20E12', + brand: 'iPhone14,7', + product: 'iPhone14,7', + name: 'iPhone', + manufacturer: 'Apple', + os_version: '16.3.1', + model: 'iPhone14,7', + screen_height: 2532, + screen_width: 1170, + locale_language: 'en-US', + locale_country: 'US', + network_country: 'us', + network_carrier: 'Verizon', + network_code: '480', + network_mobile_country_code: '311', + timezone_offset: -7, + timezone_name: 'America/Phoenix', + cpu_architecture: 'arm64', + radio_access_technology: 'LTE', + application_name: 'Abc.com - New Account', + application_version: '8.8.0', + application_package: 'com.abc', + apple_search_ads_attribution: {}, + client_ip_address: '192.0.2.0', +}; + +export const processorInstrumentationErrorStatTags = { + destType: destTypeInUpperCase, + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', +}; + +export const routerInstrumentationErrorStatTags = { + ...processorInstrumentationErrorStatTags, + feature: 'router', +}; diff --git a/test/integrations/destinations/wunderkind/processor/data.ts b/test/integrations/destinations/wunderkind/processor/data.ts new file mode 100644 index 0000000000..b57a5e8a12 --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/data.ts @@ -0,0 +1,3 @@ +import { validation } from './validation'; +import { track } from './track'; +export const data = [...track, ...validation]; diff --git a/test/integrations/destinations/wunderkind/processor/track.ts b/test/integrations/destinations/wunderkind/processor/track.ts new file mode 100644 index 0000000000..286f35a255 --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/track.ts @@ -0,0 +1,265 @@ +import { generateMetadata } from '../../../testUtils'; +import { destType, destination, properties, runtimeEnvironment } from '../common'; + +export const track = [ + { + id: 'Wunderkind-track-test-1', + name: destType, + description: 'Track call: custom event srp-screen-view', + scenario: 'Framework+Business', + successCriteria: + 'Response should contain the input payload with request level properties mapped from integration object `lambdaRootLevelProperties` field and event level properties mapping from integration object `extraEventProperties` field and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + event: 'srp-screen-view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + name: 'srp-screen-view', + custom_event_type: 'other', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + payload: JSON.stringify({ + account: { + account_id: 'test-account-id', + account_settings: { instance_id: 'test-instance-id', key: 'test-api-key' }, + }, + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { type: 'email', encoding: 'raw', value: 'johndoe@gmail.com' }, + { type: 'other', encoding: 'raw', value: '7c2c3abd-62bf-473e-998d-034df0f25ea3' }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + user_attributes: { firstName: 'john', lastName: 'doe' }, + events: [ + { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105115000, + name: 'srp-screen-view', + custom_event_type: 'other', + attributes: properties, + }, + ], + }), + userId: '', + }, + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'Wunderkind-track-test-2', + name: destType, + description: 'Track call: screen_view event', + scenario: 'Framework+Business', + successCriteria: + 'Response should contain the input payload with request level properties mapped from integration object `lambdaRootLevelProperties` field and event level properties mapping from integration object `extraEventProperties` field and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + event: 'screen_view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + type: 'screen_view', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + screen_name: 'shopping/vehicle-details', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + payload: JSON.stringify({ + account: { + account_id: 'test-account-id', + account_settings: { + instance_id: 'test-instance-id', + key: 'test-api-key', + }, + }, + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + user_attributes: { + firstName: 'john', + lastName: 'doe', + }, + events: [ + { + type: 'screen_view', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105115000, + screen_name: 'shopping/vehicle-details', + attributes: properties, + }, + ], + }), + userId: '', + }, + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/wunderkind/processor/validation.ts b/test/integrations/destinations/wunderkind/processor/validation.ts new file mode 100644 index 0000000000..aeabdd497b --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/validation.ts @@ -0,0 +1,50 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata } from '../../../testUtils'; +import { destType, destination, processorInstrumentationErrorStatTags } from '../common'; + +export const validation: ProcessorTestData[] = [ + { + id: 'Wunderkind-validation-test-1', + name: destType, + description: 'Unsupported message type -> group', + scenario: 'Framework', + successCriteria: 'Instrumentation Error for Unsupported message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'group', + userId: 'userId123', + channel: 'mobile', + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + metadata: generateMetadata(1), + statTags: processorInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/wunderkind/router/data.ts b/test/integrations/destinations/wunderkind/router/data.ts new file mode 100644 index 0000000000..8081bdf456 --- /dev/null +++ b/test/integrations/destinations/wunderkind/router/data.ts @@ -0,0 +1,127 @@ +import { generateMetadata } from '../../../testUtils'; +import { + destType, + destination, + properties, + runtimeEnvironment, + routerInstrumentationErrorStatTags, +} from '../common'; + +export const data = [ + { + id: 'MovableInk-router-test-1', + name: destType, + description: 'Basic Router Test to test multiple payloads', + scenario: 'Framework', + successCriteria: + 'Some events should be transformed successfully and some should fail for missing fields and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + message: { + type: 'identify', + anonymousId: 'anonId123', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + { + destination, + message: { + event: 'srp-screen-view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + name: 'srp-screen-view', + custom_event_type: 'other', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(2), + }, + ], + destType, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + metadata: [generateMetadata(1)], + batched: false, + statusCode: 400, + error: 'message type identify is not supported', + statTags: routerInstrumentationErrorStatTags, + destination, + }, + { + batchedRequest: { + payload: + '{"account":{"account_id":"test-account-id","account_settings":{"instance_id":"test-instance-id","key":"test-api-key"}},"type":"event_processing_request","id":"a2a5575b-d3b0-4a14-96a5-79f8e38b0778","timestamp_ms":1718893923387,"source_id":"test-source-id","source_channel":"native","device_application_stamp":"test-device-application-stamp","user_identities":[{"type":"customer","encoding":"raw","value":"eb3f565d-49bd-418c-ae31-801f25da0ce2"},{"type":"email","encoding":"raw","value":"johndoe@gmail.com"},{"type":"other","encoding":"raw","value":"7c2c3abd-62bf-473e-998d-034df0f25ea3"}],"user_attribute_lists":{},"runtime_environment":{"sdk_version":"8.8.0","type":"ios","identities":[{"type":"apple_push_notification_token","encoding":"raw","value":"9e3dba8db39f9d130f3d1584c8aab674e9f4b06d0b1b52867e128d3e7b1130f1"},{"type":"ios_vendor_id","encoding":"raw","value":"78c53c15-32a1-4b65-adac-bec2d7bb8fab"}],"build_id":"20E12","brand":"iPhone14,7","product":"iPhone14,7","name":"iPhone","manufacturer":"Apple","os_version":"16.3.1","model":"iPhone14,7","screen_height":2532,"screen_width":1170,"locale_language":"en-US","locale_country":"US","network_country":"us","network_carrier":"Verizon","network_code":"480","network_mobile_country_code":"311","timezone_offset":-7,"timezone_name":"America/Phoenix","cpu_architecture":"arm64","radio_access_technology":"LTE","application_name":"Abc.com - New Account","application_version":"8.8.0","application_package":"com.abc","apple_search_ads_attribution":{},"client_ip_address":"192.0.2.0"},"user_attributes":{"firstName":"john","lastName":"doe"},"events":[{"screen_name":"shopping/vehicle-details","type":"custom_event","id":"1393f120-53b8-4126-8deb-874c26b5b06d","timestamp_ms":1703685306737,"source_id":"test-source-id","session_id":1688982077105115000,"name":"srp-screen-view","custom_event_type":"other","attributes":{"profileLoginType":"logged-in","launchType":"organic","platform":"iphone-app","fuelType":"Gasoline","makeName":"Volvo","vehicleAdCategory":"multi_cat","searchInstanceId":"test-search-instance-id","customerId":"test-customer-id","drivetrain":"All-wheel Drive","year":"2024","canonical_mmt":"volvo:xc90:b5_core_bright_theme","mileage":"5","make":"volvo","pushNotification":"disabled","advertiserId":"00000000-0000-0000-0000-000000000000","exteriorColor":"Crystal White","adobeId":"test-adobe-id","pageChannel":"shopping","bodyStyle":"suv","tripId":"test-trip-id","stockType":"new","makeModelTrim":"volvo:xc90:b5_core_bright_theme","pageName":"shopping/vehicle-details","model":"xc90","deviceType":"mobile","listingId":"test-listing-id","dealerZip":"30341","cpoIndicator":"false","trim":"b5_core_bright_theme","canonical_mmty":"volvo:xc90:b5_core_bright_theme:2024","sellerType":"franchise","price":"56002","vin":"test-vin","resultSelected":"89","zip":"85381","stockSubStock":"new","profileUserId":"test-profile-user-id","pageKey":"vehicle-details","badges":"homeDelivery,virtualAppointment","modelName":"XC90"}}]}', + }, + metadata: [generateMetadata(2)], + destination, + batched: false, + statusCode: 200, + }, + ], + }, + }, + }, + }, +]; From 324f6a0fdeb9f99dcc28c01a97d5ac8300d4c6ec Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Fri, 5 Jul 2024 20:42:50 +0530 Subject: [PATCH 039/201] chore: update for config details (#3537) --- src/v0/destinations/ga4_v2/transform.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/ga4_v2/transform.ts b/src/v0/destinations/ga4_v2/transform.ts index 76adc00e00..79892d791e 100644 --- a/src/v0/destinations/ga4_v2/transform.ts +++ b/src/v0/destinations/ga4_v2/transform.ts @@ -1,4 +1,8 @@ -import { InstrumentationError, RudderStackEvent } from '@rudderstack/integrations-lib'; +import { + InstrumentationError, + isDefinedAndNotNull, + RudderStackEvent, +} from '@rudderstack/integrations-lib'; import { ProcessorTransformationRequest } from '../../../types'; import { handleCustomMappings } from './customMappingsHandler'; import { process as ga4Process } from '../ga4/transform'; @@ -7,6 +11,17 @@ import { basicConfigvalidaiton } from '../ga4/utils'; export function process(event: ProcessorTransformationRequest) { const { message, destination } = event; const { Config } = destination; + if (isDefinedAndNotNull(Config.configData)) { + const configDetails = JSON.parse(Config.configData); + Config.propertyId = configDetails.PROPERTY; + Config.typesOfClient = configDetails.DATA_STREAM.type; + if (Config.typesOfClient === 'gtag') { + Config.measurementId = configDetails.DATA_STREAM.value; + } else if (Config.typesOfClient === 'firebase') { + Config.firebaseAppId = configDetails.DATA_STREAM.value; + } + Config.apiSecret = configDetails.MEASUREMENT_PROTOCOL_SECRET; + } const eventPayload = message as RudderStackEvent; From ccac8370a209db97749c19f8350a474a9f5b8c7e Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Fri, 5 Jul 2024 21:08:53 +0530 Subject: [PATCH 040/201] chore: fix lint error --- src/features.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features.json b/src/features.json index c7e4f90e15..ade8c90439 100644 --- a/src/features.json +++ b/src/features.json @@ -93,4 +93,4 @@ ], "supportSourceTransformV1": true, "supportTransformerProxyV1": true -} \ No newline at end of file +} From 48c36a6e3b22e7bd0eae65ea429e2d7fd2abb8dc Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Mon, 8 Jul 2024 11:46:09 +0530 Subject: [PATCH 041/201] chore: handle error code 21009 for facebook destinations (#3536) * chore: handle error code 21009 for facebook destinations Signed-off-by: Sai Sankeerth * chore: update status-code to 500 Signed-off-by: Sai Sankeerth --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth --- src/v0/util/facebookUtils/networkHandler.js | 3 + .../facebook_pixel/dataDelivery/data.ts | 55 +++++++++++++++++++ .../destinations/facebook_pixel/network.ts | 20 +++++++ 3 files changed, 78 insertions(+) diff --git a/src/v0/util/facebookUtils/networkHandler.js b/src/v0/util/facebookUtils/networkHandler.js index 5338364fe2..fbb7899efe 100644 --- a/src/v0/util/facebookUtils/networkHandler.js +++ b/src/v0/util/facebookUtils/networkHandler.js @@ -216,6 +216,9 @@ const errorDetailsMap = { 200: { default: new ErrorDetailsExtractorBuilder().setStatus(403).setMessageField('message').build(), }, + 21009: { + default: new ErrorDetailsExtractorBuilder().setStatus(500).setMessageField('message').build(), + }, }; const getErrorDetailsFromErrorMap = (error) => { diff --git a/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts b/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts index e66e98bbe3..3366e62c5a 100644 --- a/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts +++ b/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts @@ -487,6 +487,61 @@ export const v0TestData = [ }, }, }, + + { + name: 'facebook_pixel', + description: 'Test 9: should handle error with code: 21009', + feature: 'dataDelivery', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + body: { + XML: {}, + FORM: testFormData, + JSON: {}, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + userId: '', + headers: {}, + version: '1', + endpoint: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=unhandled_error_code_21009`, + params: { + destination: 'facebook_pixel', + }, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 500, + body: { + output: { + status: 500, + message: '(#21009) The data set upload is temporarily not ready.', + destinationResponse: { + error: { + message: '(#21009) The data set upload is temporarily not ready.', + type: 'OAuthException', + code: 21009, + fbtrace_id: 'dDu39o39lkeo8', + }, + status: 400, + }, + statTags: { + ...statTags, + errorType: 'retryable', + }, + }, + }, + }, + }, + }, ]; export const data = [ diff --git a/test/integrations/destinations/facebook_pixel/network.ts b/test/integrations/destinations/facebook_pixel/network.ts index a61fa44eab..411d36cf19 100644 --- a/test/integrations/destinations/facebook_pixel/network.ts +++ b/test/integrations/destinations/facebook_pixel/network.ts @@ -48,6 +48,26 @@ export const networkCallsData = [ status: 400, }, }, + { + httpReq: { + url: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=unhandled_error_code_21009`, + data: getFormData(testFormData).toString(), + params: { destination: 'facebook_pixel' }, + headers: { 'User-Agent': 'RudderLabs' }, + method: 'POST', + }, + httpRes: { + data: { + error: { + message: '(#21009) The data set upload is temporarily not ready.', + type: 'OAuthException', + code: 21009, + fbtrace_id: 'dDu39o39lkeo8', + }, + }, + status: 400, + }, + }, { httpReq: { url: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=throttled_valid_access_token`, From 72d696541d3657b6e69c5b794895e3107bdb56fe Mon Sep 17 00:00:00 2001 From: devops-github-rudderstack <88187154+devops-github-rudderstack@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:08:11 +0530 Subject: [PATCH 042/201] chore(release): pull release/v1.71.0 into main (#3539) --- CHANGELOG.md | 12 + package-lock.json | 22 +- package.json | 6 +- src/adapters/network.js | 177 +++++----- src/adapters/network.test.js | 311 +++++++++++++++++- .../destinations/wunderkind/procWorkflow.yaml | 68 ++++ .../destinations/wunderkind/rtWorkflow.yaml | 31 ++ .../v2/destinations/zapier/procWorkflow.yaml | 4 +- src/constants/destinationCanonicalNames.js | 1 + src/features.json | 1 + src/logger.js | 49 ++- src/util/logger.js | 25 ++ src/v0/destinations/drip/transform.js | 14 +- src/v0/destinations/drip/util.js | 125 +++---- src/v0/destinations/ga4_v2/transform.ts | 17 +- .../networkHandler.js | 46 +-- .../networkHandler.js | 89 +---- .../utils.js | 20 +- .../networkHandler.js | 85 +---- src/v0/destinations/klaviyo/util.js | 22 +- src/v0/destinations/kustomer/transform.js | 11 +- src/v0/destinations/kustomer/util.js | 54 ++- src/v0/destinations/salesforce/utils.js | 5 +- src/v0/destinations/trengo/transform.js | 76 +++-- src/v0/util/facebookUtils/networkHandler.js | 3 + .../campaign_manager/networkHandler.js | 12 +- src/v1/destinations/monday/networkHandler.js | 11 +- .../facebook_pixel/dataDelivery/data.ts | 55 ++++ .../destinations/facebook_pixel/network.ts | 20 ++ .../destinations/trengo/network.ts | 19 ++ .../destinations/trengo/processor/data.ts | 83 +++++ .../destinations/wunderkind/common.ts | 123 +++++++ .../destinations/wunderkind/processor/data.ts | 3 + .../wunderkind/processor/track.ts | 265 +++++++++++++++ .../wunderkind/processor/validation.ts | 50 +++ .../destinations/wunderkind/router/data.ts | 127 +++++++ .../zapier/{ => processor}/data.ts | 8 +- 37 files changed, 1525 insertions(+), 525 deletions(-) create mode 100644 src/cdk/v2/destinations/wunderkind/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml create mode 100644 src/util/logger.js create mode 100644 test/integrations/destinations/wunderkind/common.ts create mode 100644 test/integrations/destinations/wunderkind/processor/data.ts create mode 100644 test/integrations/destinations/wunderkind/processor/track.ts create mode 100644 test/integrations/destinations/wunderkind/processor/validation.ts create mode 100644 test/integrations/destinations/wunderkind/router/data.ts rename test/integrations/destinations/zapier/{ => processor}/data.ts (99%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b47af2d5c..e8cf849682 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.71.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.70.1...v1.71.0) (2024-07-08) + + +### Features + +* onboard new custom destination: wunderkind ([#3456](https://github.com/rudderlabs/rudder-transformer/issues/3456)) ([7f49a01](https://github.com/rudderlabs/rudder-transformer/commit/7f49a01b04322a38c5f96199d21097a9210e80fc)) + + +### Bug Fixes + +* zapier event lower case issue ([#3535](https://github.com/rudderlabs/rudder-transformer/issues/3535)) ([277c1f0](https://github.com/rudderlabs/rudder-transformer/commit/277c1f00606b0ec5974e6bf24dae6749a1679069)) + ### [1.70.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.70.0...v1.70.1) (2024-07-03) ### Bug Fixes diff --git a/package-lock.json b/package-lock.json index 15a565263b..e1f87612cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.70.1", + "version": "1.71.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.70.1", + "version": "1.71.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", @@ -20,8 +20,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.15.0", - "@rudderstack/workflow-engine": "^0.8.9", + "@rudderstack/json-template-engine": "^0.17.0", + "@rudderstack/workflow-engine": "^0.8.11", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -4526,17 +4526,17 @@ } }, "node_modules/@rudderstack/json-template-engine": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.15.0.tgz", - "integrity": "sha512-RDBCn4oYvDjWhIEuV3d8QHmdTcFUyVbpBFxtRwOb1U7zSpTZ8H74/wxBG661ayN2psFh7UJYzZENju7cLWpFTw==" + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.0.tgz", + "integrity": "sha512-+M09/mqltvL9fkE7kT1ibH5lIf2Nh63ERoQ8+PpUleYR2QD0fW8HGmvRFicqfOmlWH8afAVvH/KzHjf0p2GGLw==" }, "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.9.tgz", - "integrity": "sha512-4PxiXUeJ6ulhdlS7MHB6zPV6fdRVZZ0EDnl5fRbu7gDq1h4h32t5T44RwXjLbyupuu/vsPshkBNoEpo+heUBqg==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.11.tgz", + "integrity": "sha512-45y5tBC64zKuppaL6dUhHOnoKyadE22xMnELuE9Hz2qZPiyKlQBeMWpjxQLDXQ2S/Q8zx+J+n1L07zUZyg2rCA==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.15.0", + "@rudderstack/json-template-engine": "^0.17.0", "jsonata": "^2.0.5", "lodash": "^4.17.21", "object-sizeof": "^2.6.4", diff --git a/package.json b/package.json index 8cf611e249..63ad671902 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.70.1", + "version": "1.71.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { @@ -65,8 +65,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.15.0", - "@rudderstack/workflow-engine": "^0.8.9", + "@rudderstack/json-template-engine": "^0.17.0", + "@rudderstack/workflow-engine": "^0.8.11", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", diff --git a/src/adapters/network.js b/src/adapters/network.js index 850ba649c8..86af19d6a1 100644 --- a/src/adapters/network.js +++ b/src/adapters/network.js @@ -5,9 +5,9 @@ const lodash = require('lodash'); const http = require('http'); const https = require('https'); const axios = require('axios'); -const log = require('../logger'); +const logger = require('../logger'); const stats = require('../util/stats'); -const { removeUndefinedValues } = require('../v0/util'); +const { removeUndefinedValues, isDefinedAndNotNullAndNotEmpty } = require('../v0/util'); const { processAxiosResponse } = require('./utils/networkUtils'); // Only for tests const { setResponsesForMockAxiosAdapter } = require('../../test/testHelper'); @@ -56,7 +56,7 @@ const fireOutgoingReqStats = ({ statusCode, clientResponse, }) => { - const logMetaInfo = log.getLogMetadata(metadata); + const logMetaInfo = logger.getLogMetadata(metadata); stats.timing('outgoing_request_latency', startTime, { ...logMetaInfo, feature, @@ -118,24 +118,66 @@ const enhanceRequestOptions = (options) => { return requestOptions; }; -/** - * sends an http request with underlying client, expects request options - * @param {*} options - * @returns - */ -const httpSend = async (options, statTags = {}) => { +const getResponseDetails = (clientResponse) => { + if (!clientResponse.success) { + const { response } = clientResponse.response; + // non 2xx status handling for axios response + if (response) { + const { data, status, headers } = response; + return { + body: data || '', + status: status || 500, + ...(isDefinedAndNotNullAndNotEmpty(headers) ? { headers } : {}), + }; + } + return {}; + } + const { data, status, headers } = clientResponse.response; + return { + body: data || '', + status: status || 500, + ...(isDefinedAndNotNullAndNotEmpty(headers) ? { headers } : {}), + }; +}; + +const getHttpMethodArgs = (method, { url, data, requestOptions }) => { + const requestMethod = method?.toLowerCase?.(); + switch (requestMethod) { + case 'post': + case 'put': + case 'patch': + return [url, data, requestOptions]; + case 'get': + case 'delete': + return [url, requestOptions]; + default: // constructor + return [requestOptions]; + } +}; +const commonHandler = async (axiosMethod, { statTags, method, ...args }) => { let clientResponse; - // here the options argument K-Vs will take priority over the default options - const requestOptions = enhanceRequestOptions(options); + const { url, data, options, requestOptions } = args; + const commonMsg = `[${statTags?.destType?.toUpperCase?.() || ''}] ${statTags?.endpointPath || ''}`; + logger.requestLog(`${commonMsg} request`, { + metadata: statTags?.metadata, + requestDetails: { + url: url || requestOptions?.url, + body: data || requestOptions?.data, + method, + }, + }); const startTime = new Date(); - const { url, data, method } = requestOptions; try { - const response = await axios(requestOptions); + const response = await axiosMethod(...getHttpMethodArgs(method, args)); clientResponse = { success: true, response }; } catch (err) { clientResponse = { success: false, response: err }; } finally { + logger.responseLog(`${commonMsg} response`, { + metadata: statTags?.metadata, + responseDetails: getResponseDetails(clientResponse), + }); fireHTTPStats(clientResponse, startTime, statTags); } @@ -143,6 +185,16 @@ const httpSend = async (options, statTags = {}) => { return clientResponse; }; +/** + * sends an http request with underlying client, expects request options + * @param {*} options + * @returns + */ +const httpSend = async (options, statTags = {}) => { + const requestOptions = enhanceRequestOptions(options); + return commonHandler(axios, { statTags, options, requestOptions }); +}; + /** * * @param {*} url @@ -152,21 +204,8 @@ const httpSend = async (options, statTags = {}) => { * handles http GET requests returns promise as a response throws error in case of non 2XX statuses */ const httpGET = async (url, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.get(url, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, options, method: 'GET' }, clientResponse); - return clientResponse; + return commonHandler(axios.get, { statTags, method: 'get', url, options, requestOptions }); }; /** @@ -178,21 +217,8 @@ const httpGET = async (url, options, statTags = {}) => { * handles http DELETE requests returns promise as a response throws error in case of non 2XX statuses */ const httpDELETE = async (url, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.delete(url, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, options, method: 'DELETE' }, clientResponse); - return clientResponse; + return commonHandler(axios.delete, { statTags, method: 'delete', url, options, requestOptions }); }; /** @@ -205,21 +231,15 @@ const httpDELETE = async (url, options, statTags = {}) => { * handles http POST requests returns promise as a response throws error in case of non 2XX statuses */ const httpPOST = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.post(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'POST' }, clientResponse); - return clientResponse; + return commonHandler(axios.post, { + statTags, + url, + method: 'post', + data, + options, + requestOptions, + }); }; /** @@ -232,21 +252,8 @@ const httpPOST = async (url, data, options, statTags = {}) => { * handles http PUT requests returns promise as a response throws error in case of non 2XX statuses */ const httpPUT = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.put(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'PUT' }, clientResponse); - return clientResponse; + return commonHandler(axios.put, { statTags, url, data, method: 'put', options, requestOptions }); }; /** @@ -259,21 +266,15 @@ const httpPUT = async (url, data, options, statTags = {}) => { * handles http PATCH requests returns promise as a response throws error in case of non 2XX statuses */ const httpPATCH = async (url, data, options, statTags = {}) => { - let clientResponse; - // here the options argument K-Vs will take priority over the default options const requestOptions = enhanceRequestOptions(options); - - const startTime = new Date(); - try { - const response = await axios.patch(url, data, requestOptions); - clientResponse = { success: true, response }; - } catch (err) { - clientResponse = { success: false, response: err }; - } finally { - fireHTTPStats(clientResponse, startTime, statTags); - } - setResponsesForMockAxiosAdapter({ url, data, options, method: 'PATCH' }, clientResponse); - return clientResponse; + return commonHandler(axios.patch, { + statTags, + url, + method: 'patch', + data, + options, + requestOptions, + }); }; const getPayloadData = (body) => { @@ -352,7 +353,7 @@ const prepareProxyRequest = (request) => { // TODO: break; default: - log.debug(`body format ${payloadFormat} not supported`); + logger.debug(`body format ${payloadFormat} not supported`); } // Ref: https://github.com/rudderlabs/rudder-server/blob/master/router/network.go#L164 headers['User-Agent'] = 'RudderLabs'; @@ -426,14 +427,6 @@ const proxyRequest = async (request, destType) => { headers, method, }; - log.requestLog(`[${destType.toUpperCase()}] delivering data`, { - metadata, - requestDetails: { - body: data, - url: endpoint, - method, - }, - }); const response = await httpSend(requestOptions, { feature: 'proxy', destType, diff --git a/src/adapters/network.test.js b/src/adapters/network.test.js index ff112c53d4..5f5ad97437 100644 --- a/src/adapters/network.test.js +++ b/src/adapters/network.test.js @@ -1,6 +1,29 @@ -const { getFormData } = require('./network'); +const mockLoggerInstance = { + info: jest.fn(), +}; +const { getFormData, httpPOST, httpGET, httpSend } = require('./network'); const { getFuncTestData } = require('../../test/testHelper'); +jest.mock('@rudderstack/integrations-lib', () => { + return { + ...jest.requireActual('@rudderstack/integrations-lib'), + structuredLogger: jest.fn().mockReturnValue(mockLoggerInstance), + }; +}); + +jest.mock('axios', () => jest.fn()); + +jest.mock('../util/logger', () => ({ + ...jest.requireActual('../util/logger'), + getMatchedMetadata: jest.fn(), +})); + +const axios = require('axios'); +const loggerUtil = require('../util/logger'); + +axios.post = jest.fn(); +axios.get = jest.fn(); + const funcName = 'getFormData'; describe(`${funcName} Tests`, () => { @@ -15,3 +38,289 @@ describe(`${funcName} Tests`, () => { expect(result.toString()).toEqual(output); }); }); + +describe('logging in http methods', () => { + beforeEach(() => { + mockLoggerInstance.info.mockClear(); + loggerUtil.getMatchedMetadata.mockClear(); + }); + test('post - when proper metadata(object) is sent should call logger without error', async () => { + const statTags = { + metadata: { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + }, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([statTags.metadata]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(1, ' [DT] /m/n/o request', { + body: {}, + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + url: 'https://some.web.com/m/n/o', + method: 'post', + }); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(2, ' [DT] /m/n/o response', { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + body: { a: 1, b: 2, c: 'abc' }, + status: 200, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + }); + + test('post - when metadata is not sent should call logger without error', async () => { + const statTags = { + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('post - when metadata is string should call logger without error', async () => { + const statTags = { + metadata: 'random metadata', + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue([statTags.metadata]); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('post - when proper metadata(Array) is sent should call logger without error', async () => { + const metadata = [ + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 1, + }, + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 2, + }, + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + jobId: 3, + }, + ]; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(metadata.length * 2); + + [1, 2, 3].forEach((i) => { + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith(i, ' [DT] /m/n/o request', { + body: {}, + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + url: 'https://some.web.com/m/n/o', + method: 'post', + }); + + expect(mockLoggerInstance.info).toHaveBeenNthCalledWith( + i + metadata.length, + ' [DT] /m/n/o response', + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + body: { a: 1, b: 2, c: 'abc' }, + status: 200, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }, + ); + }); + }); + + test('post - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.post.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpPOST('https://some.web.com/m/n/o', {}, {}, statTags)).resolves.not.toThrow( + Error, + ); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios.post).toHaveBeenCalledWith( + 'https://some.web.com/m/n/o', + {}, + expect.objectContaining({}), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('get - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.get.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect(httpGET('https://some.web.com/m/n/o', {}, statTags)).resolves.not.toThrow(Error); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios.get).toHaveBeenCalledWith( + 'https://some.web.com/m/n/o', + expect.objectContaining({}), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); + + test('constructor - when proper metadata(Array of strings,numbers) is sent should call logger without error', async () => { + const metadata = [1, 2, '3']; + const statTags = { + metadata, + destType: 'DT', + feature: 'feat', + endpointPath: '/m/n/o', + requestMethod: 'post', + }; + loggerUtil.getMatchedMetadata.mockReturnValue(statTags.metadata); + + axios.mockResolvedValueOnce({ + status: 200, + data: { a: 1, b: 2, c: 'abc' }, + headers: { + 'Content-Type': 'apllication/json', + 'X-Some-Header': 'headsome', + }, + }); + await expect( + httpSend({ url: 'https://some.web.com/m/n/o', method: 'get' }, statTags), + ).resolves.not.toThrow(Error); + expect(loggerUtil.getMatchedMetadata).toHaveBeenCalledTimes(2); + + expect(axios).toHaveBeenCalledWith( + expect.objectContaining({ + url: 'https://some.web.com/m/n/o', + method: 'get', + }), + ); + + expect(mockLoggerInstance.info).toHaveBeenCalledTimes(0); + }); +}); diff --git a/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml b/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml new file mode 100644 index 0000000000..e976f7da60 --- /dev/null +++ b/src/cdk/v2/destinations/wunderkind/procWorkflow.yaml @@ -0,0 +1,68 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - path: ../../../../v0/destinations/webhook/utils + - name: getHashFromArray + path: ../../../../v0/util + - name: getIntegrationsObj + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: CommonUtils + path: ../../../../util/common + +steps: + - name: checkIfProcessed + condition: .message.statusCode + template: | + $.batchMode ? .message.body.JSON : .message + onComplete: return + + - name: messageType + template: | + $.context.messageType = .message.type.toLowerCase(); + + - name: validateInput + template: | + let messageType = $.context.messageType; + $.assert(messageType, "message Type is not present. Aborting"); + $.assert(messageType in {{$.EventType.([.TRACK])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.accountID, "Account ID is not present. Aborting"); + $.assertConfig(.destination.Config.instanceID, "Instance ID is not present. Aborting"); + $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting"); + + - name: buildAccountPayload + template: | + { + account_id: .destination.Config.accountID, + account_settings: { + instance_id: .destination.Config.instanceID, + key: .destination.Config.apiKey + } + } + + - name: buildPayload + template: | + const integrationObj = $.getIntegrationsObj(.message, "wunderkind") + const event = { + ...integrationObj.extraEventProperties, + attributes: .message.properties + } + + const payload = { + account: $.outputs.buildAccountPayload, + ...integrationObj.lambdaRootLevelProperties, + user_attributes: .message.().( + {{{{$.getGenericPaths("traits")}}}} + ), + events: $.CommonUtils.toArray(event) + } + + - name: buildResponseForProcessTransformation + template: | + + { + payload: JSON.stringify($.outputs.buildPayload), + } diff --git a/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml b/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml new file mode 100644 index 0000000000..335293b6db --- /dev/null +++ b/src/cdk/v2/destinations/wunderkind/rtWorkflow.yaml @@ -0,0 +1,31 @@ +bindings: + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + loopOverInput: true + + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "batchedRequest": ., + "batched": false, + "destination": ^[idx].destination, + "metadata": ^[idx].metadata[], + "statusCode": 200 + })[] + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + - name: finalPayload + template: | + [...$.outputs.failedEvents, ...$.outputs.successfulEvents] diff --git a/src/cdk/v2/destinations/zapier/procWorkflow.yaml b/src/cdk/v2/destinations/zapier/procWorkflow.yaml index 9f1512836e..c14c57378c 100644 --- a/src/cdk/v2/destinations/zapier/procWorkflow.yaml +++ b/src/cdk/v2/destinations/zapier/procWorkflow.yaml @@ -20,14 +20,14 @@ steps: condition: $.context.messageType === {{$.EventType.TRACK}} template: | const trackEventsMap = $.getHashFromArray(.destination.Config.trackEventsToZap); - const eventName = .message.event; + const eventName = .message.event.toLowerCase(); (eventName && trackEventsMap[eventName]) ? ($.context.endpoint = trackEventsMap[eventName]) else: name: endpointForOthers template: | const pageScreenEventsMap = $.getHashFromArray(.destination.Config.pageScreenEventsToZap); - const pageName = .message.name; + const pageName = .message.name.toLowerCase(); (pageName && pageScreenEventsMap[pageName]) ? ($.context.endpoint = pageScreenEventsMap[pageName]) - name: buildResponse diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index 419c56d2c6..915ac50b26 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -174,6 +174,7 @@ const DestCanonicalNames = { 'klaviyobulkupload', ], emarsys: ['EMARSYS', 'Emarsys', 'emarsys'], + wunderkind: ['wunderkind', 'Wunderkind', 'WUNDERKIND'], }; module.exports = { DestHandlerMap, DestCanonicalNames }; diff --git a/src/features.json b/src/features.json index b9a82ebbcc..ade8c90439 100644 --- a/src/features.json +++ b/src/features.json @@ -73,6 +73,7 @@ "MOVABLE_INK": true, "EMARSYS": true, "KODDI": true, + "WUNDERKIND": true, "CLICKSEND": true }, "regulations": [ diff --git a/src/logger.js b/src/logger.js index 6daff56c67..6863bc4558 100644 --- a/src/logger.js +++ b/src/logger.js @@ -1,10 +1,10 @@ /* istanbul ignore file */ const { LOGLEVELS, structuredLogger } = require('@rudderstack/integrations-lib'); - +const { getMatchedMetadata } = require('./util/logger'); // LOGGER_IMPL can be `console` or `winston` const loggerImpl = process.env.LOGGER_IMPL ?? 'winston'; -let logLevel = process.env.LOG_LEVEL ?? 'error'; +let logLevel = (process.env.LOG_LEVEL ?? 'error').toLowerCase(); const logger = structuredLogger({ level: logLevel, @@ -88,16 +88,18 @@ const log = (logMethod, logArgs) => { if (logInfo) { const { metadata, ...otherLogInfoArgs } = logInfo; if (Array.isArray(metadata)) { - metadata.forEach((m) => { - logMethod( - message, - { - ...getLogMetadata(m), - ...otherLogInfoArgs, - }, - ...otherArgs, - ); - }); + metadata + .filter((m) => typeof m === 'object' && !Array.isArray(m)) + .forEach((m) => { + logMethod( + message, + { + ...getLogMetadata(m), + ...otherLogInfoArgs, + }, + ...otherArgs, + ); + }); return; } logMethod( @@ -143,20 +145,19 @@ const error = (...args) => { const requestLog = (identifierMsg, { metadata, requestDetails: { url, body, method } }) => { const logger = getLogger(); - if (LOGLEVELS[logLevel] === LOGLEVELS.warn) { - const reqLogArgs = [identifierMsg, { metadata, url, body, method }]; - log(logger.warn, reqLogArgs); + const filteredMetadata = getMatchedMetadata(metadata); + if (filteredMetadata.length > 0) { + const reqLogArgs = [identifierMsg, { metadata: filteredMetadata, url, body, method }]; + log(logger.info, reqLogArgs); } }; -const responseLog = ( - identifierMsg, - { metadata, responseDetails: { response: body, status, headers } }, -) => { +const responseLog = (identifierMsg, { metadata, responseDetails: { body, status, headers } }) => { const logger = getLogger(); - if (LOGLEVELS[logLevel] === LOGLEVELS.warn) { - const resLogArgs = [identifierMsg, { metadata, body, status, headers }]; - log(logger.warn, resLogArgs); + const filteredMetadata = getMatchedMetadata(metadata); + if (filteredMetadata.length > 0) { + const resLogArgs = [identifierMsg, { metadata: filteredMetadata, body, status, headers }]; + log(logger.info, resLogArgs); } }; @@ -166,10 +167,6 @@ module.exports = { warn, error, setLogLevel, - // levelDebug, - // levelInfo, - // levelWarn, - // levelError, responseLog, getLogMetadata, requestLog, diff --git a/src/util/logger.js b/src/util/logger.js new file mode 100644 index 0000000000..9a5a3d52db --- /dev/null +++ b/src/util/logger.js @@ -0,0 +1,25 @@ +const logDestIds = (process.env.LOG_DEST_IDS ?? '').split(',')?.map?.((s) => s?.trim?.()); // should be comma separated +const logWspIds = (process.env.LOG_WSP_IDS ?? '').split(',')?.map?.((s) => s?.trim?.()); // should be comma separated + +const isMetadataMatching = (m) => { + const isDestIdConfigured = logDestIds?.find?.((envDId) => envDId && envDId === m?.destinationId); + const isWspIdConfigured = logWspIds?.find?.( + (envWspId) => envWspId && envWspId === m?.workspaceId, + ); + return Boolean(isDestIdConfigured || isWspIdConfigured); +}; + +const getMatchedMetadata = (metadata) => { + if (!Array.isArray(metadata)) { + if (isMetadataMatching(metadata)) { + return [metadata]; + } + return []; + } + return metadata.filter((m) => isMetadataMatching(m)); +}; + +module.exports = { + isMetadataMatching, + getMatchedMetadata, +}; diff --git a/src/v0/destinations/drip/transform.js b/src/v0/destinations/drip/transform.js index 4ccba076d0..1729ef3cdc 100644 --- a/src/v0/destinations/drip/transform.js +++ b/src/v0/destinations/drip/transform.js @@ -38,7 +38,7 @@ const { } = require('./util'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const identifyResponseBuilder = async (message, { Config }) => { +const identifyResponseBuilder = async (message, { Config }, metadata) => { const id = getDestinationExternalID(message, 'dripId'); let email = getFieldValueFromMessage(message, 'email'); @@ -117,7 +117,7 @@ const identifyResponseBuilder = async (message, { Config }) => { response.method = defaultPostRequestConfig.requestMethod; const campaignId = getDestinationExternalID(message, 'dripCampaignId') || Config.campaignId; if (campaignId && email) { - const check = await createUpdateUser(finalpayload, Config, basicAuth); + const check = await createUpdateUser(finalpayload, Config, basicAuth, metadata); if (!check) { throw new NetworkInstrumentationError('Unable to create/update user.'); } @@ -139,7 +139,7 @@ const identifyResponseBuilder = async (message, { Config }) => { return response; }; -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async (message, { Config }, metadata) => { const id = getDestinationExternalID(message, 'dripId'); let email = getValueFromMessage(message, [ @@ -162,7 +162,7 @@ const trackResponseBuilder = async (message, { Config }) => { event = event.trim().toLowerCase(); if (!Config.enableUserCreation && !id) { - const check = await userExists(Config, email); + const check = await userExists(Config, email, metadata); if (!check) { throw new NetworkInstrumentationError( 'User creation mode is disabled and user does not exist. Track call aborted.', @@ -239,7 +239,7 @@ const trackResponseBuilder = async (message, { Config }) => { }; const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -255,10 +255,10 @@ const process = async (event) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(message, destination, metadata); break; case EventType.TRACK: - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder(message, destination, metadata); break; default: throw new InstrumentationError(`Message type ${messageType} not supported`); diff --git a/src/v0/destinations/drip/util.js b/src/v0/destinations/drip/util.js index b7015c9351..d3e6760f32 100644 --- a/src/v0/destinations/drip/util.js +++ b/src/v0/destinations/drip/util.js @@ -1,11 +1,11 @@ const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const logger = require('../../../logger'); const { constructPayload, isDefinedAndNotNull } = require('../../util'); const { ENDPOINT, productMapping } = require('./config'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); const isValidEmail = (email) => { const re = @@ -19,82 +19,87 @@ const isValidTimestamp = (timestamp) => { return re.test(String(timestamp)); }; -const userExists = async (Config, id) => { +const userExists = async (Config, id, metadata) => { const basicAuth = Buffer.from(Config.apiKey).toString('base64'); - let response; - try { - response = await myAxios.get( - `${ENDPOINT}/v2/${Config.accountId}/subscribers/${id}`, - { - headers: { - Authorization: `Basic ${basicAuth}`, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'drip', - feature: 'transformation', - requestMethod: 'GET', - endpointPath: '/subscribers/id', - module: 'router', + + const { httpResponse } = await handleHttpRequest( + 'get', + `${ENDPOINT}/v2/${Config.accountId}/subscribers/${id}`, + { + headers: { + Authorization: `Basic ${basicAuth}`, + 'Content-Type': JSON_MIME_TYPE, }, - ); - if (response && response.status) { - return response.status === 200; + }, + { + metadata, + destType: 'drip', + feature: 'transformation', + requestMethod: 'GET', + endpointPath: '/subscribers/id', + module: 'router', + }, + ); + if (httpResponse.success) { + if (httpResponse.response.status) { + return httpResponse.response.status === 200; } throw new NetworkError( 'Invalid response.', - response?.status, + httpResponse.response?.status, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(response?.status), + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(httpResponse.response.status), }, - response, + httpResponse.response, ); - } catch (error) { - let errMsg = ''; - let errStatus = 400; - if (error.response) { - errStatus = error.response.status || 400; - errMsg = error.response.data - ? JSON.stringify(error.response.data) - : 'error response not found'; - } - throw new NetworkError(`Error occurred while checking user : ${errMsg}`, errStatus, { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errStatus), - }); } + + const error = httpResponse.response?.response; + let errMsg = ''; + let errStatus = 400; + if (error) { + errStatus = error.status || 400; + errMsg = error.data ? JSON.stringify(error.data) : 'error response not found'; + } + throw new NetworkError(`Error occurred while checking user : ${errMsg}`, errStatus, { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(errStatus), + }); }; -const createUpdateUser = async (finalpayload, Config, basicAuth) => { - try { - const response = await myAxios.post( - `${ENDPOINT}/v2/${Config.accountId}/subscribers`, - finalpayload, - { - headers: { - Authorization: `Basic ${basicAuth}`, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'drip', - feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/subscribers', - module: 'router', +const createUpdateUser = async (finalpayload, Config, basicAuth, metadata) => { + const { httpResponse } = await handleHttpRequest( + 'post', + `${ENDPOINT}/v2/${Config.accountId}/subscribers`, + finalpayload, + { + headers: { + Authorization: `Basic ${basicAuth}`, + 'Content-Type': JSON_MIME_TYPE, }, - ); + }, + { + metadata, + destType: 'drip', + feature: 'transformation', + requestMethod: 'POST', + endpointPath: '/subscribers', + module: 'router', + }, + ); + if (httpResponse.success) { + const { response } = httpResponse; if (response) { return response.status === 200 || response.status === 201; } throw new AbortedError('Invalid response.'); - } catch (error) { - let errMsg = ''; - if (error.response && error.response.data) { - errMsg = JSON.stringify(error.response.data); - } - throw new AbortedError(`Error occurred while creating or updating user : ${errMsg}`); } + + const error = httpResponse.response; + let errMsg = ''; + if (error.response && error.response.data) { + errMsg = JSON.stringify(error.response.data); + } + throw new AbortedError(`Error occurred while creating or updating user : ${errMsg}`); }; const createList = (productList) => { diff --git a/src/v0/destinations/ga4_v2/transform.ts b/src/v0/destinations/ga4_v2/transform.ts index 76adc00e00..79892d791e 100644 --- a/src/v0/destinations/ga4_v2/transform.ts +++ b/src/v0/destinations/ga4_v2/transform.ts @@ -1,4 +1,8 @@ -import { InstrumentationError, RudderStackEvent } from '@rudderstack/integrations-lib'; +import { + InstrumentationError, + isDefinedAndNotNull, + RudderStackEvent, +} from '@rudderstack/integrations-lib'; import { ProcessorTransformationRequest } from '../../../types'; import { handleCustomMappings } from './customMappingsHandler'; import { process as ga4Process } from '../ga4/transform'; @@ -7,6 +11,17 @@ import { basicConfigvalidaiton } from '../ga4/utils'; export function process(event: ProcessorTransformationRequest) { const { message, destination } = event; const { Config } = destination; + if (isDefinedAndNotNull(Config.configData)) { + const configDetails = JSON.parse(Config.configData); + Config.propertyId = configDetails.PROPERTY; + Config.typesOfClient = configDetails.DATA_STREAM.type; + if (Config.typesOfClient === 'gtag') { + Config.measurementId = configDetails.DATA_STREAM.value; + } else if (Config.typesOfClient === 'firebase') { + Config.firebaseAppId = configDetails.DATA_STREAM.value; + } + Config.apiSecret = configDetails.MEASUREMENT_PROTOCOL_SECRET; + } const eventPayload = message as RudderStackEvent; diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index d82349c04d..21a5fff78b 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -4,9 +4,8 @@ const { NetworkError, NetworkInstrumentationError } = require('@rudderstack/inte const SqlString = require('sqlstring'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); -const { CONVERSION_ACTION_ID_CACHE_TTL, destType } = require('./config'); +const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config'); const Cache = require('../../util/cache'); -const logger = require('../../../logger'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -39,10 +38,6 @@ const getConversionActionId = async ({ method, headers, params, metadata }) => { query: queryString, }; const searchStreamEndpoint = `${BASE_ENDPOINT}/${params.customerId}/googleAds:searchStream`; - logger.requestLog(`[${destType.toUpperCase()}] get conversion action id request`, { - metadata, - requestDetails: { url: searchStreamEndpoint, body: data, method }, - }); const requestBody = { url: searchStreamEndpoint, data, @@ -61,15 +56,7 @@ const getConversionActionId = async ({ method, headers, params, metadata }) => { metadata, }, ); - const { status, response, headers: responseHeaders } = gaecConversionActionIdResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion action id response`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { status, response } = gaecConversionActionIdResponse; if (!isHttpStatusSuccess(status)) { throw new NetworkError( `"${JSON.stringify( @@ -116,31 +103,14 @@ const ProxyRequest = async (request) => { 'conversionAdjustments[0].conversionAction', `customers/${params.customerId}/conversionActions/${conversionActionId}`, ); - logger.requestLog(`[${destType.toUpperCase()}] conversion enhancement request`, { - metadata, - requestDetails: { url: endpoint, body: body.JSON, method }, - }); const requestBody = { url: endpoint, data: body.JSON, headers, method }; - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - requestBody, - { - destType: 'google_adwords_enhanced_conversions', - feature: 'proxy', - endpointPath: `/googleAds:uploadOfflineUserData`, - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - const { response: processedResp, status, headers: responseHeaders } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] conversion enhancement response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', requestBody, { + destType: 'google_adwords_enhanced_conversions', + feature: 'proxy', + endpointPath: `/googleAds:uploadOfflineUserData`, + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: { - response: processedResp, - status, - headers: responseHeaders, - }, }); return response; }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index 51bc57d176..8c86fc9bc0 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -21,20 +21,11 @@ const { getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); -const logger = require('../../../logger'); const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL); const createJob = async ({ endpoint, headers, payload, metadata }) => { const endPoint = `${endpoint}:create`; - logger.requestLog(`[${destType.toUpperCase()}] job creation request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); let createJobResponse = await httpPOST( endPoint, payload, @@ -49,15 +40,7 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { }, ); createJobResponse = processAxiosResponse(createJobResponse); - const { response, status, headers: responseHeaders } = createJobResponse; - logger.responseLog(`[${destType.toUpperCase()}] create job`, { - metadata, - responseDetails: { - headers: responseHeaders, - status, - response, - }, - }); + const { response, status } = createJobResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, @@ -71,14 +54,6 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata }) => { const endPoint = `${endpoint}/${jobId}:addOperations`; - logger.requestLog(`[${destType.toUpperCase()}] add conversion to job request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); let addConversionToJobResponse = await httpPOST( endPoint, payload, @@ -93,15 +68,7 @@ const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata }, ); addConversionToJobResponse = processAxiosResponse(addConversionToJobResponse); - const { response, status, headers: responseHeaders } = addConversionToJobResponse; - logger.responseLog(`[${destType.toUpperCase()}] add conversion to job`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = addConversionToJobResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Add Conversion`, @@ -115,15 +82,7 @@ const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata const runTheJob = async ({ endpoint, headers, payload, jobId, metadata }) => { const endPoint = `${endpoint}/${jobId}:run`; - logger.requestLog(`[${destType.toUpperCase()}] run job request`, { - metadata, - requestDetails: { - body: payload, - method: 'POST', - url: endPoint, - }, - }); - const { httpResponse: executeJobResponse, processedResponse } = await handleHttpRequest( + const { httpResponse: executeJobResponse } = await handleHttpRequest( 'post', endPoint, payload, @@ -137,15 +96,6 @@ const runTheJob = async ({ endpoint, headers, payload, jobId, metadata }) => { metadata, }, ); - const { headers: responseHeaders, response, status } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] run job`, { - metadata, - responseDetails: { - response, - status, - responseHeaders, - }, - }); return executeJobResponse; }; @@ -167,14 +117,6 @@ const getConversionCustomVariable = async ({ headers, params, metadata }) => { const requestOptions = { headers, }; - logger.requestLog(`[${destType.toUpperCase()}] get conversion custom variable request`, { - metadata, - requestDetails: { - url: endpoint, - body: data, - method: 'post', - }, - }); let searchStreamResponse = await httpPOST(endpoint, data, requestOptions, { destType: 'google_adwords_offline_conversions', feature: 'proxy', @@ -184,15 +126,7 @@ const getConversionCustomVariable = async ({ headers, params, metadata }) => { metadata, }); searchStreamResponse = processAxiosResponse(searchStreamResponse); - const { response, status, headers: responseHeaders } = searchStreamResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion custom variable`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = searchStreamResponse; if (!isHttpStatusSuccess(status)) { throw new NetworkError( `[Google Ads Offline Conversions]:: ${response?.[0]?.error?.message} during google_ads_offline_conversions response transformation`, @@ -339,11 +273,7 @@ const ProxyRequest = async (request) => { } } const requestBody = { url: endpoint, data: body.JSON, headers, method }; - logger.requestLog(`[${destType.toUpperCase()}] offline conversion creation request`, { - metadata, - requestDetails: { url: requestBody.url, body: requestBody.data, method }, - }); - const { httpResponse, processedResponse } = await handleHttpRequest('constructor', requestBody, { + const { httpResponse } = await handleHttpRequest('constructor', requestBody, { feature: 'proxy', destType: 'gogole_adwords_offline_conversions', endpointPath: `/proxy`, @@ -351,15 +281,6 @@ const ProxyRequest = async (request) => { module: 'dataDelivery', metadata, }); - const { headers: responseHeaders, status, response } = processedResponse; - logger.responseLog(`[${destType.toUpperCase()}] deliver event to destination`, { - metadata, - responseDetails: { - response, - headers: responseHeaders, - status, - }, - }); return httpResponse; }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index bf1773d450..7c21371ccf 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -30,13 +30,11 @@ const { CLICK_CONVERSION, trackCallConversionsMapping, consentConfigMap, - destType, } = require('./config'); const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const Cache = require('../../util/cache'); const helper = require('./helper'); const { finaliseConsent } = require('../../util/googleUtils'); -const logger = require('../../../logger'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -71,14 +69,6 @@ const getConversionActionId = async ({ headers, params, metadata }) => { const requestOptions = { headers, }; - logger.requestLog(`[${destType.toUpperCase()}] get conversion action id request`, { - metadata, - requestDetails: { - url: endpoint, - body: data, - method: 'post', - }, - }); let searchStreamResponse = await httpPOST(endpoint, data, requestOptions, { destType: 'google_adwords_offline_conversions', feature: 'transformation', @@ -88,15 +78,7 @@ const getConversionActionId = async ({ headers, params, metadata }) => { metadata, }); searchStreamResponse = processAxiosResponse(searchStreamResponse); - const { response, status, headers: responseHeaders } = searchStreamResponse; - logger.responseLog(`[${destType.toUpperCase()}] get conversion action id response`, { - metadata, - responseDetails: { - response, - status, - headers: responseHeaders, - }, - }); + const { response, status } = searchStreamResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( `[Google Ads Offline Conversions]:: ${JSON.stringify( diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 82fb62b74e..4c9a9156e8 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,14 +1,12 @@ const { NetworkError } = require('@rudderstack/integrations-lib'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); -const logger = require('../../../logger'); const { processAxiosResponse, getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); -const { destType } = require('./config'); /** * This function helps to create a offlineUserDataJobs * @param endpoint @@ -39,29 +37,13 @@ const createJob = async ({ endpoint, headers, method, params, metadata }) => { headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] job creation request`, { + const { httpResponse } = await handleHttpRequest('constructor', jobCreatingRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/customers/create', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - requestDetails: { - url: jobCreatingRequest.url, - body: jobCreatingRequest.data, - method: jobCreatingRequest.method, - }, - }); - const { httpResponse, processedResponse } = await handleHttpRequest( - 'constructor', - jobCreatingRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/customers/create', - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] job creation response`, { - metadata, - responseDetails: processedResponse, }); return httpResponse; }; @@ -82,29 +64,13 @@ const addUserToJob = async ({ endpoint, headers, method, jobId, body, metadata } headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] add user to job request`, { - metadata, - requestDetails: { - url: secondRequest.url, - body: secondRequest.data, - method: secondRequest.method, - }, - }); - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - secondRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/addOperations', - requestMethod: 'POST', - module: 'dataDelivery', - metadata, - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] add user to job response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', secondRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/addOperations', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: processedResponse, }); return response; }; @@ -123,28 +89,13 @@ const runTheJob = async ({ endpoint, headers, method, jobId, metadata }) => { headers, method, }; - logger.requestLog(`[${destType.toUpperCase()}] run job request`, { - metadata, - requestDetails: { - url: thirdRequest.url, - body: thirdRequest.data, - method: thirdRequest.method, - }, - }); - const { httpResponse: response, processedResponse } = await handleHttpRequest( - 'constructor', - thirdRequest, - { - destType: 'google_adwords_remarketing_lists', - feature: 'proxy', - endpointPath: '/run', - requestMethod: 'POST', - module: 'dataDelivery', - }, - ); - logger.responseLog(`[${destType.toUpperCase()}] run job response`, { + const { httpResponse: response } = await handleHttpRequest('constructor', thirdRequest, { + destType: 'google_adwords_remarketing_lists', + feature: 'proxy', + endpointPath: '/run', + requestMethod: 'POST', + module: 'dataDelivery', metadata, - responseDetails: processedResponse, }); return response; }; diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 4db59cfb05..3f6f6ca2ca 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -2,7 +2,6 @@ const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils'); const lodash = require('lodash'); const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib'); const { WhiteListedTraits } = require('../../../constants'); -const logger = require('../../../logger'); const { constructPayload, @@ -18,13 +17,7 @@ const tags = require('../../util/tags'); const { handleHttpRequest } = require('../../../adapters/network'); const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); -const { - BASE_ENDPOINT, - MAPPING_CONFIG, - CONFIG_CATEGORIES, - MAX_BATCH_SIZE, - destType, -} = require('./config'); +const { BASE_ENDPOINT, MAPPING_CONFIG, CONFIG_CATEGORIES, MAX_BATCH_SIZE } = require('./config'); const REVISION_CONSTANT = '2023-02-22'; @@ -43,14 +36,6 @@ const getIdFromNewOrExistingProfile = async ({ endpoint, payload, requestOptions let response; let profileId; const endpointPath = '/api/profiles'; - logger.requestLog(`[${destType.toUpperCase()}] get id from profile request`, { - metadata, - requestDetails: { - url: endpoint, - body: payload, - method: 'post', - }, - }); const { processedResponse: resp } = await handleHttpRequest( 'post', endpoint, @@ -62,12 +47,9 @@ const getIdFromNewOrExistingProfile = async ({ endpoint, payload, requestOptions endpointPath, requestMethod: 'POST', module: 'router', + metadata, }, ); - logger.responseLog(`[${destType.toUpperCase()}] get id from profile response`, { - metadata, - responseDetails: resp, - }); /** * 201 - profile is created with updated payload no need to update it again (suppress event with 299 status code) diff --git a/src/v0/destinations/kustomer/transform.js b/src/v0/destinations/kustomer/transform.js index e5010f55e0..1760a2db55 100644 --- a/src/v0/destinations/kustomer/transform.js +++ b/src/v0/destinations/kustomer/transform.js @@ -83,7 +83,7 @@ const constructKustomerPayload = (message, category, email) => { // Main process function responsible for building payload for all // type of events. -const responseBuilderSimple = async (message, category, destination) => { +const responseBuilderSimple = async (message, category, destination, metadata) => { let payload = {}; // Reference for base endpoint @@ -119,6 +119,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/email=${userEmail}`, destination, + metadata, ); } // If response.userExists flag is false @@ -128,6 +129,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/externalId=${userId}`, destination, + metadata, ); } // If response.userExists flag is still false @@ -137,6 +139,7 @@ const responseBuilderSimple = async (message, category, destination) => { storedState = await fetchKustomer( `${BASE_ENDPOINT}/v1/customers/externalId=${get(message, 'anonymousId')}`, destination, + metadata, ); } // URL to use for creating new Kustomer @@ -206,7 +209,7 @@ const responseBuilderSimple = async (message, category, destination) => { throw new TransformationError('Payload could not be constructed'); }; -const processEvent = (message, destination) => { +const processEvent = (message, destination, metadata) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -227,10 +230,10 @@ const processEvent = (message, destination) => { default: throw new InstrumentationError(`Event type ${message.type} is not supported`); } - return responseBuilderSimple(message, category, destination); + return responseBuilderSimple(message, category, destination, metadata); }; -const process = (event) => processEvent(event.message, event.destination); +const process = (event) => processEvent(event.message, event.destination, event.metadata); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/kustomer/util.js b/src/v0/destinations/kustomer/util.js index 530983bb26..cafaffcdd9 100644 --- a/src/v0/destinations/kustomer/util.js +++ b/src/v0/destinations/kustomer/util.js @@ -2,12 +2,12 @@ const lodash = require('lodash'); const set = require('set-value'); const get = require('get-value'); -const { NetworkError, AbortedError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); +const { NetworkError } = require('@rudderstack/integrations-lib'); const { DEFAULT_BASE_ENDPOINT } = require('./config'); const { getType, isDefinedAndNotNull, isObject } = require('../../util'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); +const { handleHttpRequest } = require('../../../adapters/network'); /** * RegExp to test a string for a ISO 8601 Date spec @@ -97,8 +97,8 @@ const handleAdvancedtransformations = (event) => { return cloneEvent; }; -const handleResponse = (response) => { - const { status, data } = response; +const handleResponse = (processedResponse) => { + const { status, response: data } = processedResponse; switch (status) { case 200: if (data && data.data && data.data.id) { @@ -113,7 +113,7 @@ const handleResponse = (response) => { { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, - response, + processedResponse, ); case 404: return { userExists: false }; @@ -124,36 +124,30 @@ const handleResponse = (response) => { { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status || 400), }, - response, + processedResponse, ); } }; -const fetchKustomer = async (url, destination) => { - let response; - try { - response = await myAxios.get( - url, - { - headers: { - Authorization: `Bearer ${destination.Config.apiKey}`, - }, - }, - { - destType: 'kustomer', - feature: 'transformation', - endpointPath: '/customers/email', - requestMethod: 'GET', - module: 'processor', +const fetchKustomer = async (url, destination, metadata) => { + const { processedResponse } = await handleHttpRequest( + 'get', + url, + { + headers: { + Authorization: `Bearer ${destination.Config.apiKey}`, }, - ); - } catch (err) { - if (err.response) { - return handleResponse(err.response); - } - throw new AbortedError(err.message); - } - return handleResponse(response); + }, + { + metadata, + destType: 'kustomer', + feature: 'transformation', + endpointPath: '/customers/email', + requestMethod: 'GET', + module: 'processor', + }, + ); + return handleResponse(processedResponse); }; module.exports = { diff --git a/src/v0/destinations/salesforce/utils.js b/src/v0/destinations/salesforce/utils.js index 85061ce2b2..bb1236d290 100644 --- a/src/v0/destinations/salesforce/utils.js +++ b/src/v0/destinations/salesforce/utils.js @@ -58,12 +58,13 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey, authori } else if ( status === 400 && matchErrorCode('CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY') && - response?.message?.includes('UNABLE_TO_LOCK_ROW') + (response?.message?.includes('UNABLE_TO_LOCK_ROW') || + response?.message?.includes('Too many SOQL queries')) ) { // handling the error case where the record is locked by another background job // this is a retryable error throw new RetryableError( - `${DESTINATION} Request Failed - "Row locked due to another background running on the same object", (Retryable) ${sourceMessage}`, + `${DESTINATION} Request Failed - "${response.message}", (Retryable) ${sourceMessage}`, 500, destResponse, ); diff --git a/src/v0/destinations/trengo/transform.js b/src/v0/destinations/trengo/transform.js index 01c5cfeb25..b5ce5f0fa6 100644 --- a/src/v0/destinations/trengo/transform.js +++ b/src/v0/destinations/trengo/transform.js @@ -9,7 +9,6 @@ const { InstrumentationError, NetworkInstrumentationError, } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { EventType } = require('../../../constants'); const { EndPoints, BASE_URL } = require('./config'); const { @@ -27,6 +26,7 @@ const { const tags = require('../../util/tags'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); /** * @@ -80,39 +80,44 @@ const validate = (email, phone, channelIdentifier) => { * * In case no contact is founf for a particular identifer it returns -1 */ -const lookupContact = async (term, destination) => { - let res; - try { - res = await myAxios.get( - `${BASE_URL}/contacts?page=1&term=${term}`, - { - headers: { - Authorization: `Bearer ${destination.Config.apiToken}`, - }, - }, - { - destType: 'trengo', - feature: 'transformation', - endpointPath: '/contacts', - requestMethod: 'GET', - module: 'router', +const lookupContact = async (term, destination, metadata) => { + const { httpResponse, processedResponse } = await handleHttpRequest( + 'get', + `${BASE_URL}/contacts?page=1&term=${term}`, + { + headers: { + Authorization: `Bearer ${destination.Config.apiToken}`, }, - ); - } catch (err) { - // check if exists err.response && err.response.status else 500 - const status = err.response?.status || 400; + }, + { + metadata, + destType: 'trengo', + feature: 'transformation', + endpointPath: '/contacts', + requestMethod: 'GET', + module: 'router', + }, + ); + if (!httpResponse.success) { + const status = processedResponse?.status || 400; throw new NetworkError( - `Inside lookupContact, failed to make request: ${err.response?.statusText}`, + `Inside lookupContact, failed to make request: ${httpResponse.response?.response?.statusText}`, status, - { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, - err.response, + processedResponse, ); } - if (res && res.status === 200 && res.data && res.data.data && Array.isArray(res.data.data)) { - const { data } = res.data; + // check if exists err.response && err.response.status else 500 + + if ( + processedResponse && + processedResponse.status === 200 && + processedResponse.response && + Array.isArray(processedResponse.response.data) + ) { + const { data } = processedResponse.response; if (data.length > 1) { throw new NetworkInstrumentationError( `Inside lookupContact, duplicates present for identifier : ${term}`, @@ -141,6 +146,7 @@ const contactBuilderTrengo = async ( destination, identifier, extIds, + metadata, createScope = true, ) => { let result; @@ -175,7 +181,7 @@ const contactBuilderTrengo = async ( let contactId = get(extIds, 'contactId'); if (!contactId) { // If we alrady dont have contactId in our message we do lookup - contactId = await lookupContact(identifier, destination); + contactId = await lookupContact(identifier, destination, metadata); if (!contactId) { // In case contactId is returned null we throw error (This indicates and search API issue in trengo end) throw new NetworkInstrumentationError( @@ -202,13 +208,13 @@ const contactBuilderTrengo = async ( return result; }; -const ticketBuilderTrengo = async (message, destination, identifer, extIds) => { +const ticketBuilderTrengo = async (message, destination, identifer, extIds, metadata) => { let subjectLine; const template = getTemplate(message, destination); const externalId = get(extIds, 'externalId'); let contactId = get(extIds, 'contactId'); if (!contactId) { - contactId = await lookupContact(identifer, destination); + contactId = await lookupContact(identifer, destination, metadata); if (!contactId) { throw new InstrumentationError( `LookupContact failed for term:${identifer} track event failed`, @@ -263,7 +269,7 @@ const ticketBuilderTrengo = async (message, destination, identifer, extIds) => { * based on type of event and the destination configurations the * payloads are generated. */ -const responseBuilderSimple = async (message, messageType, destination) => { +const responseBuilderSimple = async (message, messageType, destination, metadata) => { let trengoPayload; // ChannelId is a mandatory field if it is not present in destination config // we will abort events. @@ -293,6 +299,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, false, ); if (trengoPayload === -1) { @@ -306,6 +313,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, true, ); } @@ -320,6 +328,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, true, ); } @@ -331,6 +340,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { destination, channelIdentifier === 'email' ? email : phone, extIds, + metadata, ); } // Wrapped payload with structure @@ -370,7 +380,7 @@ const responseBuilderSimple = async (message, messageType, destination) => { * If event type is not identify or track it will discard * the event */ -const processEvent = async (message, destination) => { +const processEvent = async (message, destination, metadata) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -378,12 +388,12 @@ const processEvent = async (message, destination) => { if (messageType !== EventType.IDENTIFY && messageType !== EventType.TRACK) { throw new InstrumentationError(`Event type ${messageType} is not supported`); } - const resp = await responseBuilderSimple(message, messageType, destination); + const resp = await responseBuilderSimple(message, messageType, destination, metadata); return resp; }; const process = async (event) => { - const response = await processEvent(event.message, event.destination); + const response = await processEvent(event.message, event.destination, event.metadata); return response; }; diff --git a/src/v0/util/facebookUtils/networkHandler.js b/src/v0/util/facebookUtils/networkHandler.js index 5338364fe2..fbb7899efe 100644 --- a/src/v0/util/facebookUtils/networkHandler.js +++ b/src/v0/util/facebookUtils/networkHandler.js @@ -216,6 +216,9 @@ const errorDetailsMap = { 200: { default: new ErrorDetailsExtractorBuilder().setStatus(403).setMessageField('message').build(), }, + 21009: { + default: new ErrorDetailsExtractorBuilder().setStatus(500).setMessageField('message').build(), + }, }; const getErrorDetailsFromErrorMap = (error) => { diff --git a/src/v1/destinations/campaign_manager/networkHandler.js b/src/v1/destinations/campaign_manager/networkHandler.js index eee3869fb5..300b5f9676 100644 --- a/src/v1/destinations/campaign_manager/networkHandler.js +++ b/src/v1/destinations/campaign_manager/networkHandler.js @@ -9,7 +9,6 @@ const { getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../../v0/util/tags'); -const logger = require('../../../logger'); function isEventAbortableAndExtractErrMsg(element, proxyOutputObj) { let isAbortable = false; @@ -39,16 +38,7 @@ const responseHandler = (responseParams) => { const { destinationResponse, rudderJobMetadata } = responseParams; const message = `[CAMPAIGN_MANAGER Response V1 Handler] - Request Processed Successfully`; const responseWithIndividualEvents = []; - const { response, status, headers } = destinationResponse; - - logger.responseLog('[campaign_manager] response handling', { - metadata: rudderJobMetadata, - responseDetails: { - headers, - response, - status, - }, - }); + const { response, status } = destinationResponse; if (isHttpStatusSuccess(status)) { // check for Partial Event failures and Successes diff --git a/src/v1/destinations/monday/networkHandler.js b/src/v1/destinations/monday/networkHandler.js index 5a0313a27b..28a7f1abc0 100644 --- a/src/v1/destinations/monday/networkHandler.js +++ b/src/v1/destinations/monday/networkHandler.js @@ -6,7 +6,6 @@ const { } = require('../../../adapters/utils/networkUtils'); const { isHttpStatusSuccess } = require('../../../v0/util/index'); const tags = require('../../../v0/util/tags'); -const logger = require('../../../logger'); const checkIfUpdationOfStatusRequired = (response) => { let errorMsg = ''; @@ -42,16 +41,8 @@ const responseHandler = (responseParams) => { const message = '[MONDAY Response V1 Handler] - Request Processed Successfully'; const responseWithIndividualEvents = []; - const { response, status, headers } = destinationResponse; + const { response, status } = destinationResponse; - logger.responseLog('[monday] proxy response', { - metadata: rudderJobMetadata, - responseDetails: { - headers, - response, - status, - }, - }); // batching not supported if (isHttpStatusSuccess(status)) { const proxyOutput = { diff --git a/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts b/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts index e66e98bbe3..3366e62c5a 100644 --- a/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts +++ b/test/integrations/destinations/facebook_pixel/dataDelivery/data.ts @@ -487,6 +487,61 @@ export const v0TestData = [ }, }, }, + + { + name: 'facebook_pixel', + description: 'Test 9: should handle error with code: 21009', + feature: 'dataDelivery', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + body: { + XML: {}, + FORM: testFormData, + JSON: {}, + JSON_ARRAY: {}, + }, + type: 'REST', + files: {}, + method: 'POST', + userId: '', + headers: {}, + version: '1', + endpoint: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=unhandled_error_code_21009`, + params: { + destination: 'facebook_pixel', + }, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 500, + body: { + output: { + status: 500, + message: '(#21009) The data set upload is temporarily not ready.', + destinationResponse: { + error: { + message: '(#21009) The data set upload is temporarily not ready.', + type: 'OAuthException', + code: 21009, + fbtrace_id: 'dDu39o39lkeo8', + }, + status: 400, + }, + statTags: { + ...statTags, + errorType: 'retryable', + }, + }, + }, + }, + }, + }, ]; export const data = [ diff --git a/test/integrations/destinations/facebook_pixel/network.ts b/test/integrations/destinations/facebook_pixel/network.ts index a61fa44eab..411d36cf19 100644 --- a/test/integrations/destinations/facebook_pixel/network.ts +++ b/test/integrations/destinations/facebook_pixel/network.ts @@ -48,6 +48,26 @@ export const networkCallsData = [ status: 400, }, }, + { + httpReq: { + url: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=unhandled_error_code_21009`, + data: getFormData(testFormData).toString(), + params: { destination: 'facebook_pixel' }, + headers: { 'User-Agent': 'RudderLabs' }, + method: 'POST', + }, + httpRes: { + data: { + error: { + message: '(#21009) The data set upload is temporarily not ready.', + type: 'OAuthException', + code: 21009, + fbtrace_id: 'dDu39o39lkeo8', + }, + }, + status: 400, + }, + }, { httpReq: { url: `https://graph.facebook.com/${VERSION}/1234567891234567/events?access_token=throttled_valid_access_token`, diff --git a/test/integrations/destinations/trengo/network.ts b/test/integrations/destinations/trengo/network.ts index e409489b8f..62b5016558 100644 --- a/test/integrations/destinations/trengo/network.ts +++ b/test/integrations/destinations/trengo/network.ts @@ -1323,4 +1323,23 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + headers: { + Authorization: 'Bearer wrong_trengo_integration_test_api_token', + }, + + method: 'GET', + + url: 'https://app.trengo.com/api/v2/contacts?page=1&term=null', + }, + httpRes: { + data: { + message: 'Unauthenticated.', + errors: [], + }, + statusText: 'UNAUTHORIZED', + status: 401, + }, + }, ]; diff --git a/test/integrations/destinations/trengo/processor/data.ts b/test/integrations/destinations/trengo/processor/data.ts index 88d03bbfb5..6772a1b940 100644 --- a/test/integrations/destinations/trengo/processor/data.ts +++ b/test/integrations/destinations/trengo/processor/data.ts @@ -1461,4 +1461,87 @@ export const data = [ }, }, }, + { + name: 'trengo', + description: 'Test 16', + feature: 'processor', + module: 'destination', + id: 'processor_trengo', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + apiToken: 'wrong_trengo_integration_test_api_token', + channelId: 'trengo_phone_channel', + channelIdentifier: 'email', + enableDedup: false, + eventTemplateMap: [ + { from: 'Product Purchased', to: '{{event}} from Rudderstack' }, + { from: 'checkedOut', to: 'Total cart value {{value}} shipped' }, + { from: 'Order Completed', to: 'Completed Order' }, + { from: 'Stress Test' }, + { from: 'Stress test2', to: '' }, + { from: 'Stress test3', to: '{event} Stress test' }, + ], + }, + }, + message: { + userId: 'randomUserId', + type: 'track', + event: 'Stress test2', + properties: { name: 'Random_Track_call', value: 5000 }, + context: { + ip: '14.5.67.21', + app: { + build: '1', + name: 'RudderAndroidClient', + namespace: 'com.rudderstack.demo.android', + version: '1.0', + }, + device: { + id: '7e32188a4dab669f', + manufacturer: 'Google', + model: 'Android SDK built for x86', + name: 'generic_x86', + type: 'android', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '0.1.4' }, + locale: 'en-US', + network: { carrier: 'Android', bluetooth: false, cellular: true, wifi: true }, + os: { name: 'Android', version: '9' }, + screen: { density: 420, height: 1794, width: 1080 }, + timezone: 'Asia/Kolkata', + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: [ + { + // though we are getting undefined as statusText through mocked response but we are getting that from actual response + error: + '{"message":"Inside lookupContact, failed to make request: undefined","destinationResponse":{"response":{"message":"Unauthenticated.","errors":[]},"status":401}}', + statTags: { + destType: 'TRENGO', + errorCategory: 'network', + errorType: 'aborted', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 401, + }, + ], + }, + }, + }, ]; diff --git a/test/integrations/destinations/wunderkind/common.ts b/test/integrations/destinations/wunderkind/common.ts new file mode 100644 index 0000000000..48472b0059 --- /dev/null +++ b/test/integrations/destinations/wunderkind/common.ts @@ -0,0 +1,123 @@ +import { Destination } from '../../../../src/types'; + +export const destType = 'wunderkind'; +const destTypeInUpperCase = 'WUNDERKIND'; +const displayName = 'WUNDERKIND'; +export const destination: Destination = { + Config: { + accountID: 'test-account-id', + instanceID: 'test-instance-id', + apiKey: 'test-api-key', + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', +}; + +export const properties = { + profileLoginType: 'logged-in', + launchType: 'organic', + platform: 'iphone-app', + fuelType: 'Gasoline', + makeName: 'Volvo', + vehicleAdCategory: 'multi_cat', + searchInstanceId: 'test-search-instance-id', + customerId: 'test-customer-id', + drivetrain: 'All-wheel Drive', + year: '2024', + canonical_mmt: 'volvo:xc90:b5_core_bright_theme', + mileage: '5', + make: 'volvo', + pushNotification: 'disabled', + advertiserId: '00000000-0000-0000-0000-000000000000', + exteriorColor: 'Crystal White', + adobeId: 'test-adobe-id', + pageChannel: 'shopping', + bodyStyle: 'suv', + tripId: 'test-trip-id', + stockType: 'new', + makeModelTrim: 'volvo:xc90:b5_core_bright_theme', + pageName: 'shopping/vehicle-details', + model: 'xc90', + deviceType: 'mobile', + listingId: 'test-listing-id', + dealerZip: '30341', + cpoIndicator: 'false', + trim: 'b5_core_bright_theme', + canonical_mmty: 'volvo:xc90:b5_core_bright_theme:2024', + sellerType: 'franchise', + price: '56002', + vin: 'test-vin', + resultSelected: '89', + zip: '85381', + stockSubStock: 'new', + profileUserId: 'test-profile-user-id', + pageKey: 'vehicle-details', + badges: 'homeDelivery,virtualAppointment', + modelName: 'XC90', +}; + +export const runtimeEnvironment = { + sdk_version: '8.8.0', + type: 'ios', + identities: [ + { + type: 'apple_push_notification_token', + encoding: 'raw', + value: '9e3dba8db39f9d130f3d1584c8aab674e9f4b06d0b1b52867e128d3e7b1130f1', + }, + { + type: 'ios_vendor_id', + encoding: 'raw', + value: '78c53c15-32a1-4b65-adac-bec2d7bb8fab', + }, + ], + build_id: '20E12', + brand: 'iPhone14,7', + product: 'iPhone14,7', + name: 'iPhone', + manufacturer: 'Apple', + os_version: '16.3.1', + model: 'iPhone14,7', + screen_height: 2532, + screen_width: 1170, + locale_language: 'en-US', + locale_country: 'US', + network_country: 'us', + network_carrier: 'Verizon', + network_code: '480', + network_mobile_country_code: '311', + timezone_offset: -7, + timezone_name: 'America/Phoenix', + cpu_architecture: 'arm64', + radio_access_technology: 'LTE', + application_name: 'Abc.com - New Account', + application_version: '8.8.0', + application_package: 'com.abc', + apple_search_ads_attribution: {}, + client_ip_address: '192.0.2.0', +}; + +export const processorInstrumentationErrorStatTags = { + destType: destTypeInUpperCase, + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', +}; + +export const routerInstrumentationErrorStatTags = { + ...processorInstrumentationErrorStatTags, + feature: 'router', +}; diff --git a/test/integrations/destinations/wunderkind/processor/data.ts b/test/integrations/destinations/wunderkind/processor/data.ts new file mode 100644 index 0000000000..b57a5e8a12 --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/data.ts @@ -0,0 +1,3 @@ +import { validation } from './validation'; +import { track } from './track'; +export const data = [...track, ...validation]; diff --git a/test/integrations/destinations/wunderkind/processor/track.ts b/test/integrations/destinations/wunderkind/processor/track.ts new file mode 100644 index 0000000000..286f35a255 --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/track.ts @@ -0,0 +1,265 @@ +import { generateMetadata } from '../../../testUtils'; +import { destType, destination, properties, runtimeEnvironment } from '../common'; + +export const track = [ + { + id: 'Wunderkind-track-test-1', + name: destType, + description: 'Track call: custom event srp-screen-view', + scenario: 'Framework+Business', + successCriteria: + 'Response should contain the input payload with request level properties mapped from integration object `lambdaRootLevelProperties` field and event level properties mapping from integration object `extraEventProperties` field and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + event: 'srp-screen-view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + name: 'srp-screen-view', + custom_event_type: 'other', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + payload: JSON.stringify({ + account: { + account_id: 'test-account-id', + account_settings: { instance_id: 'test-instance-id', key: 'test-api-key' }, + }, + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { type: 'email', encoding: 'raw', value: 'johndoe@gmail.com' }, + { type: 'other', encoding: 'raw', value: '7c2c3abd-62bf-473e-998d-034df0f25ea3' }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + user_attributes: { firstName: 'john', lastName: 'doe' }, + events: [ + { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105115000, + name: 'srp-screen-view', + custom_event_type: 'other', + attributes: properties, + }, + ], + }), + userId: '', + }, + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'Wunderkind-track-test-2', + name: destType, + description: 'Track call: screen_view event', + scenario: 'Framework+Business', + successCriteria: + 'Response should contain the input payload with request level properties mapped from integration object `lambdaRootLevelProperties` field and event level properties mapping from integration object `extraEventProperties` field and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + event: 'screen_view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + type: 'screen_view', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + screen_name: 'shopping/vehicle-details', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + payload: JSON.stringify({ + account: { + account_id: 'test-account-id', + account_settings: { + instance_id: 'test-instance-id', + key: 'test-api-key', + }, + }, + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + user_attributes: { + firstName: 'john', + lastName: 'doe', + }, + events: [ + { + type: 'screen_view', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105115000, + screen_name: 'shopping/vehicle-details', + attributes: properties, + }, + ], + }), + userId: '', + }, + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/wunderkind/processor/validation.ts b/test/integrations/destinations/wunderkind/processor/validation.ts new file mode 100644 index 0000000000..aeabdd497b --- /dev/null +++ b/test/integrations/destinations/wunderkind/processor/validation.ts @@ -0,0 +1,50 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata } from '../../../testUtils'; +import { destType, destination, processorInstrumentationErrorStatTags } from '../common'; + +export const validation: ProcessorTestData[] = [ + { + id: 'Wunderkind-validation-test-1', + name: destType, + description: 'Unsupported message type -> group', + scenario: 'Framework', + successCriteria: 'Instrumentation Error for Unsupported message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'group', + userId: 'userId123', + channel: 'mobile', + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + metadata: generateMetadata(1), + statTags: processorInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/wunderkind/router/data.ts b/test/integrations/destinations/wunderkind/router/data.ts new file mode 100644 index 0000000000..8081bdf456 --- /dev/null +++ b/test/integrations/destinations/wunderkind/router/data.ts @@ -0,0 +1,127 @@ +import { generateMetadata } from '../../../testUtils'; +import { + destType, + destination, + properties, + runtimeEnvironment, + routerInstrumentationErrorStatTags, +} from '../common'; + +export const data = [ + { + id: 'MovableInk-router-test-1', + name: destType, + description: 'Basic Router Test to test multiple payloads', + scenario: 'Framework', + successCriteria: + 'Some events should be transformed successfully and some should fail for missing fields and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + message: { + type: 'identify', + anonymousId: 'anonId123', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + { + destination, + message: { + event: 'srp-screen-view', + type: 'track', + userId: 'test_123', + context: { + traits: { + firstName: 'john', + lastName: 'doe', + }, + }, + integrations: { + Wunderkind: { + extraEventProperties: { + screen_name: 'shopping/vehicle-details', + type: 'custom_event', + id: '1393f120-53b8-4126-8deb-874c26b5b06d', + timestamp_ms: 1703685306737, + source_id: 'test-source-id', + session_id: 1688982077105114764, + name: 'srp-screen-view', + custom_event_type: 'other', + }, + lambdaRootLevelProperties: { + type: 'event_processing_request', + id: 'a2a5575b-d3b0-4a14-96a5-79f8e38b0778', + timestamp_ms: 1718893923387, + source_id: 'test-source-id', + source_channel: 'native', + device_application_stamp: 'test-device-application-stamp', + user_identities: [ + { + type: 'customer', + encoding: 'raw', + value: 'eb3f565d-49bd-418c-ae31-801f25da0ce2', + }, + { + type: 'email', + encoding: 'raw', + value: 'johndoe@gmail.com', + }, + { + type: 'other', + encoding: 'raw', + value: '7c2c3abd-62bf-473e-998d-034df0f25ea3', + }, + ], + user_attribute_lists: {}, + runtime_environment: runtimeEnvironment, + }, + }, + }, + properties, + }, + metadata: generateMetadata(2), + }, + ], + destType, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + metadata: [generateMetadata(1)], + batched: false, + statusCode: 400, + error: 'message type identify is not supported', + statTags: routerInstrumentationErrorStatTags, + destination, + }, + { + batchedRequest: { + payload: + '{"account":{"account_id":"test-account-id","account_settings":{"instance_id":"test-instance-id","key":"test-api-key"}},"type":"event_processing_request","id":"a2a5575b-d3b0-4a14-96a5-79f8e38b0778","timestamp_ms":1718893923387,"source_id":"test-source-id","source_channel":"native","device_application_stamp":"test-device-application-stamp","user_identities":[{"type":"customer","encoding":"raw","value":"eb3f565d-49bd-418c-ae31-801f25da0ce2"},{"type":"email","encoding":"raw","value":"johndoe@gmail.com"},{"type":"other","encoding":"raw","value":"7c2c3abd-62bf-473e-998d-034df0f25ea3"}],"user_attribute_lists":{},"runtime_environment":{"sdk_version":"8.8.0","type":"ios","identities":[{"type":"apple_push_notification_token","encoding":"raw","value":"9e3dba8db39f9d130f3d1584c8aab674e9f4b06d0b1b52867e128d3e7b1130f1"},{"type":"ios_vendor_id","encoding":"raw","value":"78c53c15-32a1-4b65-adac-bec2d7bb8fab"}],"build_id":"20E12","brand":"iPhone14,7","product":"iPhone14,7","name":"iPhone","manufacturer":"Apple","os_version":"16.3.1","model":"iPhone14,7","screen_height":2532,"screen_width":1170,"locale_language":"en-US","locale_country":"US","network_country":"us","network_carrier":"Verizon","network_code":"480","network_mobile_country_code":"311","timezone_offset":-7,"timezone_name":"America/Phoenix","cpu_architecture":"arm64","radio_access_technology":"LTE","application_name":"Abc.com - New Account","application_version":"8.8.0","application_package":"com.abc","apple_search_ads_attribution":{},"client_ip_address":"192.0.2.0"},"user_attributes":{"firstName":"john","lastName":"doe"},"events":[{"screen_name":"shopping/vehicle-details","type":"custom_event","id":"1393f120-53b8-4126-8deb-874c26b5b06d","timestamp_ms":1703685306737,"source_id":"test-source-id","session_id":1688982077105115000,"name":"srp-screen-view","custom_event_type":"other","attributes":{"profileLoginType":"logged-in","launchType":"organic","platform":"iphone-app","fuelType":"Gasoline","makeName":"Volvo","vehicleAdCategory":"multi_cat","searchInstanceId":"test-search-instance-id","customerId":"test-customer-id","drivetrain":"All-wheel Drive","year":"2024","canonical_mmt":"volvo:xc90:b5_core_bright_theme","mileage":"5","make":"volvo","pushNotification":"disabled","advertiserId":"00000000-0000-0000-0000-000000000000","exteriorColor":"Crystal White","adobeId":"test-adobe-id","pageChannel":"shopping","bodyStyle":"suv","tripId":"test-trip-id","stockType":"new","makeModelTrim":"volvo:xc90:b5_core_bright_theme","pageName":"shopping/vehicle-details","model":"xc90","deviceType":"mobile","listingId":"test-listing-id","dealerZip":"30341","cpoIndicator":"false","trim":"b5_core_bright_theme","canonical_mmty":"volvo:xc90:b5_core_bright_theme:2024","sellerType":"franchise","price":"56002","vin":"test-vin","resultSelected":"89","zip":"85381","stockSubStock":"new","profileUserId":"test-profile-user-id","pageKey":"vehicle-details","badges":"homeDelivery,virtualAppointment","modelName":"XC90"}}]}', + }, + metadata: [generateMetadata(2)], + destination, + batched: false, + statusCode: 200, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/zapier/data.ts b/test/integrations/destinations/zapier/processor/data.ts similarity index 99% rename from test/integrations/destinations/zapier/data.ts rename to test/integrations/destinations/zapier/processor/data.ts index 122ffd2d1d..b938f68dc5 100644 --- a/test/integrations/destinations/zapier/data.ts +++ b/test/integrations/destinations/zapier/processor/data.ts @@ -140,7 +140,7 @@ export const data = [ body: [ { message: { - event: 'def', + event: 'Def', userId: 'identified user id', type: 'track', anonymousId: 'anon-id-new', @@ -220,7 +220,7 @@ export const data = [ params: {}, body: { JSON: { - event: 'def', + event: 'Def', userId: 'identified user id', type: 'track', anonymousId: 'anon-id-new', @@ -279,7 +279,7 @@ export const data = [ body: [ { message: { - name: 'page_test', + name: 'Page_Test', userId: 'identified user id', type: 'page', anonymousId: 'anon-id-new', @@ -368,7 +368,7 @@ export const data = [ params: {}, body: { JSON: { - name: 'page_test', + name: 'Page_Test', userId: 'identified user id', type: 'page', anonymousId: 'anon-id-new', From f363f3512f690e0745165f46587efdbe88f48683 Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Wed, 10 Jul 2024 12:36:31 +0530 Subject: [PATCH 043/201] fix: update python transformation fn (#3491) * fix: add a new reconcile function to update the python function through the endpoint * fix: update the reconciliation function with stats * chore: remove unused imports * fix: add new integration tests for python transformation functions update * chore: removed dead logs * fix: fixed the route middleware and controller handling * chore: linting fix --- src/controllers/userTransform.ts | 20 + src/routes/userTransform.ts | 6 + src/util/customTransformerFactory.js | 1 + src/util/openfaas/faasApi.js | 14 +- src/util/openfaas/index.js | 81 ++-- src/util/prometheus.js | 6 + .../user_transformation.integration.test.js | 357 +++++++++++------- test/__tests__/user_transformation.test.js | 135 +------ 8 files changed, 319 insertions(+), 301 deletions(-) diff --git a/src/controllers/userTransform.ts b/src/controllers/userTransform.ts index 47adb079fe..9f1c69c54a 100644 --- a/src/controllers/userTransform.ts +++ b/src/controllers/userTransform.ts @@ -1,4 +1,5 @@ import { Context } from 'koa'; +import { castArray } from 'lodash'; import { UserTransformService } from '../services/userTransform'; import { ProcessorTransformationRequest, UserTransformationServiceResponse } from '../types/index'; import { @@ -6,10 +7,29 @@ import { setupUserTransformHandler, validateCode, } from '../util/customTransformer'; + +import { reconcileFunction } from '../util/openfaas/index'; import { ControllerUtility } from './util'; import logger from '../logger'; export class UserTransformController { + /** + reconcileFunction is a controller function to reconcile the openfaas + fns with the latest configuration in the service. + */ + public static async reconcileFunction(ctx: Context) { + const { wId } = ctx.params; + const { name = [], migrateAll = 'false' } = ctx.request.query; + + logger.info(`Received a request to reconcile fns in workspace: ${wId}`); + + const fns = castArray(name); + await reconcileFunction(wId, fns, migrateAll === 'true'); + + ctx.body = { message: 'Reconciled' }; + return ctx; + } + public static async transform(ctx: Context) { logger.debug( '(User transform - router:/customTransform ):: Request to transformer', diff --git a/src/routes/userTransform.ts b/src/routes/userTransform.ts index 1fb8ad3a1c..fc61ab7b94 100644 --- a/src/routes/userTransform.ts +++ b/src/routes/userTransform.ts @@ -5,6 +5,12 @@ import { UserTransformController } from '../controllers/userTransform'; const router = new Router(); +router.post( + '/workspaces/:wId/reconcileFunction', + RouteActivationMiddleware.isUserTransformRouteActive, + UserTransformController.reconcileFunction, +); + router.post( '/customTransform', RouteActivationMiddleware.isUserTransformRouteActive, diff --git a/src/util/customTransformerFactory.js b/src/util/customTransformerFactory.js index ee53531946..174555821c 100644 --- a/src/util/customTransformerFactory.js +++ b/src/util/customTransformerFactory.js @@ -7,6 +7,7 @@ const UserTransformHandlerFactory = (userTransformation) => { setUserTransform: async (libraryVersionIds) => { switch (userTransformation.language) { case 'pythonfaas': + case 'python': return setOpenFaasUserTransform(userTransformation, libraryVersionIds); default: return setUserTransformHandlerV1(); diff --git a/src/util/openfaas/faasApi.js b/src/util/openfaas/faasApi.js index b932b70032..5bd80e5b02 100644 --- a/src/util/openfaas/faasApi.js +++ b/src/util/openfaas/faasApi.js @@ -26,23 +26,29 @@ const parseAxiosError = (error) => { return error; }; -const deleteFunction = async (functionName) => - new Promise((resolve, reject) => { +const deleteFunction = async (functionName) => { + logger.debug(`Deleting function: ${functionName}`); + + return new Promise((resolve, reject) => { const url = `${OPENFAAS_GATEWAY_URL}/system/functions`; axios .delete(url, { data: { functionName }, auth: basicAuth }) .then(() => resolve()) .catch((err) => reject(parseAxiosError(err))); }); +}; -const getFunction = async (functionName) => - new Promise((resolve, reject) => { +const getFunction = async (functionName) => { + logger.debug(`Getting function: ${functionName}`); + + return new Promise((resolve, reject) => { const url = `${OPENFAAS_GATEWAY_URL}/system/function/${functionName}`; axios .get(url, { auth: basicAuth }) .then((resp) => resolve(resp.data)) .catch((err) => reject(parseAxiosError(err))); }); +}; const getFunctionList = async () => new Promise((resolve, reject) => { diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index ac072c4599..5380197058 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -5,6 +5,7 @@ const { invokeFunction, checkFunctionHealth, updateFunction, + getFunctionList, } = require('./faasApi'); const logger = require('../../logger'); const { RetryRequestError, RespStatusError } = require('../utils'); @@ -12,6 +13,8 @@ const stats = require('../stats'); const { getMetadata, getTransformationMetadata } = require('../../v0/util'); const { HTTP_STATUS_CODES } = require('../../v0/util/constant'); +const MAX_RETRY_WAIT_MS = parseInt(process.env.MAX_RETRY_WAIT_MS || '22000'); +const MAX_INTERVAL_IN_RETRIES_MS = parseInt(process.env.MAX_INTERVAL_IN_RETRIES_MS || '250'); const FAAS_SCALE_TYPE = process.env.FAAS_SCALE_TYPE || 'capacity'; const FAAS_SCALE_TARGET = process.env.FAAS_SCALE_TARGET || '4'; const FAAS_SCALE_TARGET_PROPORTION = process.env.FAAS_SCALE_TARGET_PROPORTION || '0.70'; @@ -34,7 +37,6 @@ const FAAS_AST_FN_NAME = 'fn-ast'; const CUSTOM_NETWORK_POLICY_WORKSPACE_IDS = process.env.CUSTOM_NETWORK_POLICY_WORKSPACE_IDS || ''; const customNetworkPolicyWorkspaceIds = CUSTOM_NETWORK_POLICY_WORKSPACE_IDS.split(','); const CUSTOMER_TIER = process.env.CUSTOMER_TIER || 'shared'; -const DISABLE_RECONCILE_FN = process.env.DISABLE_RECONCILE_FN == 'true' || false; // Initialise node cache const functionListCache = new NodeCache(); @@ -64,6 +66,54 @@ const callWithRetry = async ( } }; +const getFunctionsForWorkspace = async (workspaceId) => { + logger.error(`Getting functions for workspace: ${workspaceId}`); + + const workspaceFns = []; + const upstreamFns = await getFunctionList(); + + for (const fn of upstreamFns) { + if (fn?.labels?.workspaceId === workspaceId) { + workspaceFns.push(fn); + } + } + return workspaceFns; +}; + +const reconcileFunction = async (workspaceId, fns, migrateAll = false) => { + logger.info(`Reconciling workspace: ${workspaceId} fns: ${fns} and migrateAll: ${migrateAll}`); + + try { + const workspaceFns = await getFunctionsForWorkspace(workspaceId); + // versionId and libraryVersionIds are used in the process + // to create the envProcess which will be copied from the original + // in next step + for (const workspaceFn of workspaceFns) { + // Only update the functions that are passed in the fns array + // given migrateAll is false + if (!migrateAll && !fns.includes(workspaceFn.name)) { + continue; + } + + const tags = { + workspaceId: workspaceFn['labels']['workspaceId'], + transformationId: workspaceFn['labels']['transformationId'], + }; + + const payload = buildOpenfaasFn(workspaceFn.name, null, '', [], false, tags); + payload['envProcess'] = workspaceFn['envProcess']; + + await updateFunction(workspaceFn.name, payload); + stats.increment('user_transform_reconcile_function', tags); + } + + logger.info(`Reconciliation finished`); + } catch (error) { + logger.error(`Error while reconciling function ${fnName}: ${error.message}`); + throw new RespStatusError(error.message, error.statusCode); + } +}; + const awaitFunctionReadiness = async ( functionName, maxWaitInMs = 22000, @@ -203,7 +253,7 @@ async function setupFaasFunction( ) { try { if (!testMode && isFunctionDeployed(functionName)) { - logger.debug(`[Faas] Function ${functionName} already deployed`); + logger.error(`[Faas] Function ${functionName} already deployed`); return; } // deploy faas function @@ -217,7 +267,7 @@ async function setupFaasFunction( ); // This api call is only used to check if function is spinned correctly - await awaitFunctionReadiness(functionName); + await awaitFunctionReadiness(functionName, MAX_RETRY_WAIT_MS, MAX_INTERVAL_IN_RETRIES_MS); setFunctionInCache(functionName); logger.debug(`[Faas] Finished deploying faas function ${functionName}`); @@ -227,28 +277,6 @@ async function setupFaasFunction( } } -// reconcileFn runs everytime the service boot's up -// trying to update the functions which are not in cache to the -// latest label and envVars -const reconcileFn = async (name, versionId, libraryVersionIDs, trMetadata) => { - if (DISABLE_RECONCILE_FN) { - return; - } - - logger.debug(`Reconciling faas function: ${name}`); - try { - if (isFunctionDeployed(name)) { - return; - } - await updateFaasFunction(name, null, versionId, libraryVersionIDs, false, trMetadata); - } catch (error) { - logger.error( - `unexpected error occurred when reconciling the function ${name}: ${error.message}`, - ); - throw error; - } -}; - // buildOpenfaasFn is helper function to build openfaas fn CRUD payload function buildOpenfaasFn(name, code, versionId, libraryVersionIDs, testMode, trMetadata = {}) { logger.debug(`Building faas fn: ${name}`); @@ -332,8 +360,6 @@ const executeFaasFunction = async ( try { if (testMode) { await awaitFunctionReadiness(name); - } else { - await reconcileFn(name, versionId, libraryVersionIDs, trMetadata); } return await invokeFunction(name, events); } catch (error) { @@ -392,4 +418,5 @@ module.exports = { FAAS_AST_VID, FAAS_AST_FN_NAME, setFunctionInCache, + reconcileFunction, }; diff --git a/src/util/prometheus.js b/src/util/prometheus.js index bda01dce04..0854835c98 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -971,6 +971,12 @@ class Prometheus { 'workspaceId', ], }, + { + name: 'user_transform_reconcile_function', + help: 'user_transform_reconcile_function', + type: 'counter', + labelNames: ['transformationId', 'workspaceId'], + }, ]; metrics.forEach((metric) => { diff --git a/test/__tests__/user_transformation.integration.test.js b/test/__tests__/user_transformation.integration.test.js index 6598b9fa0d..bf51590715 100644 --- a/test/__tests__/user_transformation.integration.test.js +++ b/test/__tests__/user_transformation.integration.test.js @@ -1,204 +1,285 @@ -const { when } = require("jest-when"); -jest.mock("node-fetch"); -const fetch = require("node-fetch", () => jest.fn()); +const { when } = require('jest-when'); +jest.mock('node-fetch'); +const fetch = require('node-fetch', () => jest.fn()); +const { v4: uuidv4 } = require('uuid'); const { userTransformHandler, - setupUserTransformHandler -} = require("../../src/util/customTransformer"); + setupUserTransformHandler, +} = require('../../src/util/customTransformer'); const { - generateFunctionName, setOpenFaasUserTransform -} = require("../../src/util/customTransformer-faas"); + generateFunctionName, + setOpenFaasUserTransform, +} = require('../../src/util/customTransformer-faas'); +const { deleteFunction, getFunctionList, getFunction } = require('../../src/util/openfaas/faasApi'); const { - deleteFunction, - getFunctionList, - getFunction -} = require("../../src/util/openfaas/faasApi"); -const { invalidateFnCache, awaitFunctionReadiness, FAAS_AST_FN_NAME, FAAS_AST_VID } = require("../../src/util/openfaas/index"); + invalidateFnCache, + awaitFunctionReadiness, + FAAS_AST_FN_NAME, + FAAS_AST_VID, +} = require('../../src/util/openfaas/index'); const { extractLibraries } = require('../../src/util/customTransformer'); -const { RetryRequestError } = require("../../src/util/utils"); +const { RetryRequestError } = require('../../src/util/utils'); -jest.setTimeout(25000); -jest.mock("axios", () => ({ - ...jest.requireActual("axios") +jest.setTimeout(30000); +jest.mock('axios', () => ({ + ...jest.requireActual('axios'), })); -const workspaceId = "workspaceId"; -const versionId = "versionId"; -const contructTrRevCode = (vid, language = 'pythonfaas') => { +const contructTrRevCode = (workspaceId, versionId, language = 'pythonfaas') => { return { - codeVersion: "1", - language: "pythonfaas", - testName: "pytest", - code: "def transformEvent(event, metadata):\n return event\n", + codeVersion: '1', + language, + testName: 'pytest', + code: 'def transformEvent(event, metadata):\n return event\n', workspaceId, - versionId: vid, - imports: [] + versionId, + imports: [], }; }; const faasCodeParsedForLibs = [ { - code: "import uuid\nimport requests\ndef transformEvent(event, metadata):\n return event\n", - language: "pythonfaas", + code: 'import uuid\nimport requests\ndef transformEvent(event, metadata):\n return event\n', + language: 'pythonfaas', response: { uuid: [], - requests: [] + requests: [], }, }, { - code: "from time import sleep\ndef transformBatch(events, metadata):\n return events\n", - language: "pythonfaas", + code: 'from time import sleep\ndef transformBatch(events, metadata):\n return events\n', + language: 'pythonfaas', response: { - time: [] + time: [], }, }, { - code: "import uuid\nimport requests\nimport time\ndef transformEvent(event, metadata):\n return event\n", - language: "python", + code: 'import uuid\nimport requests\nimport time\ndef transformEvent(event, metadata):\n return event\n', + language: 'python', response: { uuid: [], requests: [], - time: [] + time: [], }, }, -] +]; + +describe('Python Openfaas Transformation', () => { + beforeAll(async () => { + await setOpenFaasUserTransform( + { + language: 'pythonfaas', + versionId: FAAS_AST_VID, + }, + [], + FAAS_AST_FN_NAME, + ); + await awaitFunctionReadiness(FAAS_AST_FN_NAME); + }); -beforeAll(async () => { - (await setOpenFaasUserTransform( - { - language: "pythonfaas", - versionId: FAAS_AST_VID - }, - [], - FAAS_AST_FN_NAME - )); + afterAll(async () => { + const fnList = await getFunctionList(); + fnList.forEach(async (fn) => { + try { + await deleteFunction(fn.name); + } catch {} + }); + }); - await awaitFunctionReadiness(FAAS_AST_FN_NAME); -}); + describe('reconcile faas fns', () => { + const originalEnv = process.env; + let workspaceFns = []; + let workspaceId = uuidv4(); + + const setupWorkspaceFns = async (workspaceId, count = 1) => { + const fns = []; + for (let i = 0; i < count; i++) { + // here we are generating functions in testmode + const fn = await setOpenFaasUserTransform( + contructTrRevCode(workspaceId, uuidv4()), + [], + null, + true, + { + workspaceId, + }, + ); + fns.push(fn); + } + return fns; + }; -describe("Function Creation Tests", () => { - afterAll(async () => { - (await getFunctionList()).forEach(fn => { - if ((fn.name) !== FAAS_AST_FN_NAME) { - deleteFunction(fn.name).catch(() => {}); + beforeAll(async () => { + workspaceFns = await setupWorkspaceFns(workspaceId, 2); + expect(workspaceFns.length).toBe(2); + }); + + beforeEach(() => { + jest.resetModules(); + process.env = { ...originalEnv }; + }); + + afterAll(() => { + process.env = originalEnv; + }); + + const resetReconcile = () => { + delete require.cache[require.resolve('../../src/util/openfaas/index')]; + const { reconcileFunction } = require('../../src/util/openfaas/index'); + return reconcileFunction; + }; + + it('reconciles nothing if no function passed and migrateAll is false', async () => { + const originalMaxPods = process.env.FAAS_MAX_PODS_IN_TEXT || '40'; + // Update the max pods in text + process.env.FAAS_MAX_PODS_IN_TEXT = '200'; + + let reconcileFunction = resetReconcile(); + await reconcileFunction(workspaceId, [], false); + + for (const workspaceFn of workspaceFns) { + // No changes should be applied on the functions + const fn = await getFunction(workspaceFn.publishedVersion); + expect(fn.labels['com.openfaas.scale.max']).toBe(originalMaxPods); } }); - }); - const trRevCode = contructTrRevCode(versionId); - const funcName = generateFunctionName({ workspaceId, versionId }, [], false); + it('reconciles only the mentioned functions in workspace if migrateAll flag is false', async () => { + const originalMaxPods = process.env.FAAS_MAX_PODS_IN_TEXT || '40'; + process.env.FAAS_MAX_PODS_IN_TEXT = '200'; - const expectedData = { success: true, publishedVersion: funcName }; + let reconcileFunction = resetReconcile(); + await reconcileFunction(workspaceId, [workspaceFns[0].publishedVersion], false); - it("Setting up function - creates faas function", async () => { - const outputData = await setupUserTransformHandler([], trRevCode); + // Only fn_0 gets updated and fn_1 remains the same as per above reconciliation + const fn_0 = await getFunction(workspaceFns[0].publishedVersion); + expect(fn_0.labels['com.openfaas.scale.max']).toBe('200'); - expect(outputData).toEqual(expectedData); + const fn_1 = await getFunction(workspaceFns[1].publishedVersion); + expect(fn_1.labels['com.openfaas.scale.max']).toBe(originalMaxPods); + }); - const deployedFns = await getFunctionList(); - const fnNames = deployedFns.map(fn => fn.name); + it('reconciles all functions in workspace if migrateAll flag is true', async () => { + // Make changes in the env to update the max pods in text + process.env.FAAS_MAX_PODS_IN_TEXT = '400'; - expect(fnNames.sort()).toEqual([funcName, FAAS_AST_FN_NAME].sort()); + let reconcileFunction = resetReconcile(); + await reconcileFunction(workspaceId, [], true); + + for (const workspaceFn of workspaceFns) { + // No changes should be applied on the functions + const fn = await getFunction(workspaceFn.publishedVersion); + expect(fn.labels['com.openfaas.scale.max']).toBe('400'); + } + }); }); - it("Setting up already existing function - return from cache", async () => { - let fnCreatedAt; - - for(const fn of (await getFunctionList())) { - if (fn.name === FAAS_AST_FN_NAME) continue; + describe('setup transformation handler', () => { + const { workspaceId, versionId } = { workspaceId: uuidv4(), versionId: uuidv4() }; - fnCreatedAt = fn.createdAt; - break; - } + const trRevCode = contructTrRevCode(workspaceId, versionId); + const funcName = generateFunctionName({ workspaceId, versionId }, [], false); + const expectedData = { success: true, publishedVersion: funcName }; - const outputData = await setupUserTransformHandler([], trRevCode); + it('creates an new openfaas fn successfully if not already present', async () => { + const outputData = await setupUserTransformHandler([], trRevCode); + expect(outputData).toEqual(expectedData); - expect(outputData).toEqual(expectedData); + const deployedFns = await getFunctionList(); + const fnNames = deployedFns.map((fn) => fn.name); + expect(fnNames).toContain(funcName); + }); - const deployedFns = await getFunctionList(); - const fnNames = deployedFns.map(fn => fn.name); - let currentCreatedAt; - - for(const fn of deployedFns) { - if (fn.name === FAAS_AST_FN_NAME) continue; + it('returns openfaas fn from cache when creating an already created function', async () => { + let fnCreatedAt; - currentCreatedAt = fn.createdAt; - break; - } + for (const fn of await getFunctionList()) { + if (fn.name === funcName) { + fnCreatedAt = fn.createdAt; + break; + } + } - expect(fnNames.sort()).toEqual([funcName, FAAS_AST_FN_NAME].sort()); - expect(fnCreatedAt).toEqual(currentCreatedAt); - }); + const outputData = await setupUserTransformHandler([], trRevCode); + expect(outputData).toEqual(expectedData); - it("Setting up already existing function with cache clearing - return retry request error", async () => { - invalidateFnCache(); - await expect(async () => { - await setupUserTransformHandler([], trRevCode); - }).rejects.toThrow(RetryRequestError); - }); -}); + const deployedFns = await getFunctionList(); + const fnNames = deployedFns.map((fn) => fn.name); -describe("Function invocation & creation tests", () => { - afterAll(async () => { - (await getFunctionList()).forEach(fn => { - if ((fn.name) !== FAAS_AST_FN_NAME) { - deleteFunction(fn.name).catch(() => {}); + let currentCreatedAt; + for (const fn of deployedFns) { + if (fn.name === funcName) { + currentCreatedAt = fn.createdAt; + break; + } } + expect(fnNames).toContain(funcName); + expect(fnCreatedAt).toEqual(currentCreatedAt); + }); + + it('throws a RetryRequestError when creating an already created function and not in cache', async () => { + invalidateFnCache(); + await expect(async () => await setupUserTransformHandler([], trRevCode)).rejects.toThrow( + RetryRequestError, + ); }); }); - it("Function creation & invocation in test mode - Unmodified events returned", async () => { - const inputEvents = require(`./data/user_transformation_input.json`); - const outputEvents = require(`./data/user_transformation_pycode_test_output.json`); + describe('run transformation handler', () => { + const { workspaceId, versionId } = { workspaceId: uuidv4(), versionId: uuidv4() }; - let trRevCode = contructTrRevCode(versionId); + it('creates a new openfaas fn if not exists', async () => { + const inputEvents = require(`./data/user_transformation_input.json`); - let response = await userTransformHandler( - inputEvents, - versionId, - [], - trRevCode, - [], - true - ); - expect(response).toEqual(outputEvents); + const respBody = contructTrRevCode(workspaceId, versionId); + const funcName = generateFunctionName(respBody, [], false); - // Test with language python; should return same output - trRevCode = contructTrRevCode(versionId, 'python'); - response = await userTransformHandler(inputEvents, versionId, [], trRevCode, true); - expect(response).toEqual(outputEvents); - }); + const transformerUrl = `https://api.rudderlabs.com/transformation/getByVersionId?versionId=${respBody.versionId}`; + when(fetch) + .calledWith(transformerUrl) + .mockResolvedValue({ + status: 200, + json: jest.fn().mockResolvedValue(respBody), + }); - it("Function invocation & creation - Creates if not exists", async () => { - const inputEvents = require(`./data/user_transformation_input.json`); + await expect(async () => { + await userTransformHandler(inputEvents, respBody.versionId, []); + }).rejects.toThrow(RetryRequestError); - const respBody = contructTrRevCode("1234"); - const funcName = generateFunctionName(respBody, [], false); + // // If function is not found, it will be created + const deployedFn = await getFunction(funcName); + expect(deployedFn.name).toEqual(funcName); + }); - const transformerUrl = `https://api.rudderlabs.com/transformation/getByVersionId?versionId=${respBody.versionId}`; - when(fetch) - .calledWith(transformerUrl) - .mockResolvedValue({ - status: 200, - json: jest.fn().mockResolvedValue(respBody) - }); + it('executes the simple event return function and returns the events unmodified', async () => { + const inputEvents = require(`./data/user_transformation_input.json`); + const outputEvents = require(`./data/user_transformation_pycode_test_output.json`); - await expect(async () => { - await userTransformHandler(inputEvents, respBody.versionId, []); - }).rejects.toThrow(RetryRequestError); + let trRevCode = contructTrRevCode(workspaceId, versionId); + let response = await userTransformHandler(inputEvents, versionId, [], trRevCode, [], true); + expect(response).toEqual(outputEvents); - // If function is not found, it will be created - const deployedFn = await getFunction(funcName); - expect(deployedFn.name).toEqual(funcName); + // Test with language python; should return same output + trRevCode = contructTrRevCode(workspaceId, versionId, 'python'); + response = await userTransformHandler(inputEvents, versionId, [], trRevCode, true); + expect(response).toEqual(outputEvents); + }); }); -}); -describe("Auxiliary tests", () => { - it("Should be able to extract libraries from code", async () => { - for(const testObj of faasCodeParsedForLibs) { - const response = await extractLibraries(testObj.code, null, testObj.validateImports || false, [], testObj.language, true); - expect(response).toEqual(testObj.response); - } + describe('auxiliary tests', () => { + it('should be able to extract libraries from code', async () => { + for (const testObj of faasCodeParsedForLibs) { + const response = await extractLibraries( + testObj.code, + null, + testObj.validateImports || false, + [], + testObj.language, + true, + ); + expect(response).toEqual(testObj.response); + } + }); }); -}); \ No newline at end of file +}); diff --git a/test/__tests__/user_transformation.test.js b/test/__tests__/user_transformation.test.js index 33a9222f63..af3d84173a 100644 --- a/test/__tests__/user_transformation.test.js +++ b/test/__tests__/user_transformation.test.js @@ -8,7 +8,6 @@ jest.mock("axios", () => ({ get: jest.fn(), post: jest.fn(), delete: jest.fn(), - put: jest.fn() })); const { generateFunctionName } = require('../../src/util/customTransformer-faas.js'); @@ -1933,51 +1932,6 @@ describe("Python transformations", () => { }); - it("Simple transformation run with clean cache - reconciles fn with 200OK and then invokes faas function", async () => { - - const inputData = require(`./data/${integration}_input.json`); - const outputData = require(`./data/${integration}_output.json`); - - const versionId = randomID(); - const respBody = pyTrRevCode(versionId); - const funcName = pyfaasFuncName(respBody.workspaceId, versionId); - - - const transformerUrl = `https://api.rudderlabs.com/transformation/getByVersionId?versionId=${versionId}`; - when(fetch) - .calledWith(transformerUrl) - .mockResolvedValue({ - status: 200, - json: jest.fn().mockResolvedValue(respBody) - }); - - axios.put.mockResolvedValue({}); - axios.get.mockResolvedValue({}); // awaitFunctionReadiness() - axios.post.mockResolvedValue({ data: { transformedEvents: outputData } }); - - const output = await userTransformHandler(inputData, versionId, []); - expect(output).toEqual(outputData); - - - expect(axios.get).toHaveBeenCalledTimes(1); - expect(axios.get).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/function/${funcName}`, - {"headers": {"X-REQUEST-TYPE": "HEALTH-CHECK"}}, - { auth: defaultBasicAuth }, - ); - expect(axios.put).toHaveBeenCalledTimes(1); - expect(axios.put).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/system/functions`, - buildOpenfaasFn(funcName, null, versionId, [], false, {}), - { auth: defaultBasicAuth }); - expect(axios.post).toHaveBeenCalledTimes(1); - expect(axios.post).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/function/${funcName}`, - inputData, - { auth: defaultBasicAuth }, - ); - }); - describe("Simple transformation run with clean cache - function not found", () => { it('eventually sets up the function on 404 from update and then invokes it', async () => { @@ -1996,10 +1950,6 @@ describe("Python transformations", () => { }); - axios.put.mockRejectedValueOnce({ - response: { status: 404, data: `deployment not found`} - }); - axios.post .mockRejectedValueOnce({ response: { status: 404, data: `error finding function ${funcName}` } // invoke function not found @@ -2011,12 +1961,6 @@ describe("Python transformations", () => { await userTransformHandler(inputData, versionId, []); }).rejects.toThrow(RetryRequestError); - expect(axios.put).toHaveBeenCalledTimes(1); - expect(axios.put).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/system/functions`, - buildOpenfaasFn(funcName, null, versionId, [], false, {}), - { auth: defaultBasicAuth }, - ); expect(axios.post).toHaveBeenCalledTimes(2); expect(axios.post).toHaveBeenCalledWith( `${OPENFAAS_GATEWAY_URL}/function/${funcName}`, @@ -2037,84 +1981,9 @@ describe("Python transformations", () => { ); }); - it('sets up the function on 202 from update and then invokes it', async() => { - const inputData = require(`./data/${integration}_input.json`); - const outputData = require(`./data/${integration}_output.json`); - - const versionId = randomID(); - const respBody = pyTrRevCode(versionId); - const funcName = pyfaasFuncName(respBody.workspaceId, respBody.versionId); - - const transformerUrl = `https://api.rudderlabs.com/transformation/getByVersionId?versionId=${versionId}`; - when(fetch) - .calledWith(transformerUrl) - .mockResolvedValue({ - status: 200, - json: jest.fn().mockResolvedValue(respBody) - }); - - - axios.put.mockResolvedValueOnce({ - response: { status: 202, data: `deployment created`} - }); - axios.get.mockResolvedValue({}); // awaitFunctionReadiness() - axios.post.mockResolvedValue({ data: { transformedEvents: outputData } }); - - const output = await userTransformHandler(inputData, versionId, []); - expect(output).toEqual(outputData); - - expect(axios.put).toHaveBeenCalledTimes(1); - expect(axios.put).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/system/functions`, - buildOpenfaasFn(funcName, null, versionId, [], false, {}), - { auth: defaultBasicAuth }, - ); - expect(axios.post).toHaveBeenCalledTimes(1); - expect(axios.post).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/function/${funcName}`, - inputData, - { auth: defaultBasicAuth }, - ); - expect(axios.get).toHaveBeenCalledTimes(1); - expect(axios.get).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/function/${funcName}`, - {"headers": {"X-REQUEST-TYPE": "HEALTH-CHECK"}}, - { auth: defaultBasicAuth }, - ); - }); - - it('throws from the userTransform handler when reconciles errors with anything other than 404', async() => { - const inputData = require(`./data/${integration}_input.json`); - const outputData = require(`./data/${integration}_output.json`); - - const versionId = randomID(); - const respBody = pyTrRevCode(versionId); - const funcName = pyfaasFuncName(respBody.workspaceId, respBody.versionId); - - const transformerUrl = `https://api.rudderlabs.com/transformation/getByVersionId?versionId=${versionId}`; - when(fetch) - .calledWith(transformerUrl) - .mockResolvedValue({ - status: 200, - json: jest.fn().mockResolvedValue(respBody) - }); - - - axios.put.mockRejectedValueOnce({response: {status: 400, data: 'bad request'}}); - await expect(async () => { - await userTransformHandler(inputData, versionId, []); - }).rejects.toThrow(RespStatusError); - - expect(axios.put).toHaveBeenCalledTimes(1); - expect(axios.put).toHaveBeenCalledWith( - `${OPENFAAS_GATEWAY_URL}/system/functions`, - buildOpenfaasFn(funcName, null, versionId, [], false, {}), - { auth: defaultBasicAuth }, - ); - }); - }); + it("Simple transformation run - error requests", async () => { const inputData = require(`./data/${integration}_input.json`); @@ -2165,5 +2034,7 @@ describe("Python transformations", () => { await expect(async () => { await userTransformHandler(inputData, versionId, []); }).rejects.toThrow(RespStatusError); + }); + }); From 9b829315ae5138ed56328fbf740b0f5bcf4f4e21 Mon Sep 17 00:00:00 2001 From: Jayachand Date: Wed, 10 Jul 2024 12:59:44 +0530 Subject: [PATCH 044/201] chore: cache dns resolution in node (#3495) * chore: cache dns resolution in node --- src/util/prometheus.js | 2 +- src/util/utils.js | 48 ++++++++++++++----- .../user_transformation_fetch.test.js | 12 ++--- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/util/prometheus.js b/src/util/prometheus.js index 0854835c98..0b1f3b34bf 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -892,7 +892,7 @@ class Prometheus { name: 'fetch_dns_resolve_time', help: 'fetch_dns_resolve_time', type: 'histogram', - labelNames: ['identifier', 'transformationId', 'workspaceId', 'error'], + labelNames: ['identifier', 'transformationId', 'workspaceId', 'error', 'cacheHit'], }, { name: 'geo_call_duration', diff --git a/src/util/utils.js b/src/util/utils.js index eb5a011444..82c85b41a5 100644 --- a/src/util/utils.js +++ b/src/util/utils.js @@ -5,6 +5,7 @@ const { Resolver } = require('dns').promises; const fetch = require('node-fetch'); const util = require('util'); +const NodeCache = require('node-cache'); const logger = require('../logger'); const stats = require('./stats'); @@ -15,12 +16,41 @@ const BLOCK_HOST_NAMES_LIST = BLOCK_HOST_NAMES.split(','); const LOCAL_HOST_NAMES_LIST = ['localhost', '127.0.0.1', '[::]', '[::1]']; const LOCALHOST_OCTET = '127.'; const RECORD_TYPE_A = 4; // ipv4 +const DNS_CACHE_ENABLED = process.env.DNS_CACHE_ENABLED === 'true'; +const DNS_CACHE_TTL = process.env.DNS_CACHE_TTL ? parseInt(process.env.DNS_CACHE_TTL, 10) : 300; +const dnsCache = new NodeCache({ + useClones: false, + stdTTL: DNS_CACHE_TTL, + checkperiod: DNS_CACHE_TTL, +}); + +const resolveHostName = async (hostname) => { + // ex: [{ address: '108.157.0.0', ttl: 600 }] + const addresses = await resolver.resolve4(hostname, { ttl: true }); + return addresses.length > 0 ? addresses[0] : {}; +}; + +const fetchAddressFromHostName = async (hostname) => { + if (!DNS_CACHE_ENABLED) { + const { address } = await resolveHostName(hostname); + return { address, cacheHit: false }; + } + const cachedAddress = dnsCache.get(hostname); + if (cachedAddress !== undefined) { + return { address: cachedAddress, cacheHit: true }; + } + const { address, ttl } = await resolveHostName(hostname); + dnsCache.set(hostname, address, Math.min(ttl, DNS_CACHE_TTL)); + return { address, cacheHit: false }; +}; const staticLookup = (transformationTags) => async (hostname, _, cb) => { - let ips; + let ip; const resolveStartTime = new Date(); try { - ips = await resolver.resolve4(hostname); + const { address, cacheHit } = await fetchAddressFromHostName(hostname); + ip = address; + stats.timing('fetch_dns_resolve_time', resolveStartTime, { ...transformationTags, cacheHit }); } catch (error) { logger.error(`DNS Error Code: ${error.code} | Message : ${error.message}`); stats.timing('fetch_dns_resolve_time', resolveStartTime, { @@ -30,22 +60,18 @@ const staticLookup = (transformationTags) => async (hostname, _, cb) => { cb(null, `unable to resolve IP address for ${hostname}`, RECORD_TYPE_A); return; } - stats.timing('fetch_dns_resolve_time', resolveStartTime, transformationTags); - if (ips.length === 0) { + if (!ip) { cb(null, `resolved empty list of IP address for ${hostname}`, RECORD_TYPE_A); return; } - // eslint-disable-next-line no-restricted-syntax - for (const ip of ips) { - if (ip.startsWith(LOCALHOST_OCTET)) { - cb(null, `cannot use ${ip} as IP address`, RECORD_TYPE_A); - return; - } + if (ip.startsWith(LOCALHOST_OCTET)) { + cb(null, `cannot use ${ip} as IP address`, RECORD_TYPE_A); + return; } - cb(null, ips[0], RECORD_TYPE_A); + cb(null, ip, RECORD_TYPE_A); }; const httpAgentWithDnsLookup = (scheme, transformationTags) => { diff --git a/test/__tests__/user_transformation_fetch.test.js b/test/__tests__/user_transformation_fetch.test.js index e37b42ea1e..3f0b060689 100644 --- a/test/__tests__/user_transformation_fetch.test.js +++ b/test/__tests__/user_transformation_fetch.test.js @@ -91,11 +91,11 @@ describe("User transformation fetch tests", () => { }; const errMsg = "ERROR"; - mockResolver.mockResolvedValue([ '127.0.0.1' ]); + mockResolver.mockResolvedValue([{ address: '127.0.0.1', ttl: 300 } ]); const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); expect(mockResolver).toHaveBeenCalledTimes(inputData.length); - expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com'); + expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com', { ttl: true }); output.transformedEvents.forEach(ev => { expect(ev.errMsg).toEqual(errMsg); }); @@ -155,7 +155,7 @@ describe("User transformation fetch tests", () => { const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); expect(mockResolver).toHaveBeenCalledTimes(inputData.length); - expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com'); + expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com', { ttl: true }); output.transformedEvents.forEach(ev => { expect(ev.errMsg).toEqual(errMsg); }); @@ -253,7 +253,7 @@ describe("User transformation fetch tests", () => { const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); expect(mockResolver).toHaveBeenCalledTimes(inputData.length); - expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com'); + expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com', { ttl: true }); output.transformedEvents.forEach(ev => { expect(ev.errMsg).toEqual(errMsg); }); @@ -307,11 +307,11 @@ describe("User transformation fetch tests", () => { }; const errMsg = "request to https://abc.xyz.com/dummyUrl failed, reason: Invalid IP address: cannot use 127.0.0.1 as IP address"; - mockResolver.mockResolvedValue(['3.122.122.122', '127.0.0.1']); + mockResolver.mockResolvedValue([{ address: '127.0.0.1', ttl: 100 }, { address: '3.122.122.122', ttl: 600 }]); const output = await userTransformHandler(inputData, versionId, [], trRevCode, true); expect(mockResolver).toHaveBeenCalledTimes(inputData.length); - expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com'); + expect(mockResolver).toHaveBeenCalledWith('abc.xyz.com', { ttl: true }); output.transformedEvents.forEach(ev => { expect(ev.errMsg).toEqual(errMsg); }); From 1a5fb2b9869b8f63d3ac9f24e0b4cd982fbef266 Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Wed, 10 Jul 2024 13:25:03 +0530 Subject: [PATCH 045/201] chore: add data management team access to routes controllers and services (#3546) * chore: add data management team access to routes controllers and services * chore: only request for ownership on specific files in services routes and controllers --- CODEOWNERS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 8f65013e62..274166f613 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -6,4 +6,6 @@ cdk/ @rudderlabs/integrations src/features.json @rudderlabs/integrations constants/ @rudderlabs/integrations warehouse/ @rudderlabs/warehouse -src/util/ @rudderlabs/integrations @rudderlabs/data-management \ No newline at end of file +src/util/ @rudderlabs/integrations @rudderlabs/data-management +*/trackingPlan.ts @rudderlabs/data-management +*/userTransform.ts @rudderlabs/data-management From 2eb92e3332ef0e8b2f83621fe0130fbc1356fa91 Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Wed, 10 Jul 2024 13:45:31 +0530 Subject: [PATCH 046/201] fix: adding readiness probe annotations for openfaas (#3529) * fix: adding readiness probe annotations for openfaas * fix: update the values of initial delay and failure threshold --- src/util/openfaas/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index 5380197058..b5021cf715 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -30,6 +30,14 @@ const FAAS_LIMITS_MEMORY = process.env.FAAS_LIMITS_MEMORY || FAAS_REQUESTS_MEMOR const FAAS_MAX_INFLIGHT = process.env.FAAS_MAX_INFLIGHT || '4'; const FAAS_EXEC_TIMEOUT = process.env.FAAS_EXEC_TIMEOUT || '4s'; const FAAS_ENABLE_WATCHDOG_ENV_VARS = process.env.FAAS_ENABLE_WATCHDOG_ENV_VARS || 'true'; +const FAAS_READINESS_HTTP_PATH = process.env.FAAS_READINESS_HTTP_PATH || '/ready'; +const FAAS_READINESS_HTTP_INITIAL_DELAY_S = process.env.FAAS_READINESS_HTTP_INITIAL_DELAY_S || '2'; +const FAAS_READINESS_HTTP_PERIOD_S = process.env.FAAS_READINESS_HTTP_PERIOD_S || '2'; +const FAAS_READINESS_HTTP_FAILURE_THRESHOLD = + process.env.FAAS_READINESS_HTTP_FAILURE_THRESHOLD || '5'; +const FAAS_READINESS_HTTP_SUCCESS_THRESHOLD = + process.env.FAAS_READINESS_HTTP_SUCCESS_THRESHOLD || '1'; + const CONFIG_BACKEND_URL = process.env.CONFIG_BACKEND_URL || 'https://api.rudderlabs.com'; const GEOLOCATION_URL = process.env.GEOLOCATION_URL || ''; const FAAS_AST_VID = 'ast'; @@ -332,6 +340,11 @@ function buildOpenfaasFn(name, code, versionId, libraryVersionIDs, testMode, trM labels, annotations: { 'prometheus.io.scrape': 'true', + 'com.openfaas.ready.http.path': FAAS_READINESS_HTTP_PATH, + 'com.openfaas.ready.http.initialDelaySeconds': FAAS_READINESS_HTTP_INITIAL_DELAY_S, + 'com.openfaas.ready.http.periodSeconds': FAAS_READINESS_HTTP_PERIOD_S, + 'com.openfaas.ready.http.successThreshold': FAAS_READINESS_HTTP_SUCCESS_THRESHOLD, + 'com.openfaas.ready.http.failureThreshold': FAAS_READINESS_HTTP_FAILURE_THRESHOLD, }, limits: { memory: FAAS_LIMITS_MEMORY, From bc7b886fd314f35b5b5573989d8f094b7ba0321f Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Wed, 10 Jul 2024 15:42:07 +0530 Subject: [PATCH 047/201] fix: ga4 v2 userproperties (#3544) --- src/v0/destinations/ga4/utils.js | 24 ++++++++----------- .../ga4_v2/customMappingsHandler.js | 6 +++++ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/v0/destinations/ga4/utils.js b/src/v0/destinations/ga4/utils.js index 77f78fbfdb..18994efd7f 100644 --- a/src/v0/destinations/ga4/utils.js +++ b/src/v0/destinations/ga4/utils.js @@ -554,21 +554,17 @@ const buildDeliverablePayload = (payload, Config) => { return response; }; -const sanitizeUserProperties = (userProperties) => { - Object.keys(userProperties).forEach((key) => { - const propetyValue = userProperties[key]; - if ( - typeof propetyValue === 'string' || - typeof propetyValue === 'number' || - typeof propetyValue === 'boolean' - ) { - delete userProperties[key]; - userProperties[key] = { - value: propetyValue, - }; +function sanitizeUserProperties(userPropertiesObj) { + const sanitizedObj = {}; + // eslint-disable-next-line no-restricted-syntax, guard-for-in + for (const key in userPropertiesObj) { + const { value } = userPropertiesObj[key]; + if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') { + sanitizedObj[key] = { value }; } - }); -}; + } + return sanitizedObj; +} const basicConfigvalidaiton = (Config) => { if (!Config.typesOfClient) { diff --git a/src/v0/destinations/ga4_v2/customMappingsHandler.js b/src/v0/destinations/ga4_v2/customMappingsHandler.js index 1eb1c2c868..0f20788076 100644 --- a/src/v0/destinations/ga4_v2/customMappingsHandler.js +++ b/src/v0/destinations/ga4_v2/customMappingsHandler.js @@ -12,6 +12,7 @@ const { buildDeliverablePayload, GA4_PARAMETERS_EXCLUSION, prepareUserProperties, + sanitizeUserProperties, } = require('../ga4/utils'); const { InstrumentationError } = require('@rudderstack/integrations-lib'); const { @@ -158,6 +159,11 @@ const boilerplateOperations = (ga4Payload, message, Config, eventName) => { if (!isEmptyObject(consents)) { ga4Payload.consent = consents; } + + // Prepare GA4 user properties + if (isDefinedAndNotNull(ga4Payload.user_properties)) { + ga4Payload.user_properties = sanitizeUserProperties(ga4Payload.user_properties); + } }; module.exports = { From 0ca08c3fe8e4d53f92ce16eccd1f60224e1f1409 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:23:02 +0530 Subject: [PATCH 048/201] fix: tiktok: remove default value for content type for all events (#3545) fix: remove default value for content type for all events --- src/v0/destinations/tiktok_ads/config.js | 4 +++ src/v0/destinations/tiktok_ads/transformV2.js | 25 ++++++++++++++++--- .../destinations/tiktok_ads/processor/data.ts | 7 ------ .../destinations/tiktok_ads/router/data.ts | 2 -- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/v0/destinations/tiktok_ads/config.js b/src/v0/destinations/tiktok_ads/config.js index 61009d4c31..e3a49755e5 100644 --- a/src/v0/destinations/tiktok_ads/config.js +++ b/src/v0/destinations/tiktok_ads/config.js @@ -39,6 +39,9 @@ const mappingConfig = getMappingConfig(ConfigCategory, __dirname); // tiktok docs for max batch size for events 2.0: https://business-api.tiktok.com/portal/docs?id=1771100779668482 const maxBatchSizeV2 = 1000; const trackEndpointV2 = 'https://business-api.tiktok.com/open_api/v1.3/event/track/'; +// Following is the list of standard events for which some parameters are recommended +// Ref: https://business-api.tiktok.com/portal/docs?id=1771101186666498 +const eventsWithRecommendedParams = ['AddToCart', 'CompletePayment', 'PlaceAnOrder', 'ViewContent']; module.exports = { TRACK_ENDPOINT, BATCH_ENDPOINT, @@ -50,4 +53,5 @@ module.exports = { DESTINATION: 'TIKTOK_ADS', trackEndpointV2, maxBatchSizeV2, + eventsWithRecommendedParams, }; diff --git a/src/v0/destinations/tiktok_ads/transformV2.js b/src/v0/destinations/tiktok_ads/transformV2.js index 8760dee52c..73fcc1be31 100644 --- a/src/v0/destinations/tiktok_ads/transformV2.js +++ b/src/v0/destinations/tiktok_ads/transformV2.js @@ -19,7 +19,13 @@ const { const { getContents, hashUserField } = require('./util'); const config = require('./config'); -const { trackMappingV2, trackEndpointV2, eventNameMapping, PARTNER_NAME } = config; +const { + trackMappingV2, + trackEndpointV2, + eventNameMapping, + PARTNER_NAME, + eventsWithRecommendedParams, +} = config; const { JSON_MIME_TYPE } = require('../../util/constant'); /** @@ -94,7 +100,14 @@ const trackResponseBuilder = async (message, { Config }) => { Object.keys(standardEventsMap).forEach((key) => { if (key === event) { standardEventsMap[event].forEach((eventName) => { - responseList.push(getTrackResponsePayload(message, Config, eventName)); + responseList.push( + getTrackResponsePayload( + message, + Config, + eventName, + eventsWithRecommendedParams.includes(eventName), + ), + ); }); } }); @@ -105,11 +118,15 @@ const trackResponseBuilder = async (message, { Config }) => { Doc https://ads.tiktok.com/help/article/standard-events-parameters?lang=en */ event = message.event; - responseList.push(getTrackResponsePayload(message, Config, event, false)); + responseList.push( + getTrackResponsePayload(message, Config, event, eventsWithRecommendedParams.includes(event)), + ); } else { // incoming event name is already a standard event name event = eventNameMapping[event]; - responseList.push(getTrackResponsePayload(message, Config, event)); + responseList.push( + getTrackResponsePayload(message, Config, event, eventsWithRecommendedParams.includes(event)), + ); } // set event source and event_source_id response.body.JSON = { diff --git a/test/integrations/destinations/tiktok_ads/processor/data.ts b/test/integrations/destinations/tiktok_ads/processor/data.ts index 4dfd32d671..f459e68681 100644 --- a/test/integrations/destinations/tiktok_ads/processor/data.ts +++ b/test/integrations/destinations/tiktok_ads/processor/data.ts @@ -5385,7 +5385,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -5550,7 +5549,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -5586,7 +5584,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -5745,7 +5742,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -5784,7 +5780,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -6627,7 +6622,6 @@ export const data = [ event_id: '1616318632825_357', event_time: 1600372167, properties: { - content_type: 'product', contents: [ { price: 8, @@ -7048,7 +7042,6 @@ export const data = [ event: 'Search', event_id: '84e26acc-56a5-4835-8233-591137fca468', event_time: 1600372167, - properties: { content_type: 'product' }, user: { locale: 'en-US', email: 'dd6ff77f54e2106661089bae4d40cdb600979bf7edc9eb65c0942ba55c7c2d7f', diff --git a/test/integrations/destinations/tiktok_ads/router/data.ts b/test/integrations/destinations/tiktok_ads/router/data.ts index 7246b8c04a..eaf5049433 100644 --- a/test/integrations/destinations/tiktok_ads/router/data.ts +++ b/test/integrations/destinations/tiktok_ads/router/data.ts @@ -976,7 +976,6 @@ export const data = [ content_id: '1197218', }, ], - content_type: 'product', currency: 'USD', value: 46, }, @@ -2294,7 +2293,6 @@ export const data = [ content_id: '1197218', }, ], - content_type: 'product', currency: 'USD', value: 46, }, From 2efac8099edf694fcd10bc3bc05fe425771eed53 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 10 Jul 2024 10:56:54 +0000 Subject: [PATCH 049/201] chore(release): 1.71.1 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8cf849682..81a51f28a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.71.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.0...v1.71.1) (2024-07-10) + + +### Bug Fixes + +* ga4 v2 userproperties ([#3544](https://github.com/rudderlabs/rudder-transformer/issues/3544)) ([bc7b886](https://github.com/rudderlabs/rudder-transformer/commit/bc7b886fd314f35b5b5573989d8f094b7ba0321f)) +* tiktok: remove default value for content type for all events ([#3545](https://github.com/rudderlabs/rudder-transformer/issues/3545)) ([0ca08c3](https://github.com/rudderlabs/rudder-transformer/commit/0ca08c3fe8e4d53f92ce16eccd1f60224e1f1409)) + ## [1.71.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.70.1...v1.71.0) (2024-07-08) diff --git a/package-lock.json b/package-lock.json index e1f87612cd..268141d2cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.71.0", + "version": "1.71.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.71.0", + "version": "1.71.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 63ad671902..e7710d74af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.71.0", + "version": "1.71.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From b7ab0d25dbac9c45e7262a506ff0ea3aa9fe03c9 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Thu, 11 Jul 2024 19:52:22 +0530 Subject: [PATCH 050/201] fix: update authErrorCategory for 2 step verification issue for google ads --- .../networkHandler.js | 7 +- .../networkHandler.js | 10 +-- .../networkHandler.js | 5 +- src/v0/util/googleUtils/index.js | 26 ++++++- .../dataDelivery/oauth.ts | 72 +++++++++++++++++++ .../network.ts | 51 +++++++++++++ 6 files changed, 160 insertions(+), 11 deletions(-) diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index 21a5fff78b..d91c79e186 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -3,7 +3,7 @@ const sha256 = require('sha256'); const { NetworkError, NetworkInstrumentationError } = require('@rudderstack/integrations-lib'); const SqlString = require('sqlstring'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); +const { isHttpStatusSuccess } = require('../../util/index'); const { CONVERSION_ACTION_ID_CACHE_TTL } = require('./config'); const Cache = require('../../util/cache'); @@ -16,6 +16,7 @@ const { const { BASE_ENDPOINT } = require('./config'); const tags = require('../../util/tags'); +const { getAuthErrCategory } = require('../../util/googleUtils'); const ERROR_MSG_PATH = 'response[0].error.message'; @@ -69,7 +70,7 @@ const getConversionActionId = async ({ method, headers, params, metadata }) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(gaecConversionActionIdResponse), ); } const conversionActionId = get( @@ -153,7 +154,7 @@ const responseHandler = (responseParams) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(destinationResponse), ); }; diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index 8c86fc9bc0..f260abeca5 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -11,7 +11,6 @@ const { isHttpStatusSuccess, getHashFromArray, isDefinedAndNotNullAndNotEmpty, - getAuthErrCategoryFromStCode, } = require('../../util'); const { getConversionActionId } = require('./utils'); const Cache = require('../../util/cache'); @@ -21,6 +20,7 @@ const { getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); +const { getAuthErrCategory } = require('../../util/googleUtils'); const conversionCustomVariableCache = new Cache(CONVERSION_CUSTOM_VARIABLE_CACHE_TTL); @@ -46,7 +46,7 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, status, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(createJobResponse), ); } return response.resourceName.split('/')[3]; @@ -74,7 +74,7 @@ const addConversionToJob = async ({ endpoint, headers, jobId, payload, metadata `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Add Conversion`, status, response, - getAuthErrCategoryFromStCode(get(addConversionToJobResponse, 'status')), + getAuthErrCategory(addConversionToJobResponse), ); } return true; @@ -135,7 +135,7 @@ const getConversionCustomVariable = async ({ headers, params, metadata }) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response || searchStreamResponse, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(searchStreamResponse), ); } const conversionCustomVariable = get(searchStreamResponse, 'response.0.results'); @@ -318,7 +318,7 @@ const responseHandler = (responseParams) => { `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_conversions response transformation`, status, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(destinationResponse), ); }; diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 4c9a9156e8..1247eae0b1 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,12 +1,13 @@ const { NetworkError } = require('@rudderstack/integrations-lib'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); -const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../util/index'); +const { isHttpStatusSuccess } = require('../../util/index'); const { processAxiosResponse, getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); +const { getAuthErrCategory } = require('../../util/googleUtils'); /** * This function helps to create a offlineUserDataJobs * @param endpoint @@ -158,7 +159,7 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategoryFromStCode(status), + getAuthErrCategory(status), ); }; diff --git a/src/v0/util/googleUtils/index.js b/src/v0/util/googleUtils/index.js index ef7c244c17..183f327fa4 100644 --- a/src/v0/util/googleUtils/index.js +++ b/src/v0/util/googleUtils/index.js @@ -3,7 +3,11 @@ const GA4_ALLOWED_CONSENT_STATUS = ['GRANTED', 'DENIED']; const UNSPECIFIED_CONSENT = 'UNSPECIFIED'; const UNKNOWN_CONSENT = 'UNKNOWN'; - +const get = require('get-value'); +const { + AUTH_STATUS_INACTIVE, + REFRESH_TOKEN, +} = require('../../../adapters/networkhandler/authConstants'); /** * Populates the consent object based on the provided configuration and consent mapping. * @@ -108,6 +112,25 @@ const finaliseAnalyticsConsents = (consentConfigMap, eventLevelConsent = {}) => return consentObj; }; +const getAuthErrCategory = ({ response, status }) => { + if (status === 401) { + const authenticationError = get( + response, + 'error.details.0.errors.0.errorCode.authenticationError', + ); + if (authenticationError === 'TWO_STEP_VERIFICATION_NOT_ENROLLED') { + // https://developers.google.com/google-ads/api/docs/oauth/2sv + return AUTH_STATUS_INACTIVE; + } + return REFRESH_TOKEN; + } + if (status === 403) { + // ACCESS_DENIED + return AUTH_STATUS_INACTIVE; + } + return ''; +}; + module.exports = { populateConsentFromConfig, UNSPECIFIED_CONSENT, @@ -115,4 +138,5 @@ module.exports = { GOOGLE_ALLOWED_CONSENT_STATUS, finaliseConsent, finaliseAnalyticsConsents, + getAuthErrCategory, }; diff --git a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts index e14e4109f0..73fd7c961d 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts @@ -260,4 +260,76 @@ export const v1oauthScenarios = [ }, }, }, + { + id: 'gaoc_v1_oauth_scenario_3', + name: 'google_adwords_offline_conversions', + description: + "[Proxy v1 API] :: Oauth when the user doesn't enabled 2 factor authentication but the google ads account has it enabled", + successCriteria: 'The proxy should return 401 with authErrorCategory as AUTH_STATUS_INACTIVE', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + ...commonRequestParameters, + headers: { + Authorization: 'Bearer invalidabcd1234', + 'Content-Type': 'application/json', + 'developer-token': 'ijkl91011', + 'login-customer-id': 'logincustomerid', + }, + endpoint: + 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + }, + metadataArray, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'AUTH_STATUS_INACTIVE', + message: + '[Google Ads Offline Conversions]:: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during google_ads_offline_store_conversions Job Creation', + response: [ + { + error: + '[Google Ads Offline Conversions]:: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during google_ads_offline_store_conversions Job Creation', + metadata: { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 1, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + statusCode: 401, + }, + ], + statTags: { + destType: 'GOOGLE_ADWORDS_OFFLINE_CONVERSIONS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', + }, + status: 401, + }, + }, + }, + }, + }, ]; diff --git a/test/integrations/destinations/google_adwords_offline_conversions/network.ts b/test/integrations/destinations/google_adwords_offline_conversions/network.ts index 4dad9e0d1b..49f89cec28 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/network.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/network.ts @@ -645,4 +645,55 @@ export const networkCallsData = [ }, }, }, + { + description: + 'Mock response from destination depicting a request with invalid authentication credentials', + httpReq: { + url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', + data: { + job: { + storeSalesMetadata: { + custom_key: 'CUSTOM_KEY', + loyaltyFraction: 1, + transaction_upload_fraction: '1', + }, + type: 'STORE_SALES_UPLOAD_FIRST_PARTY', + }, + }, + params: { destination: 'google_adwords_offline_conversion' }, + headers: { + Authorization: 'Bearer invalidabcd1234', + 'Content-Type': 'application/json', + 'developer-token': 'ijkl91011', + 'login-customer-id': 'logincustomerid', + }, + method: 'POST', + }, + httpRes: { + status: 401, + data: { + error: { + code: 401, + details: [ + { + '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', + errors: [ + { + errorCode: { + authenticationError: 'TWO_STEP_VERIFICATION_NOT_ENROLLED', + }, + message: + "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.", + }, + ], + requestId: 'wy4ZYbsjWcgh6uC2Ruc_Zg', + }, + ], + message: + 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', + status: 'UNAUTHENTICATED', + }, + }, + }, + }, ]; From 7d8769f8cd34c35cf97c43d93c56a8cef683372b Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Mon, 15 Jul 2024 10:38:28 +0530 Subject: [PATCH 051/201] chore: upgrade packages --- package-lock.json | 18 +++++++++--------- package.json | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 268141d2cd..d1c11d7014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.17.0", - "@rudderstack/workflow-engine": "^0.8.11", + "@rudderstack/json-template-engine": "^0.17.1", + "@rudderstack/workflow-engine": "^0.8.12", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -4526,17 +4526,17 @@ } }, "node_modules/@rudderstack/json-template-engine": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.0.tgz", - "integrity": "sha512-+M09/mqltvL9fkE7kT1ibH5lIf2Nh63ERoQ8+PpUleYR2QD0fW8HGmvRFicqfOmlWH8afAVvH/KzHjf0p2GGLw==" + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", + "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" }, "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.11.tgz", - "integrity": "sha512-45y5tBC64zKuppaL6dUhHOnoKyadE22xMnELuE9Hz2qZPiyKlQBeMWpjxQLDXQ2S/Q8zx+J+n1L07zUZyg2rCA==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.12.tgz", + "integrity": "sha512-OgnJCWHcOQn6qQZEkCFsgacu+zOYp2OlzidWYmU+pUi8br9ukunoGRcqb0OJhJJI5imh7myhyrHdY3DKZWG12w==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.17.0", + "@rudderstack/json-template-engine": "^0.17.1", "jsonata": "^2.0.5", "lodash": "^4.17.21", "object-sizeof": "^2.6.4", diff --git a/package.json b/package.json index e7710d74af..c399ad9564 100644 --- a/package.json +++ b/package.json @@ -65,8 +65,8 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.17.0", - "@rudderstack/workflow-engine": "^0.8.11", + "@rudderstack/json-template-engine": "^0.17.1", + "@rudderstack/workflow-engine": "^0.8.12", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -187,4 +187,4 @@ "defaultType": "feat" } } -} +} \ No newline at end of file From 5fd425b5ab1640b6a10d607640034dd576bf27fe Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Mon, 15 Jul 2024 11:04:27 +0530 Subject: [PATCH 052/201] chore: fix formating --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c399ad9564..173da6baee 100644 --- a/package.json +++ b/package.json @@ -187,4 +187,4 @@ "defaultType": "feat" } } -} \ No newline at end of file +} From 53710f91a94a631861512093a46acf97534eb607 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 15:33:30 +0530 Subject: [PATCH 053/201] fix: add user-agent header in api calls --- src/cdk/v2/destinations/intercom/utils.js | 1 + src/v0/destinations/intercom/networkHandler.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 7e609d5c96..1760631683 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -78,6 +78,7 @@ const getHeaders = (destination, apiVersion) => ({ Authorization: `Bearer ${destination.Config.apiKey}`, Accept: JSON_MIME_TYPE, 'Intercom-Version': apiVersion === 'v1' ? '1.4' : '2.10', + 'User-Agent': process.env.INTERCOM_USER_AGENT_HEADER ?? 'RudderStack', }); /** diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js index 8485dac52e..76ba2c81b1 100644 --- a/src/v0/destinations/intercom/networkHandler.js +++ b/src/v0/destinations/intercom/networkHandler.js @@ -23,12 +23,18 @@ const destResponseHandler = (responseParams) => { }; }; +const prepareIntercomProxyRequest = (request) => { + const preparedRequest = prepareProxyRequest(request); + preparedRequest.headers['User-Agent'] = process.env.INTERCOM_USER_AGENT_HEADER ?? 'RudderStack'; + return preparedRequest; +}; + // eslint-disable-next-line @typescript-eslint/naming-convention class networkHandler { constructor() { this.responseHandler = destResponseHandler; this.proxy = proxyRequest; - this.prepareProxy = prepareProxyRequest; + this.prepareProxy = prepareIntercomProxyRequest; this.processAxiosResponse = processAxiosResponse; } } From 12135f336b9387e989bc87ffdff62ce24a5069b0 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 15 Jul 2024 10:06:33 +0000 Subject: [PATCH 054/201] chore(release): 1.71.2 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 81a51f28a4..ed160f8e5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.71.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.1...v1.71.2) (2024-07-15) + + +### Bug Fixes + +* add user-agent header in api calls ([53710f9](https://github.com/rudderlabs/rudder-transformer/commit/53710f91a94a631861512093a46acf97534eb607)) + ### [1.71.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.0...v1.71.1) (2024-07-10) diff --git a/package-lock.json b/package-lock.json index 268141d2cd..3930aee260 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.71.1", + "version": "1.71.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.71.1", + "version": "1.71.2", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index e7710d74af..7dee0ca297 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.71.1", + "version": "1.71.2", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 77dc26b86fe07bd7b0ab4d707788cbbc7448a392 Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Mon, 15 Jul 2024 15:54:06 +0530 Subject: [PATCH 055/201] fix: intercom tests --- src/cdk/v2/destinations/intercom/utils.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index 2f7dac2583..37f02bd742 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -255,6 +255,7 @@ describe('getHeaders utility test', () => { Authorization: `Bearer ${destination.Config.apiKey}`, Accept: 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }; const headers = getHeaders(destination, 'v2'); expect(headers).toEqual(expectedHeaders); From df2a1b6f86839c951f494760b6b7136aaa04e605 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 16:07:46 +0530 Subject: [PATCH 056/201] fix: include user-agent in test-cases --- .../destinations/intercom/dataDelivery/business.ts | 2 ++ .../destinations/intercom/dataDelivery/other.ts | 1 + .../destinations/intercom/processor/groupTestData.ts | 2 ++ .../intercom/processor/identifyTestData.ts | 2 ++ .../destinations/intercom/processor/trackTestData.ts | 2 ++ .../destinations/intercom/router/data.ts | 12 ++++++++++++ 6 files changed, 21 insertions(+) diff --git a/test/integrations/destinations/intercom/dataDelivery/business.ts b/test/integrations/destinations/intercom/dataDelivery/business.ts index 2490041832..05ac63147d 100644 --- a/test/integrations/destinations/intercom/dataDelivery/business.ts +++ b/test/integrations/destinations/intercom/dataDelivery/business.ts @@ -9,6 +9,7 @@ const commonHeaders = { Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const unauthorizedResponseHeaders = { @@ -16,6 +17,7 @@ const unauthorizedResponseHeaders = { Authorization: 'Bearer invalidApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const createUserPayload = { diff --git a/test/integrations/destinations/intercom/dataDelivery/other.ts b/test/integrations/destinations/intercom/dataDelivery/other.ts index 46cdcac468..4769077627 100644 --- a/test/integrations/destinations/intercom/dataDelivery/other.ts +++ b/test/integrations/destinations/intercom/dataDelivery/other.ts @@ -10,6 +10,7 @@ const commonHeaders = { Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const createUserPayload = { diff --git a/test/integrations/destinations/intercom/processor/groupTestData.ts b/test/integrations/destinations/intercom/processor/groupTestData.ts index cb81df7bd2..f87da34965 100644 --- a/test/integrations/destinations/intercom/processor/groupTestData.ts +++ b/test/integrations/destinations/intercom/processor/groupTestData.ts @@ -24,6 +24,7 @@ const v1Headers = { Authorization: 'Bearer abcd=', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const v2Headers = { @@ -31,6 +32,7 @@ const v2Headers = { Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }; const destination: Destination = { diff --git a/test/integrations/destinations/intercom/processor/identifyTestData.ts b/test/integrations/destinations/intercom/processor/identifyTestData.ts index d88b7cf7f5..49f3a400d1 100644 --- a/test/integrations/destinations/intercom/processor/identifyTestData.ts +++ b/test/integrations/destinations/intercom/processor/identifyTestData.ts @@ -24,6 +24,7 @@ const v2Headers = { Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }; const v1Headers = { @@ -31,6 +32,7 @@ const v1Headers = { Authorization: 'Bearer intercomApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const destination: Destination = { diff --git a/test/integrations/destinations/intercom/processor/trackTestData.ts b/test/integrations/destinations/intercom/processor/trackTestData.ts index 15bed25d68..b0878cc79d 100644 --- a/test/integrations/destinations/intercom/processor/trackTestData.ts +++ b/test/integrations/destinations/intercom/processor/trackTestData.ts @@ -24,6 +24,7 @@ const v1Headers = { Authorization: 'Bearer intercomApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }; const v2Headers = { @@ -31,6 +32,7 @@ const v2Headers = { Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }; const destination: Destination = { diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index f0e6b46f4a..1a6158ba06 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -683,6 +683,7 @@ export const data: RouterTestData[] = [ 'Content-Type': 'application/json', Accept: 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -725,6 +726,7 @@ export const data: RouterTestData[] = [ 'Content-Type': 'application/json', Accept: 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -753,6 +755,7 @@ export const data: RouterTestData[] = [ 'Content-Type': 'application/json', Accept: 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -781,6 +784,7 @@ export const data: RouterTestData[] = [ 'Content-Type': 'application/json', Accept: 'application/json', 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -845,6 +849,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, params: {}, body: { @@ -884,6 +889,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, params: {}, body: { @@ -935,6 +941,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -964,6 +971,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -1011,6 +1019,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, params: {}, body: { @@ -1050,6 +1059,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, params: {}, body: { @@ -1101,6 +1111,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, @@ -1130,6 +1141,7 @@ export const data: RouterTestData[] = [ Authorization: 'Bearer testApiKey', 'Content-Type': 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, method: 'POST', params: {}, From 2d0902fb40e8535300b707d88e58c0b265fe04f1 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 16:18:15 +0530 Subject: [PATCH 057/201] fix: override proxyRequest property in networkHandler --- .../destinations/intercom/networkHandler.js | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js index 76ba2c81b1..8eeb939676 100644 --- a/src/v0/destinations/intercom/networkHandler.js +++ b/src/v0/destinations/intercom/networkHandler.js @@ -1,5 +1,5 @@ const { RetryableError } = require('@rudderstack/integrations-lib'); -const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network'); +const { proxyRequest, prepareProxyRequest, httpSend } = require('../../../adapters/network'); const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const errorResponseHandler = (destinationResponse, dest) => { @@ -29,12 +29,38 @@ const prepareIntercomProxyRequest = (request) => { return preparedRequest; }; +/** + * depricating: handles proxying requests to destinations from server, expects requsts in "defaultRequestConfig" + * note: needed for test api + * @param {*} request + * @returns + */ +const intercomProxyRequest = async (request) => { + const { endpoint, data, method, params, headers } = prepareIntercomProxyRequest(request); + + const requestOptions = { + url: endpoint, + data, + params, + headers, + method, + }; + const response = await httpSend(requestOptions, { + destType: 'intercom', + feature: 'proxy', + endpointPath: '/proxy', + requestMethod: 'POST', + module: 'router', + }); + return response; +}; + // eslint-disable-next-line @typescript-eslint/naming-convention class networkHandler { constructor() { this.responseHandler = destResponseHandler; this.proxy = proxyRequest; - this.prepareProxy = prepareIntercomProxyRequest; + this.prepareProxy = intercomProxyRequest; this.processAxiosResponse = processAxiosResponse; } } From 759526288f5ffb1681c4b101b7678a5bed90feb0 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 16:22:33 +0530 Subject: [PATCH 058/201] chore: update the networkHandler properties --- src/v0/destinations/intercom/networkHandler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js index 8eeb939676..24ae6e9617 100644 --- a/src/v0/destinations/intercom/networkHandler.js +++ b/src/v0/destinations/intercom/networkHandler.js @@ -59,8 +59,8 @@ const intercomProxyRequest = async (request) => { class networkHandler { constructor() { this.responseHandler = destResponseHandler; - this.proxy = proxyRequest; - this.prepareProxy = intercomProxyRequest; + this.proxy = intercomProxyRequest; + this.prepareProxy = prepareIntercomProxyRequest; this.processAxiosResponse = processAxiosResponse; } } From 85ca9f64f1494230aaf8e940cedd0ea9e2486421 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 16:27:06 +0530 Subject: [PATCH 059/201] fix: lint error --- src/v0/destinations/intercom/networkHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js index 24ae6e9617..fa67bd45e3 100644 --- a/src/v0/destinations/intercom/networkHandler.js +++ b/src/v0/destinations/intercom/networkHandler.js @@ -1,5 +1,5 @@ const { RetryableError } = require('@rudderstack/integrations-lib'); -const { proxyRequest, prepareProxyRequest, httpSend } = require('../../../adapters/network'); +const { prepareProxyRequest, httpSend } = require('../../../adapters/network'); const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const errorResponseHandler = (destinationResponse, dest) => { From 694e09cea42a20c84657258a20dc7c67853b9bb1 Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Mon, 15 Jul 2024 16:45:09 +0530 Subject: [PATCH 060/201] chore: add metadata information into intercom networkHandler --- src/v0/destinations/intercom/networkHandler.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/intercom/networkHandler.js b/src/v0/destinations/intercom/networkHandler.js index fa67bd45e3..d2fa59cd9b 100644 --- a/src/v0/destinations/intercom/networkHandler.js +++ b/src/v0/destinations/intercom/networkHandler.js @@ -24,9 +24,10 @@ const destResponseHandler = (responseParams) => { }; const prepareIntercomProxyRequest = (request) => { + const { metadata } = request; const preparedRequest = prepareProxyRequest(request); preparedRequest.headers['User-Agent'] = process.env.INTERCOM_USER_AGENT_HEADER ?? 'RudderStack'; - return preparedRequest; + return { ...preparedRequest, metadata }; }; /** @@ -36,7 +37,8 @@ const prepareIntercomProxyRequest = (request) => { * @returns */ const intercomProxyRequest = async (request) => { - const { endpoint, data, method, params, headers } = prepareIntercomProxyRequest(request); + const { endpoint, data, method, params, headers, metadata } = + prepareIntercomProxyRequest(request); const requestOptions = { url: endpoint, @@ -51,6 +53,7 @@ const intercomProxyRequest = async (request) => { endpointPath: '/proxy', requestMethod: 'POST', module: 'router', + metadata, }); return response; }; From 04e73b4c7c209a0f20dae4a9b8347da82c4275d4 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Mon, 15 Jul 2024 17:17:59 +0530 Subject: [PATCH 061/201] chore: update test cases --- src/cdk/v2/destinations/intercom/utils.js | 1 + test/integrations/destinations/intercom/network.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index 1760631683..baef94e97c 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -219,6 +219,7 @@ const attachUserAndCompany = (message, Config) => { Authorization: `Bearer ${Config.apiKey}`, Accept: JSON_MIME_TYPE, 'Intercom-Version': '1.4', + 'User-Agent': process.env.INTERCOM_USER_AGENT_HEADER ?? 'RudderStack', }; response.body.JSON = requestBody; response.userId = anonymousId; diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index 69f5ea1247..742b0c1fe3 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -9,7 +9,7 @@ const v0VersionHeaders = { Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', - 'User-Agent': 'RudderLabs', + 'User-Agent': 'RudderStack', }; const v1VersionHeaders = { @@ -17,7 +17,7 @@ const v1VersionHeaders = { Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '2.10', - 'User-Agent': 'RudderLabs', + 'User-Agent': 'RudderStack', }; const userPayload = { From 211be3fcf3d867e64397a1bd398d34c6d9c7dcaf Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Mon, 15 Jul 2024 17:20:37 +0530 Subject: [PATCH 062/201] chore: update mock and remove redundent test case --- .../destinations/intercom/network.ts | 2 +- .../destinations/intercom/router/data.ts | 170 ------------------ 2 files changed, 1 insertion(+), 171 deletions(-) diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index 742b0c1fe3..d98e447824 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -532,7 +532,7 @@ const deliveryCallsData = [ Authorization: 'Bearer invalidApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', - 'User-Agent': 'RudderLabs', + 'User-Agent': 'RudderStack', }, method: 'POST', }, diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 1a6158ba06..17245fb65b 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -988,174 +988,4 @@ export const data: RouterTestData[] = [ }, }, }, - { - id: 'Intercom-router-test-3', - scenario: 'Framework', - successCriteria: - 'Events should be transformed successfully for apiVersion v1 and cdk v2 not enabled', - name: 'intercom', - description: 'Intercom router tests for apiVersion v1 and cdk v2 not enabled', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: routerRequest3, - }, - }, - output: { - response: { - status: 200, - body: { - output: [ - { - batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer testApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - 'User-Agent': 'RudderStack', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - name: 'Test Name', - signed_up_at: 1601493060, - last_seen_user_agent: 'unknown', - update_last_request_at: false, - user_id: 'test_user_id_1', - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - }, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - }, - metadata: [generateMetadata(1)], - batched: false, - statusCode: 200, - destination: destination6, - }, - { - batchedRequest: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://api.intercom.io/users', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Bearer testApiKey', - Accept: 'application/json', - 'Intercom-Version': '1.4', - 'User-Agent': 'RudderStack', - }, - params: {}, - body: { - JSON: { - email: 'test_1@test.com', - phone: '9876543210', - signed_up_at: 1601493060, - name: 'Test Name', - last_seen_user_agent: 'unknown', - update_last_request_at: false, - custom_attributes: { - anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - key1: 'value1', - }, - }, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, - files: {}, - userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', - }, - metadata: [generateMetadata(2)], - batched: false, - statusCode: 200, - destination: destination6, - }, - { - batched: false, - batchedRequest: [ - { - body: { - FORM: {}, - JSON: { - company_id: 'rudderlabs', - industry: 'CDP', - name: 'RudderStack', - plan: 'enterprise', - size: 500, - website: 'www.rudderstack.com', - }, - JSON_ARRAY: {}, - XML: {}, - }, - endpoint: 'https://api.intercom.io/companies', - files: {}, - headers: { - Accept: 'application/json', - Authorization: 'Bearer testApiKey', - 'Content-Type': 'application/json', - 'Intercom-Version': '1.4', - 'User-Agent': 'RudderStack', - }, - method: 'POST', - params: {}, - type: 'REST', - version: '1', - }, - { - body: { - FORM: {}, - JSON: { - companies: [ - { - company_id: 'rudderlabs', - name: 'RudderStack', - }, - ], - email: 'test+5@rudderlabs.com', - user_id: 'user@5', - }, - JSON_ARRAY: {}, - XML: {}, - }, - endpoint: 'https://api.intercom.io/users', - files: {}, - headers: { - Accept: 'application/json', - Authorization: 'Bearer testApiKey', - 'Content-Type': 'application/json', - 'Intercom-Version': '1.4', - 'User-Agent': 'RudderStack', - }, - method: 'POST', - params: {}, - type: 'REST', - version: '1', - }, - ], - destination: destination7, - metadata: [generateMetadata(3)], - statusCode: 200, - }, - ], - }, - }, - }, - }, ]; From 9ba33e83cdb4804559b3851c253683ae4930266d Mon Sep 17 00:00:00 2001 From: krishnachaitanya Date: Mon, 15 Jul 2024 17:36:56 +0530 Subject: [PATCH 063/201] fix: fix unit test intercom --- src/cdk/v2/destinations/intercom/utils.test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index 37f02bd742..bb5ad2b454 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -746,6 +746,7 @@ describe('attachUserAndCompany utility test', () => { Authorization: 'Bearer testApiKey', Accept: 'application/json', 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', }, body: { FORM: {}, From c63f1774b96b51021d4c96d0fac0118d91b798ce Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 15 Jul 2024 12:09:00 +0000 Subject: [PATCH 064/201] chore(release): 1.71.3 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed160f8e5b..3b01182c27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.71.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.2...v1.71.3) (2024-07-15) + + +### Bug Fixes + +* fix unit test intercom ([9ba33e8](https://github.com/rudderlabs/rudder-transformer/commit/9ba33e83cdb4804559b3851c253683ae4930266d)) + ### [1.71.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.1...v1.71.2) (2024-07-15) diff --git a/package-lock.json b/package-lock.json index 3930aee260..f37e6c5bfa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.71.2", + "version": "1.71.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.71.2", + "version": "1.71.3", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 7dee0ca297..ce014176c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.71.2", + "version": "1.71.3", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 80a48132a1a5411906be31bec20b38f6f7e4cead Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Wed, 17 Jul 2024 17:57:31 +0530 Subject: [PATCH 065/201] chore: upgrade packages --- package-lock.json | 8 ++++---- package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index ba740977be..12b2155bea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", "@rudderstack/json-template-engine": "^0.17.1", - "@rudderstack/workflow-engine": "^0.8.12", + "@rudderstack/workflow-engine": "^0.8.13", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -4531,9 +4531,9 @@ "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" }, "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.12.tgz", - "integrity": "sha512-OgnJCWHcOQn6qQZEkCFsgacu+zOYp2OlzidWYmU+pUi8br9ukunoGRcqb0OJhJJI5imh7myhyrHdY3DKZWG12w==", + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.13.tgz", + "integrity": "sha512-NjT07YbaCZtWPHA2s7t2XbxxB1bVAeLtkCm+NhOg5Cxl4ceos7YZIo1oC4LeCb7QYmK0minxaPAnPhhzGTKNhQ==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@rudderstack/json-template-engine": "^0.17.1", diff --git a/package.json b/package.json index 8d9b9589e0..da5c263b84 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", "@rudderstack/json-template-engine": "^0.17.1", - "@rudderstack/workflow-engine": "^0.8.12", + "@rudderstack/workflow-engine": "^0.8.13", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", @@ -187,4 +187,4 @@ "defaultType": "feat" } } -} +} \ No newline at end of file From a7f5c6a11b286d7194d369b2d75afcdf23879c03 Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Wed, 17 Jul 2024 19:35:26 +0530 Subject: [PATCH 066/201] fix: formatting --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index da5c263b84..7893676937 100644 --- a/package.json +++ b/package.json @@ -187,4 +187,4 @@ "defaultType": "feat" } } -} \ No newline at end of file +} From bf10ca9bb34caa571d58f9673872e9db3006f8ef Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Wed, 17 Jul 2024 19:52:59 +0530 Subject: [PATCH 067/201] fix: add optional chaining to webengage page event --- src/v0/destinations/webengage/transform.js | 4 +- .../destinations/webengage/processor/data.ts | 114 ++++++++++++++++++ 2 files changed, 116 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/webengage/transform.js b/src/v0/destinations/webengage/transform.js index f18a7399ff..fc5b0374e4 100644 --- a/src/v0/destinations/webengage/transform.js +++ b/src/v0/destinations/webengage/transform.js @@ -79,8 +79,8 @@ const processEvent = (message, destination) => { return responseBuilder(message, CONFIG_CATEGORIES.EVENT, destination); case EventType.PAGE: case EventType.SCREEN: - name = message.name || message.properties.name; - category = message.properties.category; + name = message.name || message.properties?.name; + category = message.properties?.category; if (name && category) { eventName = `Viewed ${category} ${name} ${messageType}`; } else if (name) { diff --git a/test/integrations/destinations/webengage/processor/data.ts b/test/integrations/destinations/webengage/processor/data.ts index 4a5be9d550..e4cc9bfd3d 100644 --- a/test/integrations/destinations/webengage/processor/data.ts +++ b/test/integrations/destinations/webengage/processor/data.ts @@ -2106,4 +2106,118 @@ export const data = [ }, }, }, + { + name: 'webengage', + description: 'Test 21', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + apiKey: 'dummyApiKey', + licenseCode: '3bjsjdbh7', + dataCenter: 'ind', + }, + }, + message: { + type: 'page', + sentAt: '2022-01-20T13:39:21.033Z', + userId: 'user123456001', + channel: 'web', + context: { + os: { + name: '', + version: '', + }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.2.20', + namespace: 'com.rudderlabs.javascript', + }, + page: { + url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + path: '/Testing/App_for_LaunchDarkly/ourSdk.html', + title: 'Document', + search: '', + tab_url: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/ourSdk.html', + referrer: 'http://127.0.0.1:7307/Testing/App_for_LaunchDarkly/', + initial_referrer: '$direct', + referring_domain: '127.0.0.1:7307', + initial_referring_domain: '', + }, + locale: 'en-US', + screen: { + width: 1440, + height: 900, + density: 2, + innerWidth: 536, + innerHeight: 689, + }, + traits: { + city: 'Pune', + email: 'firstUser@testmail.com', + title: 'VP', + gender: 'female', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.2.20', + }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36', + }, + rudderId: '553b5522-c575-40a7-8072-9741c5f9a647', + messageId: '831f1fa5-de84-4f22-880a-4c3f23fc3f04', + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + integrations: { + All: true, + }, + originalTimestamp: '2022-01-20T13:39:21.032Z', + }, + }, + ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + FORM: {}, + JSON: { + anonymousId: 'bf412108-0357-4330-b119-7305e767823c', + eventName: 'Viewed a page', + eventTime: '2022-01-20T13:39:21+0000', + userId: 'user123456001', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.in.webengage.com/v1/accounts/3bjsjdbh7/events', + files: {}, + headers: { + Authorization: 'Bearer dummyApiKey', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + userId: '', + version: '1', + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; From cc560044ceb769da1f0090da4f690933552b6347 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Thu, 18 Jul 2024 14:56:56 +0530 Subject: [PATCH 068/201] feat: add support for subscribing for RETL flow (#3195) Adding subscribe flag default as true for traits properties object for vdm scenario --- .../destinations/klaviyo/klaviyoUtil.test.js | 156 ++++++++++++++++++ src/v0/destinations/klaviyo/transform.js | 5 +- src/v0/destinations/klaviyo/util.js | 29 +++- 3 files changed, 188 insertions(+), 2 deletions(-) create mode 100644 src/v0/destinations/klaviyo/klaviyoUtil.test.js diff --git a/src/v0/destinations/klaviyo/klaviyoUtil.test.js b/src/v0/destinations/klaviyo/klaviyoUtil.test.js new file mode 100644 index 0000000000..f64ea8335a --- /dev/null +++ b/src/v0/destinations/klaviyo/klaviyoUtil.test.js @@ -0,0 +1,156 @@ +const { addSubscribeFlagToTraits } = require('./util'); + +describe('addSubscribeFlagToTraits', () => { + // The function should add a 'subscribe' property to the 'properties' object if it exists in the input 'traitsInfo'. + it('should add subscribe property to properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + }); + + // The input 'traitsInfo' object is null. + it('should create a new traitsInfo object with properties object containing subscribe property when traitsInfo is null', () => { + // Arrange + const traitsInfo = null; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result).toEqual(null); + }); + + // The function should create a new 'properties' object with a 'subscribe' property and assign it to the 'traitsInfo' if 'properties' does not exist in the input 'traitsInfo'. + it("should create a new 'properties' object with a 'subscribe' property when 'properties' does not exist in traitsInfo", () => { + // Arrange + const traitsInfo = {}; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties).toBeDefined(); + expect(result.properties.subscribe).toBe(true); + }); + + // The function should return the modified 'traitsInfo' object with the 'subscribe' property added. + it('should add subscribe property to properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + }); + + // The input 'traitsInfo' object has an empty 'properties' object. + it('should add subscribe property to properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: {}, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + }); + + // The input 'traitsInfo' object has a 'properties' object with a 'subscribe' property already present. + it('should add subscribe property to properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + subscribe: false, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(false); + }); + + // The function should not modify any other properties of the 'traitsInfo' object. + it('should not modify any other properties of the traitsInfo object', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + expect(result.properties.name).toBe('John'); + expect(result.properties.age).toBe(30); + }); + + // The function should handle cases where the input 'traitsInfo' object has nested objects. + it('should add subscribe property to nested properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + address: { + street: '123 Main St', + city: 'New York', + }, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + expect(result.properties.address).toMatchObject({ + street: '123 Main St', + city: 'New York', + }); + }); + + // The function should handle cases where the input 'traitsInfo' object has properties with null or undefined values. + it('should add subscribe property to properties object when it exists in traitsInfo', () => { + // Arrange + const traitsInfo = { + properties: { + name: 'John', + age: 30, + address: null, + }, + }; + + // Act + const result = addSubscribeFlagToTraits(traitsInfo); + + // Assert + expect(result.properties.subscribe).toBe(true); + }); +}); diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index 09e75919f9..4d3d0a8438 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -20,6 +20,7 @@ const { batchSubscribeEvents, getIdFromNewOrExistingProfile, profileUpdateResponseBuilder, + addSubcribeFlagToTraits, } = require('./util'); const { defaultRequestConfig, @@ -58,11 +59,13 @@ const identifyRequestHandler = async ( // If listId property is present try to subscribe/member user in list const { privateApiKey, enforceEmailAsPrimary, listId, flattenProperties } = destination.Config; const mappedToDestination = get(message, MappedToDestinationKey); + let traitsInfo = getFieldValueFromMessage(message, 'traits'); if (mappedToDestination) { addExternalIdToTraits(message); adduserIdFromExternalId(message); + traitsInfo = addSubcribeFlagToTraits(traitsInfo); } - const traitsInfo = getFieldValueFromMessage(message, 'traits'); + let propertyPayload = constructPayload(message, MAPPING_CONFIG[category.name]); // Extract other K-V property from traits about user custom properties let customPropertyPayload = {}; diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 3f6f6ca2ca..4e61d65982 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -1,6 +1,10 @@ const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils'); const lodash = require('lodash'); -const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib'); +const { + NetworkError, + InstrumentationError, + isDefinedAndNotNull, +} = require('@rudderstack/integrations-lib'); const { WhiteListedTraits } = require('../../../constants'); const { @@ -306,6 +310,28 @@ const batchSubscribeEvents = (subscribeRespList) => { return batchedResponseList; }; +const addSubscribeFlagToTraits = (traitsInfo) => { + let traits = traitsInfo; + if (!isDefinedAndNotNull(traits)) { + return traits; + } + // check if properties already contains subscribe flag + + if (traits.properties) { + if (traits.properties.subscribe === undefined) { + traits.properties.subscribe = true; + } else { + // return if subscribe flag is already present + return traits; + } + } else { + traits = { + properties: { subscribe: true }, + }; + } + return traits; +}; + module.exports = { subscribeUserToList, createCustomerProperties, @@ -314,4 +340,5 @@ module.exports = { batchSubscribeEvents, profileUpdateResponseBuilder, getIdFromNewOrExistingProfile, + addSubscribeFlagToTraits, }; From 448f57484c57d4a55147e9566149c8b714a191c9 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:01:01 +0530 Subject: [PATCH 069/201] feat: update webhook destination to support all datatypes (#3541) * feat: update webhook destination to support all datatypes --- .../v2/destinations/webhook/procWorkflow.yaml | 2 +- .../destinations/webhook/processor/data.ts | 145 ++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) diff --git a/src/cdk/v2/destinations/webhook/procWorkflow.yaml b/src/cdk/v2/destinations/webhook/procWorkflow.yaml index 7095161a6b..950af46b96 100644 --- a/src/cdk/v2/destinations/webhook/procWorkflow.yaml +++ b/src/cdk/v2/destinations/webhook/procWorkflow.yaml @@ -27,7 +27,7 @@ steps: template: | let defaultHeaders = $.context.method in ['POST', 'PUT', 'PATCH'] ? {"content-type": "application/json"} : {} let configHeaders = $.getHashFromArray(.destination.Config.headers) - let messageHeader = typeof .message.header === "object" ? Object.assign(...Object.entries(.message.header).{typeof .[1] === 'string'}[].({[.[0]]: .[1]})[]) : {} + let messageHeader = typeof .message.header === "object" ? Object.assign(...Object.entries(.message.header).({[.[0]]:typeof .[1] === 'string' ? .[1] : JSON.stringify(.[1])})[]) : {} $.context.finalHeaders = { ...defaultHeaders, ...configHeaders, diff --git a/test/integrations/destinations/webhook/processor/data.ts b/test/integrations/destinations/webhook/processor/data.ts index e9629041fe..3add4629bf 100644 --- a/test/integrations/destinations/webhook/processor/data.ts +++ b/test/integrations/destinations/webhook/processor/data.ts @@ -1684,6 +1684,8 @@ export const data = [ 'content-type': 'application/json', test2: 'value2', dynamic_header_key_string: 'dynamic_header_value_string', + dynamic_header_key_num: '10', + dynamic_header_key_object: '{"k1":"v1"}', }, params: {}, files: {}, @@ -2975,4 +2977,147 @@ export const data = [ }, }, }, + { + name: 'webhook', + description: 'Test with different datatype on headers', + feature: 'processor', + module: 'destination', + version: 'v0', + id: 'webhook-headers', + input: { + request: { + body: [ + { + message: { + type: 'track', + userId: 'testUser273421', + anonymousId: 'anon-testUser27342', + event: 'Submit', + header: { + key1: 'abcd', + key2: { + key1: '', + key2: '', + }, + ijkl: { + int: 1234, + string: 'abcd', + array: [1, 2, 'a', true], + object: { key1: 'value' }, + }, + key3: true, + key4: null, + key5: 'undefined', + key6: function log() { + console.log('abcd'); + }, + }, + properties: { + name: 'Shirt', + revenue: 4.99, + }, + context: { + traits: { + email: 'testuser@testmail.com', + }, + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + }, + destination: { + id: '1uNlE1KpXEzslgnehFArr9cMf7g', + Config: { + webhookUrl: 'https://webhook.site/81dc2730-807f-4bbc-8914-5b37d21c8a55', + webhookMethod: 'POST', + oneTrustCookieCategories: [], + connectionMode: 'cloud', + eventDelivery: false, + eventDeliveryTS: 1720497286192, + }, + DestinationDefinition: { + Config: { + secretKeys: ['headers.to'], + excludeKeys: [], + includeKeys: ['oneTrustCookieCategories', 'consentManagement'], + cdkV2Enabled: true, + transformAtV1: 'processor', + isAudienceSupported: true, + }, + configSchema: {}, + responseRules: null, + options: null, + uiConfig: {}, + id: '1aIXpUrvpGno4gEuF2GvI3O9dOe', + name: 'WEBHOOK', + displayName: 'Webhook', + category: null, + createdAt: '2020-04-09T09:24:24.089Z', + updatedAt: '2024-05-30T11:57:04.889Z', + }, + }, + metadata: { + destinationId: '1234', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: '1234', + }, + output: { + body: { + FORM: {}, + JSON: { + anonymousId: 'anon-testUser27342', + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + traits: { + email: 'testuser@testmail.com', + }, + }, + event: 'Submit', + properties: { + name: 'Shirt', + revenue: 4.99, + }, + type: 'track', + userId: 'testUser273421', + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://webhook.site/81dc2730-807f-4bbc-8914-5b37d21c8a55', + files: {}, + headers: { + 'content-type': 'application/json', + ijkl: '{"int":1234,"string":"abcd","array":[1,2,"a",true],"object":{"key1":"value"}}', + key1: 'abcd', + key2: '{"key1":"","key2":""}', + key3: 'true', + key4: 'null', + key5: 'undefined', + }, + method: 'POST', + params: {}, + type: 'REST', + userId: 'anon-testUser27342', + version: '1', + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; From 23f70b2baf509d9d40b8ae4ac228cb025b63b08f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 07:36:08 +0000 Subject: [PATCH 070/201] chore(deps): bump @aws-sdk/client-personalize from 3.485.0 to 3.616.0 Bumps [@aws-sdk/client-personalize](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-personalize) from 3.485.0 to 3.616.0. - [Release notes](https://github.com/aws/aws-sdk-js-v3/releases) - [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-personalize/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.616.0/clients/client-personalize) --- updated-dependencies: - dependency-name: "@aws-sdk/client-personalize" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package-lock.json | 1159 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 +- 2 files changed, 1116 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12b2155bea..6a07fc9040 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", - "@aws-sdk/client-personalize": "^3.470.0", + "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", "@aws-sdk/lib-storage": "^3.474.0", @@ -695,55 +695,1126 @@ } }, "node_modules/@aws-sdk/client-personalize": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.485.0.tgz", - "integrity": "sha512-HWv+HAKtbfje8QH8jE3B+nvjDDsc8E7hhc16128lX4tc1M9sPfC2qfw4R2hZ9YZxAYSEWryRuOMcp8YQylwpzg==", + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.616.0.tgz", + "integrity": "sha512-IrlnpVGJKK+aTkNT5q/1UjJULjHRS9eGmfXLXMZmGk3MsyZBAzxPlW8/eT/dxBwBieuLmHpysPGnerduZCwggw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.616.0", + "@aws-sdk/client-sts": "3.616.0", + "@aws-sdk/core": "3.616.0", + "@aws-sdk/credential-provider-node": "3.616.0", + "@aws-sdk/middleware-host-header": "3.616.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.616.0", + "@aws-sdk/middleware-user-agent": "3.616.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.2.7", + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.4", + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.10", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.10", + "@smithy/util-defaults-mode-node": "^3.0.10", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-signing": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.616.0.tgz", + "integrity": "sha512-hwW0u1f8U4dSloAe61/eupUiGd5Q13B72BuzGxvRk0cIpYX/2m0KBG8DDl7jW1b2QQ+CflTLpG2XUf2+vRJxGA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.616.0", + "@aws-sdk/middleware-host-header": "3.616.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.616.0", + "@aws-sdk/middleware-user-agent": "3.616.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.2.7", + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.4", + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.10", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.10", + "@smithy/util-defaults-mode-node": "^3.0.10", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.616.0.tgz", + "integrity": "sha512-YY1hpYS/G1uRGjQf88dL8VLHkP/IjGxKeXdhy+JnzMdCkAWl3V9j0fEALw40NZe0x79gr6R2KUOUH/IKYQfUmg==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.616.0", + "@aws-sdk/credential-provider-node": "3.616.0", + "@aws-sdk/middleware-host-header": "3.616.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.616.0", + "@aws-sdk/middleware-user-agent": "3.616.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.2.7", + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.4", + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.10", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.10", + "@smithy/util-defaults-mode-node": "^3.0.10", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.616.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sts": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.616.0.tgz", + "integrity": "sha512-FP7i7hS5FpReqnysQP1ukQF1OUWy8lkomaOnbu15H415YUrfCp947SIx6+BItjmx+esKxPkEjh/fbCVzw2D6hQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.616.0", + "@aws-sdk/core": "3.616.0", + "@aws-sdk/credential-provider-node": "3.616.0", + "@aws-sdk/middleware-host-header": "3.616.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.616.0", + "@aws-sdk/middleware-user-agent": "3.616.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.2.7", + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.4", + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.10", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.10", + "@smithy/util-defaults-mode-node": "^3.0.10", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/core": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.616.0.tgz", + "integrity": "sha512-O/urkh2kECs/IqZIVZxyeyHZ7OR2ZWhLNK7btsVQBQvJKrEspLrk/Fp20Qfg5JDerQfBN83ZbyRXLJOOucdZpw==", + "dependencies": { + "@smithy/core": "^2.2.7", + "@smithy/protocol-http": "^4.0.4", + "@smithy/signature-v4": "^4.0.0", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz", + "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.616.0.tgz", + "integrity": "sha512-1rgCkr7XvEMBl7qWCo5BKu3yAxJs71dRaZ55Xnjte/0ZHH6Oc93ZrHzyYy6UH6t0nZrH+FAuw7Yko2YtDDwDeg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.8", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.616.0.tgz", + "integrity": "sha512-5gQdMr9cca3xV7FF2SxpxWGH2t6+t4o+XBGiwsHm8muEjf4nUmw7Ij863x25Tjt2viPYV0UStczSb5Sihp7bkA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.609.0", + "@aws-sdk/credential-provider-http": "3.616.0", + "@aws-sdk/credential-provider-process": "3.614.0", + "@aws-sdk/credential-provider-sso": "3.616.0", + "@aws-sdk/credential-provider-web-identity": "3.609.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.616.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.616.0.tgz", + "integrity": "sha512-Se+u6DAxjDPjKE3vX1X2uxjkWgGq69BTo0uTB0vDUiWwBVgh16s9BsBhSAlKEH1CCbbJHvOg4YdTrzjwzqyClg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.609.0", + "@aws-sdk/credential-provider-http": "3.616.0", + "@aws-sdk/credential-provider-ini": "3.616.0", + "@aws-sdk/credential-provider-process": "3.614.0", + "@aws-sdk/credential-provider-sso": "3.616.0", + "@aws-sdk/credential-provider-web-identity": "3.609.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz", + "integrity": "sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.616.0.tgz", + "integrity": "sha512-3rsWs9GBi8Z8Gps5ROwqguxtw+J6OIg1vawZMLRNMqqZoBvbOToe9wEnpid8ylU+27+oG8uibJNlNuRyXApUjw==", + "dependencies": { + "@aws-sdk/client-sso": "3.616.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz", + "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.609.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.616.0.tgz", + "integrity": "sha512-mhNfHuGhCDZwYCABebaOvTgOM44UCZZRq2cBpgPZLVKP0ydAv5aFHXv01goexxXHqgHoEGx0uXWxlw0s2EpFDg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.0.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.616.0.tgz", + "integrity": "sha512-LQKAcrZRrR9EGez4fdCIVjdn0Ot2HMN12ChnoMGEU6oIxnQ2aSC7iASFFCV39IYfeMh7iSCPj7Wopqw8rAouzg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.0.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.616.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.616.0.tgz", + "integrity": "sha512-iMcAb4E+Z3vuEcrDsG6T2OBNiqWAquwahP9qepHqfmnmJqHr1mSHtXDYTGBNid31+621sUQmneUQ+fagpGAe4w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.614.0", + "@smithy/protocol-http": "^4.0.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-endpoints": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", + "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/core": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.8.tgz", + "integrity": "sha512-1Y0XX0Ucyg0LWTfTVLWpmvSRtFRniykUl3dQ0os1sTd03mKDudR6mVyX+2ak1phwPXx2aEWMAAdW52JNi0mc3A==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-retry": "^3.0.11", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/smithy-client": "^3.1.9", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz", + "integrity": "sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.2.tgz", + "integrity": "sha512-3LaWlBZObyGrOOd7e5MlacnAKEwFBmAeiW/TOj2eR9475Vnq30uS2510+tnKbxrGjROfNdOhQqGo5j3sqLT6bA==", + "dependencies": { + "@smithy/protocol-http": "^4.0.4", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/hash-node": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/invalid-dependency": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.4.tgz", + "integrity": "sha512-wySGje/KfhsnF8YSh9hP16pZcl3C+X6zRsvSfItQGvCyte92LliilU3SD0nR7kTlxnAJwxY8vE/k4Eoezj847Q==", + "dependencies": { + "@smithy/protocol-http": "^4.0.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz", + "integrity": "sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.11.tgz", + "integrity": "sha512-/TIRWmhwMpv99JCGuMhJPnH7ggk/Lah7s/uNDyr7faF02BxNsyD/fz9Tw7pgCf9tYOKgjimm2Qml1Aq1pbkt6g==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.0.4", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.1.9", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.3.tgz", + "integrity": "sha512-UiKZm8KHb/JeOPzHZtRUfyaRDO1KPKPpsd7iplhiwVGOeVdkiVJ5bVe7+NhWREMOKomrDIDdSZyglvMothLg0Q==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.0.4", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.4.tgz", + "integrity": "sha512-fAA2O4EFyNRyYdFLVIv5xMMeRb+3fRKc/Rt2flh5k831vLvUmNFXcydeg7V3UeEhGURJI4c1asmGJBjvmF6j8Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/service-error-classification": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "dependencies": { + "@smithy/types": "^3.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/signature-v4": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.0.0.tgz", + "integrity": "sha512-ervYjQ+ZvmNG51Ui77IOTPri7nOyo8Kembzt9uwwlmtXJPmFXvslOahbA1blvAVs7G0KlYMiOBog1rAt7RVXxg==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.9.tgz", + "integrity": "sha512-My2RaInZ4gSwJUPMaiLR/Nk82+c4LlvqpXA+n7lonGYgCZq23Tg+/xFhgmiejJ6XPElYJysTPyV90vKyp17+1g==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.0.4", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.11.tgz", + "integrity": "sha512-O3s9DGb3bmRvEKmT8RwvSWK4A9r6svfd+MnJB+UMi9ZcCkAnoRtliulOnGF0qCMkKF9mwk2tkopBBstalPY/vg==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.1.9", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.11.tgz", + "integrity": "sha512-qd4a9qtyOa/WY14aHHOkMafhh9z8D2QTwlcBoXMTPnEwtcY+xpe1JyFm9vya7VsB8hHsfn3XodEtwqREiu4ygQ==", + "dependencies": { + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.1.9", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-endpoints": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-retry": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "dependencies": { + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.1.tgz", + "integrity": "sha512-EhRnVvl3AhoHAT2rGQ5o+oSDRM/BUSMPLZZdRJZLcNVUsFAjOs4vHaPdNQivTSzRcFxf5DA4gtO46WWU2zimaw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/node-http-handler": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/client-s3": { "version": "3.485.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.485.0.tgz", diff --git a/package.json b/package.json index 7893676937..b9cc2ec86f 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ }, "dependencies": { "@amplitude/ua-parser-js": "0.7.24", - "@aws-sdk/client-personalize": "^3.470.0", + "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", "@aws-sdk/lib-storage": "^3.474.0", From 76e7bd4d5d3dd0da2e9d82aa8168b4d2b04e3bf1 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Fri, 19 Jul 2024 13:41:50 +0530 Subject: [PATCH 071/201] chore: add error handling for ga4 v2 custom mappings (#3572) --- src/v0/destinations/ga4_v2/customMappingsHandler.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/ga4_v2/customMappingsHandler.js b/src/v0/destinations/ga4_v2/customMappingsHandler.js index 0f20788076..9e82788150 100644 --- a/src/v0/destinations/ga4_v2/customMappingsHandler.js +++ b/src/v0/destinations/ga4_v2/customMappingsHandler.js @@ -14,7 +14,7 @@ const { prepareUserProperties, sanitizeUserProperties, } = require('../ga4/utils'); -const { InstrumentationError } = require('@rudderstack/integrations-lib'); +const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib'); const { removeUndefinedAndNullRecurse, constructPayload, @@ -117,7 +117,12 @@ const handleCustomMappings = (message, Config) => { const eventPropertiesMappings = mapping.eventProperties || []; - const ga4MappedPayload = applyCustomMappings(message, eventPropertiesMappings); + let ga4MappedPayload = {}; + try { + ga4MappedPayload = applyCustomMappings(message, eventPropertiesMappings); + } catch (e) { + throw new ConfigurationError(`[GA4]:: Error in custom mappings: ${e.message}`); + } removeUndefinedAndNullRecurse(ga4MappedPayload); From f840d54dcbdc011eeb716dce74f2ecb36e99d0e9 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Fri, 19 Jul 2024 15:15:02 +0530 Subject: [PATCH 072/201] fix: job ordering for hs (#3319) * fix: job ordering for hs, initial commit * chore: test * fix: code changes to maintain order * chore: eslint fix * chore: eslint fix+1 * chore: add metic for batch size * chore: address comments Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> * chore: update src/v0/destinations/hs/HSTransform-v2.js * chore: remove optional chaining --------- Co-authored-by: Sai Kumar Battinoju <88789928+saikumarrs@users.noreply.github.com> Co-authored-by: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Co-authored-by: Anant Jain Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> --- sample.env | 2 +- src/util/prometheus.js | 6 + src/v0/destinations/hs/HSTransform-v2.js | 7 +- src/v0/destinations/hs/transform.js | 47 +- .../destinations/hs/router/config.ts | 57 + .../destinations/hs/router/data.ts | 1043 +++++++++++++---- 6 files changed, 944 insertions(+), 218 deletions(-) create mode 100644 test/integrations/destinations/hs/router/config.ts diff --git a/sample.env b/sample.env index 71b11fbfca..41caa84a10 100644 --- a/sample.env +++ b/sample.env @@ -9,4 +9,4 @@ REDIS_PORT = 6379 REDIS_PASSWORD = 123 REDIS_USERNAME = abc USE_REDIS_DB = true -REDIS_EXPIRY_TIME_IN_SEC = 3600 \ No newline at end of file +REDIS_EXPIRY_TIME_IN_SEC = 3600 diff --git a/src/util/prometheus.js b/src/util/prometheus.js index 0b1f3b34bf..49f1fdcd8b 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -502,6 +502,12 @@ class Prometheus { type: 'counter', labelNames: ['destination_id'], }, + { + name: 'hs_batch_size', + help: 'hs_batch_size', + type: 'gauge', + labelNames: ['destination_id'], + }, { name: 'mixpanel_batch_engage_pack_size', help: 'mixpanel_batch_engage_pack_size', diff --git a/src/v0/destinations/hs/HSTransform-v2.js b/src/v0/destinations/hs/HSTransform-v2.js index d2b26f1ab8..71f080205a 100644 --- a/src/v0/destinations/hs/HSTransform-v2.js +++ b/src/v0/destinations/hs/HSTransform-v2.js @@ -20,6 +20,7 @@ const { getDestinationExternalIDInfoForRetl, getDestinationExternalIDObjectForRetl, } = require('../../util'); +const stats = require('../../../util/stats'); const { IDENTIFY_CRM_UPDATE_CONTACT, IDENTIFY_CRM_CREATE_NEW_CONTACT, @@ -235,10 +236,14 @@ const processTrack = async (message, destination) => { const batchIdentify = (arrayChunksIdentify, batchedResponseList, batchOperation) => { // list of chunks [ [..], [..] ] + const { destinationId } = arrayChunksIdentify[0][0].destination; arrayChunksIdentify.forEach((chunk) => { const identifyResponseList = []; const metadata = []; - + // add metric for batch size + stats.gauge('hs_batch_size', chunk.length, { + destination_id: destinationId, + }); // extracting message, destination value // from the first event in a batch const { message, destination } = chunk[0]; diff --git a/src/v0/destinations/hs/transform.js b/src/v0/destinations/hs/transform.js index 9eed244af4..fe05d45fbb 100644 --- a/src/v0/destinations/hs/transform.js +++ b/src/v0/destinations/hs/transform.js @@ -1,7 +1,11 @@ const get = require('get-value'); const { InstrumentationError } = require('@rudderstack/integrations-lib'); const { EventType } = require('../../../constants'); -const { handleRtTfSingleEventError, getDestinationExternalIDInfoForRetl } = require('../../util'); +const { + handleRtTfSingleEventError, + getDestinationExternalIDInfoForRetl, + groupEventsByType: batchEventsInOrder, +} = require('../../util'); const { API_VERSION } = require('./config'); const { processLegacyIdentify, @@ -63,19 +67,17 @@ const process = async (event) => { } return processSingleMessage(events[0].message, events[0].destination); }; - -// we are batching by default at routerTransform -const processRouterDest = async (inputs, reqMetadata) => { +const processBatchRouter = async (inputs, reqMetadata) => { let tempInputs = inputs; - - const successRespList = []; - const errorRespList = []; // using the first destination config for transforming the batch const { destination } = tempInputs[0]; let propertyMap; const mappedToDestination = get(tempInputs[0].message, MappedToDestinationKey); const { objectType } = getDestinationExternalIDInfoForRetl(tempInputs[0].message, 'HS'); - + const successRespList = []; + const errorRespList = []; + // batch implementation + let batchedResponseList = []; try { if (mappedToDestination && GENERIC_TRUE_VALUES.includes(mappedToDestination?.toString())) { // skip splitting the batches to inserts and updates if object it is an association @@ -95,11 +97,16 @@ const processRouterDest = async (inputs, reqMetadata) => { } } catch (error) { // Any error thrown from the above try block applies to all the events - return tempInputs.map((input) => handleRtTfSingleEventError(input, error, reqMetadata)); + return { + batchedResponseList, + errorRespList: tempInputs.map((input) => + handleRtTfSingleEventError(input, error, reqMetadata), + ), + }; } await Promise.all( - tempInputs.map(async (input) => { + inputs.map(async (input) => { try { if (input.message.statusCode) { // already transformed event @@ -137,8 +144,6 @@ const processRouterDest = async (inputs, reqMetadata) => { }), ); - // batch implementation - let batchedResponseList = []; if (successRespList.length > 0) { if (destination.Config.apiVersion === API_VERSION.v3) { batchedResponseList = batchEvents(successRespList); @@ -146,6 +151,24 @@ const processRouterDest = async (inputs, reqMetadata) => { batchedResponseList = legacyBatchEvents(successRespList); } } + return { batchedResponseList, errorRespList }; +}; +// we are batching by default at routerTransform +const processRouterDest = async (inputs, reqMetadata) => { + const tempNewInputs = batchEventsInOrder(inputs); + const batchedResponseList = []; + const errorRespList = []; + const promises = tempNewInputs.map(async (inputEvents) => { + const response = await processBatchRouter(inputEvents, reqMetadata); + return response; + }); + + const results = await Promise.all(promises); + + results.forEach((response) => { + errorRespList.push(...response.errorRespList); + batchedResponseList.push(...response.batchedResponseList); + }); return [...batchedResponseList, ...errorRespList]; }; diff --git a/test/integrations/destinations/hs/router/config.ts b/test/integrations/destinations/hs/router/config.ts new file mode 100644 index 0000000000..89a0c13d1a --- /dev/null +++ b/test/integrations/destinations/hs/router/config.ts @@ -0,0 +1,57 @@ +export const destination = { + Config: { + accessToken: 'dummy-access-token', + hubID: 'dummy-hubId', + authorizationType: 'newPrivateAppApi', + apiVersion: 'newApi', + lookupField: 'email', + hubspotEvents: [ + { + rsEventName: 'Purchase', + hubspotEventName: 'pedummy-hubId_rs_hub_test', + eventProperties: [ + { + from: 'Revenue', + to: 'value', + }, + { + from: 'Price', + to: 'cost', + }, + ], + }, + { + rsEventName: 'Purchase2', + hubspotEventName: 'pedummy-hubId_rs_hub_test', + eventProperties: [ + { + from: 'Revenue', + to: 'value', + }, + { + from: 'Price', + to: 'cost', + }, + ], + }, + { + rsEventName: 'Order Complete', + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + eventProperties: [ + { + from: 'firstName', + to: 'first_name', + }, + { + from: 'lastName', + to: 'last_name', + }, + ], + }, + ], + }, + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + }, + transformations: [], +}; diff --git a/test/integrations/destinations/hs/router/data.ts b/test/integrations/destinations/hs/router/data.ts index ab3ca8cba8..e12efef4d0 100644 --- a/test/integrations/destinations/hs/router/data.ts +++ b/test/integrations/destinations/hs/router/data.ts @@ -1,3 +1,4 @@ +import { destination } from './config'; export const data = [ { name: 'hs', @@ -100,6 +101,235 @@ export const data = [ }, }, }, + { + name: 'hs', + description: 'legacy router retl tests', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + mappedToDestination: true, + externalId: [ + { identifierType: 'email', id: 'testhubspot2@email.com', type: 'HS-lead' }, + ], + sources: { + job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', + task_id: 'vw_rs_mailchimp_mocked_hg_data', + version: 'v1.8.1', + batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', + job_run_id: 'c8el40l6e87v0c4hkbl0', + task_run_id: 'c8el40l6e87v0c4hkblg', + }, + }, + type: 'identify', + traits: { firstname: 'Test Hubspot', anonymousId: '12345', country: 'India' }, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + metadata: { jobId: 2, userId: 'u1' }, + }, + { + message: { + channel: 'web', + context: { + mappedToDestination: true, + externalId: [ + { identifierType: 'email', id: 'testhubspot@email.com', type: 'HS-lead' }, + ], + sources: { + job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', + task_id: 'vw_rs_mailchimp_mocked_hg_data', + version: 'v1.8.1', + batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', + job_run_id: 'c8el40l6e87v0c4hkbl0', + task_run_id: 'c8el40l6e87v0c4hkblg', + }, + }, + type: 'identify', + traits: { firstname: 'Test Hubspot 1', anonymousId: '123451', country: 'India 1' }, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + metadata: { jobId: 3, userId: 'u1' }, + }, + ], + destType: 'hs', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/create', + headers: { 'Content-Type': 'application/json' }, + params: { hapikey: 'dummy-apikey' }, + body: { + JSON: { + inputs: [ + { + properties: { + firstname: 'Test Hubspot 1', + anonymousId: '123451', + country: 'India 1', + email: 'testhubspot@email.com', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 3, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/update', + headers: { 'Content-Type': 'application/json' }, + params: { hapikey: 'dummy-apikey' }, + body: { + JSON: { + inputs: [ + { + properties: { + firstname: 'Test Hubspot', + anonymousId: '12345', + country: 'India', + email: 'testhubspot2@email.com', + }, + id: '103605', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [{ jobId: 2, userId: 'u1' }], + batched: true, + statusCode: 200, + destination: { + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + }, + ], + }, + }, + }, + }, { name: 'hs', description: 'legacy router tests', @@ -299,7 +529,7 @@ export const data = [ }, metadata: { jobId: 4, userId: 'u1' }, destination: { - Config: { apiKey: 'rate-limit-id', hubID: 'dummy-hubId' }, + Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, secretConfig: {}, ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', name: 'Hubspot', @@ -343,18 +573,14 @@ export const data = [ JSON: {}, JSON_ARRAY: { batch: - '[{"email":"testhubspot3@email.com","properties":[{"property":"firstname","value":"Test Hubspot3"}]},{"email":"testhubspot1@email.com","properties":[{"property":"firstname","value":"Test Hubspot1"}]},{"email":"testhubspot4@email.com","properties":[{"property":"firstname","value":"Test Hubspot4"}]}]', + '[{"email":"testhubspot1@email.com","properties":[{"property":"firstname","value":"Test Hubspot1"}]}]', }, XML: {}, FORM: {}, }, files: {}, }, - metadata: [ - { jobId: 3, userId: 'u1' }, - { jobId: 1, userId: 'u1' }, - { jobId: 4, userId: 'u1' }, - ], + metadata: [{ jobId: 1, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -420,152 +646,20 @@ export const data = [ isProcessorEnabled: true, }, }, - ], - }, - }, - }, - }, - { - name: 'hs', - description: 'legacy router retl tests', - feature: 'router', - module: 'destination', - version: 'v0', - input: { - request: { - body: { - input: [ - { - message: { - channel: 'web', - context: { - mappedToDestination: true, - externalId: [ - { identifierType: 'email', id: 'testhubspot2@email.com', type: 'HS-lead' }, - ], - sources: { - job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', - task_id: 'vw_rs_mailchimp_mocked_hg_data', - version: 'v1.8.1', - batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', - job_run_id: 'c8el40l6e87v0c4hkbl0', - task_run_id: 'c8el40l6e87v0c4hkblg', - }, - }, - type: 'identify', - traits: { firstname: 'Test Hubspot', anonymousId: '12345', country: 'India' }, - messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', - originalTimestamp: '2019-10-15T09:35:31.288Z', - anonymousId: '00000000000000000000000000', - userId: '12345', - integrations: { All: true }, - sentAt: '2019-10-14T09:03:22.563Z', - }, - destination: { - Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, - secretConfig: {}, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - name: 'Hubspot', - enabled: true, - workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', - deleted: false, - createdAt: '2020-12-30T08:39:32.005Z', - updatedAt: '2021-02-03T16:22:31.374Z', - destinationDefinition: { - id: '1aIXqM806xAVm92nx07YwKbRrO9', - name: 'HS', - displayName: 'Hubspot', - createdAt: '2020-04-09T09:24:31.794Z', - updatedAt: '2021-01-11T11:03:28.103Z', - }, - transformations: [], - isConnectionEnabled: true, - isProcessorEnabled: true, - }, - metadata: { jobId: 2, userId: 'u1' }, - }, - { - message: { - channel: 'web', - context: { - mappedToDestination: true, - externalId: [ - { identifierType: 'email', id: 'testhubspot@email.com', type: 'HS-lead' }, - ], - sources: { - job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', - task_id: 'vw_rs_mailchimp_mocked_hg_data', - version: 'v1.8.1', - batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', - job_run_id: 'c8el40l6e87v0c4hkbl0', - task_run_id: 'c8el40l6e87v0c4hkblg', - }, - }, - type: 'identify', - traits: { firstname: 'Test Hubspot 1', anonymousId: '123451', country: 'India 1' }, - messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', - originalTimestamp: '2019-10-15T09:35:31.288Z', - anonymousId: '00000000000000000000000000', - userId: '12345', - integrations: { All: true }, - sentAt: '2019-10-14T09:03:22.563Z', - }, - destination: { - Config: { apiKey: 'dummy-apikey', hubID: 'dummy-hubId' }, - secretConfig: {}, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - name: 'Hubspot', - enabled: true, - workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', - deleted: false, - createdAt: '2020-12-30T08:39:32.005Z', - updatedAt: '2021-02-03T16:22:31.374Z', - destinationDefinition: { - id: '1aIXqM806xAVm92nx07YwKbRrO9', - name: 'HS', - displayName: 'Hubspot', - createdAt: '2020-04-09T09:24:31.794Z', - updatedAt: '2021-01-11T11:03:28.103Z', - }, - transformations: [], - isConnectionEnabled: true, - isProcessorEnabled: true, - }, - metadata: { jobId: 3, userId: 'u1' }, - }, - ], - destType: 'hs', - }, - method: 'POST', - }, - }, - output: { - response: { - status: 200, - body: { - output: [ { batchedRequest: { version: '1', type: 'REST', method: 'POST', - endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/create', + endpoint: 'https://api.hubapi.com/contacts/v1/contact/batch/', headers: { 'Content-Type': 'application/json' }, params: { hapikey: 'dummy-apikey' }, body: { - JSON: { - inputs: [ - { - properties: { - firstname: 'Test Hubspot 1', - anonymousId: '123451', - country: 'India 1', - email: 'testhubspot@email.com', - }, - }, - ], + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testhubspot3@email.com","properties":[{"property":"firstname","value":"Test Hubspot3"}]}]', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, }, @@ -601,30 +695,21 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://api.hubapi.com/crm/v3/objects/lead/batch/update', + endpoint: 'https://api.hubapi.com/contacts/v1/contact/batch/', headers: { 'Content-Type': 'application/json' }, params: { hapikey: 'dummy-apikey' }, body: { - JSON: { - inputs: [ - { - properties: { - firstname: 'Test Hubspot', - anonymousId: '12345', - country: 'India', - email: 'testhubspot2@email.com', - }, - id: '103605', - }, - ], + JSON: {}, + JSON_ARRAY: { + batch: + '[{"email":"testhubspot4@email.com","properties":[{"property":"firstname","value":"Test Hubspot4"}]}]', }, - JSON_ARRAY: {}, XML: {}, FORM: {}, }, files: {}, }, - metadata: [{ jobId: 2, userId: 'u1' }], + metadata: [{ jobId: 4, userId: 'u1' }], batched: true, statusCode: 200, destination: { @@ -1280,21 +1365,37 @@ export const data = [ }, { message: { - type: 'track', - traits: {}, + channel: 'web', context: { - externalId: [ - { - id: 'osvaldocostaferreira98@gmail.com', - type: 'HS-contacts', - identifierType: 'email', - }, - ], + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'testhubspot@email.com', + firstname: 'Test Hubspot22', + anonymousId: '4444', + }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-GB', + ip: '0.0.0.0', + os: { name: '', version: '' }, + screen: { density: 2 }, + page: { path: '', referrer: '', search: '', title: '', url: '' }, }, - event: 'Purchase', - properties: { Revenue: 'name1' }, + type: 'identify', + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { jobId: 3, userId: 'u1' }, + metadata: { jobId: 4, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1302,7 +1403,7 @@ export const data = [ hubID: 'dummy-hubId', apiKey: 'dummy-apikey', apiVersion: 'newApi', - lookupField: 'lookupField', + lookupField: 'email', hubspotEvents: [ { rsEventName: 'Purchase', @@ -1357,7 +1458,7 @@ export const data = [ }, traits: { email: 'testhubspot@email.com', - firstname: 'Test Hubspot22', + firstname: 'Test Hubspot44', anonymousId: '4444', }, library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, @@ -1377,7 +1478,7 @@ export const data = [ integrations: { All: true }, sentAt: '2019-10-14T09:03:22.563Z', }, - metadata: { jobId: 4, userId: 'u1' }, + metadata: { jobId: 5, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1430,37 +1531,21 @@ export const data = [ }, { message: { - channel: 'web', + type: 'track', + traits: {}, context: { - app: { - build: '1.0.0', - name: 'RudderLabs JavaScript SDK', - namespace: 'com.rudderlabs.javascript', - version: '1.0.0', - }, - traits: { - email: 'testhubspot@email.com', - firstname: 'Test Hubspot44', - anonymousId: '4444', - }, - library: { name: 'RudderLabs JavaScript SDK', version: '1.0.0' }, - userAgent: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', - locale: 'en-GB', - ip: '0.0.0.0', - os: { name: '', version: '' }, - screen: { density: 2 }, - page: { path: '', referrer: '', search: '', title: '', url: '' }, + externalId: [ + { + id: 'osvaldocostaferreira98@gmail.com', + type: 'HS-contacts', + identifierType: 'email', + }, + ], }, - type: 'identify', - messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', - originalTimestamp: '2019-10-15T09:35:31.288Z', - anonymousId: '00000000000000000000000000', - userId: '12345', - integrations: { All: true }, - sentAt: '2019-10-14T09:03:22.563Z', + event: 'Purchase', + properties: { Revenue: 'name1' }, }, - metadata: { jobId: 5, userId: 'u1' }, + metadata: { jobId: 3, userId: 'u1' }, destination: { Config: { authorizationType: 'newPrivateAppApi', @@ -1468,7 +1553,7 @@ export const data = [ hubID: 'dummy-hubId', apiKey: 'dummy-apikey', apiVersion: 'newApi', - lookupField: 'email', + lookupField: 'lookupField', hubspotEvents: [ { rsEventName: 'Purchase', @@ -1639,7 +1724,7 @@ export const data = [ hubID: 'dummy-hubId', apiKey: 'dummy-apikey', apiVersion: 'newApi', - lookupField: 'email', + lookupField: 'lookupField', hubspotEvents: [ { rsEventName: 'Purchase', @@ -1828,4 +1913,554 @@ export const data = [ }, }, }, + { + name: 'hs', + description: 'router job ordering ', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot1@email.com', + firstname: 'Test Hubspot1', + }, + }, + type: 'identify', + userId: 'user1', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 1, + userId: 'user1', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { email: 'user1@a.com' }, + }, + type: 'track', + anonymousId: '', + userId: 'user1', + event: 'purchase', + properties: { + user_actual_role: 'system_admin, system_user', + user_actual_id: 12345, + }, + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { + jobId: 2, + userId: 'user1', + }, + destination, + }, + { + message: { + channel: 'web', + context: { traits: { email: 'user2@a.com' } }, + type: 'track', + anonymousId: '', + userId: 'user2', + event: 'purchase2', + properties: { + user_actual_role: 'system_admin_2, system_user', + user_actual_id: 12345, + }, + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { + jobId: 3, + userId: 'user2', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot2@email.com', + firstname: 'Test Hubspot1', + anonymousId: '1111', + }, + }, + type: 'identify', + anonymousId: '', + userId: 'user2', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 4, + userId: 'user2', + }, + destination, + }, + { + message: { + channel: 'web', + context: { traits: { email: 'user3@a.com' } }, + type: 'track', + anonymousId: '', + userId: 'user3', + event: 'purchase', + properties: { + user_actual_role: 'system_admin, system_user', + user_actual_id: 12345, + }, + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { + jobId: 5, + userId: 'user3', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot3@email.com', + firstname: 'Test Hubspot1', + anonymousId: '1111', + }, + }, + type: 'identify', + anonymousId: '', + userId: 'user3', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 6, + userId: 'user3', + }, + destination, + }, + { + message: { + channel: 'web', + context: { traits: { email: 'user4@a.com' } }, + type: 'track', + anonymousId: '', + userId: 'user4', + event: 'purchase', + properties: { + user_actual_role: 'system_admin, system_user', + user_actual_id: 12345, + }, + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { + jobId: 7, + userId: 'user4', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot4@email.com', + firstname: 'Test Hubspot4', + anonymousId: '1111', + }, + }, + type: 'identify', + anonymousId: '', + userId: 'user4', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 8, + userId: 'user4', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot5@email.com', + firstname: 'Test Hubspot51', + anonymousId: '1111', + }, + }, + type: 'identify', + anonymousId: '', + userId: 'user5', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 9, + userId: 'user5', + }, + destination, + }, + { + message: { + channel: 'web', + context: { traits: { email: 'user5@a.com' } }, + type: 'track', + anonymousId: '', + userId: 'user5', + event: 'purchase', + properties: { + user_actual_role: 'system_admin, system_user', + user_actual_id: 12345, + }, + sentAt: '2019-10-14T11:15:53.296Z', + }, + metadata: { + jobId: 10, + userId: 'user5', + }, + destination, + }, + { + message: { + channel: 'web', + context: { + traits: { + email: 'testhubspot5@email.com', + firstname: 'Test Hubspot5', + anonymousId: '1111', + }, + }, + type: 'identify', + anonymousId: '', + userId: 'user5', + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + jobId: 11, + userId: 'user5', + }, + destination, + }, + ], + destType: 'hs', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + inputs: [ + { + properties: { + email: 'testhubspot1@email.com', + firstname: 'Test Hubspot1', + }, + }, + { + properties: { + email: 'testhubspot5@email.com', + firstname: 'Test Hubspot51', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'user1', + }, + { + jobId: 9, + userId: 'user5', + }, + ], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/events/v3/send', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + email: 'user1@a.com', + eventName: 'pedummy-hubId_rs_hub_test', + properties: {}, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 2, + userId: 'user1', + }, + ], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/events/v3/send', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + email: 'user2@a.com', + eventName: 'pedummy-hubId_rs_hub_test', + properties: {}, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 3, + userId: 'user2', + }, + ], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/events/v3/send', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + email: 'user3@a.com', + eventName: 'pedummy-hubId_rs_hub_test', + properties: {}, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 5, + userId: 'user3', + }, + ], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/events/v3/send', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + email: 'user4@a.com', + eventName: 'pedummy-hubId_rs_hub_test', + properties: {}, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 7, + userId: 'user4', + }, + ], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/events/v3/send', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + email: 'user5@a.com', + eventName: 'pedummy-hubId_rs_hub_test', + properties: {}, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 10, + userId: 'user5', + }, + ], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + params: {}, + body: { + JSON: { + inputs: [ + { + properties: { + email: 'testhubspot2@email.com', + firstname: 'Test Hubspot1', + }, + }, + { + properties: { + email: 'testhubspot3@email.com', + firstname: 'Test Hubspot1', + }, + }, + { + properties: { + email: 'testhubspot4@email.com', + firstname: 'Test Hubspot4', + }, + }, + { + properties: { + email: 'testhubspot5@email.com', + firstname: 'Test Hubspot5', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 4, + userId: 'user2', + }, + { + jobId: 6, + userId: 'user3', + }, + { + jobId: 8, + userId: 'user4', + }, + { + jobId: 11, + userId: 'user5', + }, + ], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, ]; From 1bef2126a75324598c2af0ecaffcf582f038af11 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:57:08 +0530 Subject: [PATCH 073/201] fix: add validation for type in google pubsub (#3578) --- src/v0/destinations/googlepubsub/util.js | 5 ++ .../googlepubsub/processor/data.ts | 68 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/v0/destinations/googlepubsub/util.js b/src/v0/destinations/googlepubsub/util.js index 8af71ac25f..a163356ed0 100644 --- a/src/v0/destinations/googlepubsub/util.js +++ b/src/v0/destinations/googlepubsub/util.js @@ -1,3 +1,4 @@ +const { ConfigurationAuthError } = require('@rudderstack/integrations-lib'); const { getHashFromArray, getValueFromMessage, @@ -18,6 +19,10 @@ const getTopic = (event) => { const { eventToTopicMap } = destination.Config; const hashMap = getHashFromArray(eventToTopicMap, 'from', 'to'); + if (!message.type) { + throw new ConfigurationAuthError('type is required for event'); + } + return ( (message.event ? hashMap[message.event.toLowerCase()] : null) || hashMap[message.type.toLowerCase()] || diff --git a/test/integrations/destinations/googlepubsub/processor/data.ts b/test/integrations/destinations/googlepubsub/processor/data.ts index 0dffa57839..6746e5b765 100644 --- a/test/integrations/destinations/googlepubsub/processor/data.ts +++ b/test/integrations/destinations/googlepubsub/processor/data.ts @@ -1314,4 +1314,72 @@ export const data = [ }, }, }, + { + name: 'googlepubsub', + description: 'Test 13', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + sentAt: '2020-08-28T15:11:56.167Z', + category: 'Food', + messageId: + 'node-cfc5fb7ec83b82bc29e16336a11331e2-0ba97212-0f6e-44cd-a0f1-c20b8b7a7cba', + anonymousId: 'abcdeeeeeeeexxxx111', + originalTimestamp: '2020-08-28T15:11:56.162Z', + name: 'Pizza', + _metadata: { + nodeVersion: '10.22.0', + }, + }, + destination: { + Config: { + credentials: 'abc', + eventToTopicMap: [ + { + from: 'track', + to: 'Test-Topic', + }, + { + from: '*', + to: 'test', + }, + ], + eventToAttributesMap: [ + { + from: 'track', + to: 'properties.nestedObject.this', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'type is required for event', + statTags: { + destType: 'GOOGLEPUBSUB', + errorCategory: 'dataValidation', + errorType: 'configuration', + feature: 'processor', + implementation: 'native', + meta: 'accessTokenExpired', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, ]; From 6304abb2346f331b78e927b73e7c2ca17e94f4cf Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:21:40 +0530 Subject: [PATCH 074/201] feat: introduces new user fields in titkok ads (#3575) * feat: introduces new user fields in titkok ads * fix: add hashing 256 to first name , last name and zip code * chore: address comments * chore: fix lint --- .../tiktok_ads/data/TikTokTrackV2.json | 36 +++++++++++++++++++ src/v0/destinations/tiktok_ads/util.js | 1 + src/v0/util/index.js | 5 +++ .../destinations/tiktok_ads/processor/data.ts | 17 +++++++++ 4 files changed, 59 insertions(+) diff --git a/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json b/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json index 2910f1b44c..ec66cf9ba2 100644 --- a/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json +++ b/src/v0/destinations/tiktok_ads/data/TikTokTrackV2.json @@ -126,5 +126,41 @@ "destKey": "user.user_agent", "sourceKeys": ["properties.context.user.userAgent", "context.userAgent"], "required": false + }, + { + "destKey": "user.first_name", + "sourceKeys": "firstName", + "metadata": { + "type": ["trim", "toLower", "hashToSha256"] + }, + "sourceFromGenericMap": true + }, + { + "destKey": "user.last_name", + "sourceKeys": "lastName", + "metadata": { + "type": ["trim", "toLower", "hashToSha256"] + }, + "sourceFromGenericMap": true + }, + { + "destKey": "user.city", + "sourceKeys": ["context.traits.city", "context.traits.address.city", "properties.city"] + }, + { + "destKey": "user.country", + "sourceKeys": ["context.traits.country", "context.traits.address.country", "properties.country"] + }, + { + "destKey": "user.state", + "sourceKeys": ["context.traits.address.state", "context.traits.state", "properties.state"] + }, + { + "destKey": "user.zip_code", + "sourceKeys": "zipcode", + "sourceFromGenericMap": true, + "metadata": { + "type": ["removeSpacesAndDashes", "hashToSha256"] + } } ] diff --git a/src/v0/destinations/tiktok_ads/util.js b/src/v0/destinations/tiktok_ads/util.js index 3d86ac69b7..5f86193531 100644 --- a/src/v0/destinations/tiktok_ads/util.js +++ b/src/v0/destinations/tiktok_ads/util.js @@ -23,6 +23,7 @@ const getContents = (message, getContentType = true) => { price: product.price, quantity: product.quantity, description: product.description, + brand: product.brand, }; contents.push(removeUndefinedAndNullValues(singleProduct)); }); diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 12b8d4dd7e..f30ccbbfd1 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -844,6 +844,11 @@ function formatValues(formattedVal, formattingType, typeFormat, integrationsObj) curFormattedVal = formattedVal.trim(); } }, + removeSpacesAndDashes: () => { + if (typeof formattedVal === 'string') { + curFormattedVal = formattedVal.replace(/ /g, '').replace(/-/g, ''); + } + }, }; if (formattingType in formattingFunctions) { diff --git a/test/integrations/destinations/tiktok_ads/processor/data.ts b/test/integrations/destinations/tiktok_ads/processor/data.ts index f459e68681..e6fe407381 100644 --- a/test/integrations/destinations/tiktok_ads/processor/data.ts +++ b/test/integrations/destinations/tiktok_ads/processor/data.ts @@ -4619,6 +4619,7 @@ export const data = [ content_name: 'Monopoly', price: 14, quantity: 1, + brand: 'brand_name', }, { content_type: 'product_group', @@ -6354,6 +6355,12 @@ export const data = [ context: { traits: { email: 'abc@xyz.com', + firstName: ' test', + lastName: 'user ', + country: 'dummycountry', + city: 'dummycity', + state: 'dummystate', + zip: ' US - 1234-', }, page: { url: 'http://demo.mywebsite.com/purchase', @@ -6474,6 +6481,7 @@ export const data = [ { price: 14, quantity: 1, + brand: 'adidas', content_category: 'Games', content_id: '123', content_name: 'Monopoly', @@ -6493,6 +6501,15 @@ export const data = [ referrer: 'http://demo.mywebsite.com', }, user: { + first_name: + '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', + last_name: + '04f8996da763b7a969b1028ee3007569eaf3a635486ddab211d512c85b9df8fb', + country: 'dummycountry', + zip_code: + '2a29b91aca86ff48c3defb1bbc2d33bf1da5ee5a235391322478fe7ff4503b77', + city: 'dummycity', + state: 'dummystate', email: 'ee278943de84e5d6243578ee1a1057bcce0e50daad9755f45dfa64b60b13bc5d', external_id: [ '3e0c7a51acd326b87f29596e38c22cbeb732df37bc5c8f5f524c14b55d3472db', From fbcdcd609888150efa0da33eec60a4cc7b436d06 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:40:35 +0530 Subject: [PATCH 075/201] feat: onboard cordial destination (#3581) * feat: onboard cordial destination * fix: remove email optin mapping --- src/cdk/v2/destinations/cordial/config.js | 34 +++ .../cordial/data/CordialIdentifyConfig.json | 11 + .../cordial/data/CordialTrackConfig.json | 21 ++ .../v2/destinations/cordial/procWorkflow.yaml | 106 +++++++++ .../v2/destinations/cordial/rtWorkflow.yaml | 31 +++ src/cdk/v2/destinations/cordial/utils.js | 30 +++ src/constants/destinationCanonicalNames.js | 1 + src/features.json | 3 +- src/v0/destinations/sendinblue/transform.js | 2 +- src/v0/destinations/sendinblue/util.js | 15 -- src/v0/util/index.js | 15 ++ .../destinations/cordial/common.ts | 90 ++++++++ .../destinations/cordial/network.ts | 71 ++++++ .../destinations/cordial/processor/data.ts | 4 + .../cordial/processor/identify.ts | 205 ++++++++++++++++++ .../destinations/cordial/processor/track.ts | 125 +++++++++++ .../cordial/processor/validation.ts | 50 +++++ .../destinations/cordial/router/data.ts | 134 ++++++++++++ 18 files changed, 931 insertions(+), 17 deletions(-) create mode 100644 src/cdk/v2/destinations/cordial/config.js create mode 100644 src/cdk/v2/destinations/cordial/data/CordialIdentifyConfig.json create mode 100644 src/cdk/v2/destinations/cordial/data/CordialTrackConfig.json create mode 100644 src/cdk/v2/destinations/cordial/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/cordial/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/cordial/utils.js create mode 100644 test/integrations/destinations/cordial/common.ts create mode 100644 test/integrations/destinations/cordial/network.ts create mode 100644 test/integrations/destinations/cordial/processor/data.ts create mode 100644 test/integrations/destinations/cordial/processor/identify.ts create mode 100644 test/integrations/destinations/cordial/processor/track.ts create mode 100644 test/integrations/destinations/cordial/processor/validation.ts create mode 100644 test/integrations/destinations/cordial/router/data.ts diff --git a/src/cdk/v2/destinations/cordial/config.js b/src/cdk/v2/destinations/cordial/config.js new file mode 100644 index 0000000000..74362eb442 --- /dev/null +++ b/src/cdk/v2/destinations/cordial/config.js @@ -0,0 +1,34 @@ +const { getMappingConfig } = require('../../../../v0/util'); + +const getCreateContactEndpoint = (config) => `${config.apiBaseUrl}/v2/contacts`; +const getUpdateContactEndpoint = (config, contactId, email) => { + if (contactId) { + return `${config.apiBaseUrl}/v2/contacts/${contactId}`; + } + return `${config.apiBaseUrl}/v2/contacts/email:${email}`; +}; + +const getEventsEndpoint = (config) => `${config.apiBaseUrl}/v2/contactactivities`; +const getContactEndpoint = getUpdateContactEndpoint; + +const CONFIG_CATEGORIES = { + IDENTIFY: { + name: 'CordialIdentifyConfig', + type: 'identify', + }, + TRACK: { + name: 'CordialTrackConfig', + type: 'track', + }, +}; + +const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname); + +module.exports = { + IDENTIFY_CONFIG: MAPPING_CONFIG[CONFIG_CATEGORIES.IDENTIFY.name], + TRACK_CONFIG: MAPPING_CONFIG[CONFIG_CATEGORIES.TRACK.name], + getCreateContactEndpoint, + getUpdateContactEndpoint, + getEventsEndpoint, + getContactEndpoint, +}; diff --git a/src/cdk/v2/destinations/cordial/data/CordialIdentifyConfig.json b/src/cdk/v2/destinations/cordial/data/CordialIdentifyConfig.json new file mode 100644 index 0000000000..71d6cf1e9e --- /dev/null +++ b/src/cdk/v2/destinations/cordial/data/CordialIdentifyConfig.json @@ -0,0 +1,11 @@ +[ + { + "destKey": "channels.email.address", + "sourceKeys": "emailOnly", + "sourceFromGenericMap": true + }, + { + "destKey": "channels.email.subscribeStatus", + "sourceKeys": ["traits.subscribeStatus", "context.traits.subscribeStatus"] + } +] diff --git a/src/cdk/v2/destinations/cordial/data/CordialTrackConfig.json b/src/cdk/v2/destinations/cordial/data/CordialTrackConfig.json new file mode 100644 index 0000000000..ddf74ce6b1 --- /dev/null +++ b/src/cdk/v2/destinations/cordial/data/CordialTrackConfig.json @@ -0,0 +1,21 @@ +[ + { + "destKey": "email", + "sourceKeys": "emailOnly", + "sourceFromGenericMap": true + }, + { + "destKey": "a", + "sourceKeys": "event", + "required": true + }, + { + "destKey": "properties", + "sourceKeys": "properties" + }, + { + "destKey": "ats", + "sourceKeys": "timestamp", + "sourceFromGenericMap": true + } +] diff --git a/src/cdk/v2/destinations/cordial/procWorkflow.yaml b/src/cdk/v2/destinations/cordial/procWorkflow.yaml new file mode 100644 index 0000000000..2c765afeb5 --- /dev/null +++ b/src/cdk/v2/destinations/cordial/procWorkflow.yaml @@ -0,0 +1,106 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - name: getHashFromArray + path: ../../../../v0/util + - name: getIntegrationsObj + path: ../../../../v0/util + - name: getDestinationExternalID + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: defaultRequestConfig + path: ../../../../v0/util + - name: base64Convertor + path: ../../../../v0/util + - name: constructPayload + path: ../../../../v0/util + - name: removeEmptyKey + path: ../../../../v0/util + - name: CommonUtils + path: ../../../../util/common + - path: ./utils + - path: ./config + +steps: + - name: checkIfProcessed + condition: .message.statusCode + template: | + $.batchMode ? .message.body.JSON : .message + onComplete: return + + - name: messageType + template: | + $.context.messageType = .message.type.toLowerCase(); + + - name: validateInput + template: | + let messageType = $.context.messageType; + $.assert(messageType, "message Type is not present. Aborting"); + $.assert(messageType in {{$.EventType.([.TRACK, .IDENTIFY])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting"); + $.assertConfig(.destination.Config.apiBaseUrl, "API Base URl is not present. Aborting"); + + - name: getContactId + template: | + $.getDestinationExternalID(.message,'cordialContactId'); + + - name: getContactEmail + template: | + .message.().({{{{$.getGenericPaths("email")}}}};); + + - name: buildIdentifyPayload + condition: $.context.messageType in [{{$.EventType.IDENTIFY}}] + steps: + - name: checkIfContactExists + template: | + $.checkIfContactExists(.destination.Config, $.outputs.getContactId, $.outputs.getContactEmail); + + - name: buildPayload + template: | + const integrationObj = $.getIntegrationsObj(.message, "cordial"); + let payload = $.constructPayload(.message, $.IDENTIFY_CONFIG); + const traits = .message.().( + {{{{$.getGenericPaths("traits")}}}}; + ); + payload = {...payload, ...traits}; + payload = payload{~["email", "subscribeStatus"]}; + $.context.payload = payload; + + - name: createContact + condition: $.outputs.buildIdentifyPayload.checkIfContactExists === false + template: | + $.context.endpoint = $.getCreateContactEndpoint(.destination.Config); + $.context.method = "POST"; + + - name: updateContact + condition: $.outputs.buildIdentifyPayload.checkIfContactExists === true + template: | + $.context.endpoint = $.getUpdateContactEndpoint( + .destination.Config, $.outputs.getContactId, $.outputs.getContactEmail); + $.context.method = "PUT"; + + - name: buildTrackPayload + condition: $.context.messageType in [{{$.EventType.TRACK}}] + template: | + let payload = $.constructPayload(.message, $.TRACK_CONFIG); + payload.cID = $.outputs.getContactId; + payload.cID ? payload = payload{~["email"]} : payload = payload{~["cID"]}; + $.context.payload = payload; + $.context.endpoint = $.getEventsEndpoint(.destination.Config); + $.context.method = "POST"; + + - name: buildResponseForProcessTransformation + template: | + const payload = $.context.payload; + const response = $.defaultRequestConfig(); + response.body.JSON = $.removeUndefinedAndNullValues($.removeEmptyKey(payload)); + response.endpoint = $.context.endpoint; + response.method = $.context.method; + response.headers = { + "Content-Type": "application/json", + "Authorization": "Basic " + $.base64Convertor(.destination.Config.apiKey + ":") + }; + response; diff --git a/src/cdk/v2/destinations/cordial/rtWorkflow.yaml b/src/cdk/v2/destinations/cordial/rtWorkflow.yaml new file mode 100644 index 0000000000..dd438a911c --- /dev/null +++ b/src/cdk/v2/destinations/cordial/rtWorkflow.yaml @@ -0,0 +1,31 @@ +bindings: + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + loopOverInput: true + + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "batchedRequest": ., + "batched": false, + "destination": ^[idx].destination, + "metadata": ^[idx].metadata[], + "statusCode": 200 + })[] + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + - name: finalPayload + template: | + [...$.outputs.successfulEvents, ...$.outputs.failedEvents] diff --git a/src/cdk/v2/destinations/cordial/utils.js b/src/cdk/v2/destinations/cordial/utils.js new file mode 100644 index 0000000000..1d0ab5789e --- /dev/null +++ b/src/cdk/v2/destinations/cordial/utils.js @@ -0,0 +1,30 @@ +const { getContactEndpoint, destType } = require('./config'); +const { handleHttpRequest } = require('../../../../adapters/network'); + +const checkIfContactExists = async (config, contactId, email) => { + const basicAuth = Buffer.from(`${config.apiKey}:`).toString('base64'); + const endpoint = getContactEndpoint(config, contactId, email); + const { processedResponse } = await handleHttpRequest( + 'get', + endpoint, + { + headers: { + Authorization: `Basic ${basicAuth}`, + }, + }, + { + destType, + feature: 'transformation', + requestMethod: 'GET', + endpointPath: contactId ? '/contacts' : '/contacts/email', + module: 'router', + }, + ); + + // eslint-disable-next-line no-underscore-dangle + return processedResponse.status === 200 && !!processedResponse.response?._id; +}; + +module.exports = { + checkIfContactExists, +}; diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index 915ac50b26..58bf35539a 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -175,6 +175,7 @@ const DestCanonicalNames = { ], emarsys: ['EMARSYS', 'Emarsys', 'emarsys'], wunderkind: ['wunderkind', 'Wunderkind', 'WUNDERKIND'], + cordial: ['cordial', 'Cordial', 'CORDIAL'], }; module.exports = { DestHandlerMap, DestCanonicalNames }; diff --git a/src/features.json b/src/features.json index ade8c90439..78737193a8 100644 --- a/src/features.json +++ b/src/features.json @@ -74,7 +74,8 @@ "EMARSYS": true, "KODDI": true, "WUNDERKIND": true, - "CLICKSEND": true + "CLICKSEND": true, + "CORDIAL": true }, "regulations": [ "BRAZE", diff --git a/src/v0/destinations/sendinblue/transform.js b/src/v0/destinations/sendinblue/transform.js index 7663672f12..9514359d02 100644 --- a/src/v0/destinations/sendinblue/transform.js +++ b/src/v0/destinations/sendinblue/transform.js @@ -13,6 +13,7 @@ const { defaultPutRequestConfig, getIntegrationsObj, ErrorMessage, + removeEmptyKey, } = require('../../util'); const { CONFIG_CATEGORIES, MAPPING_CONFIG, getUnlinkContactEndpoint } = require('./config'); const { @@ -21,7 +22,6 @@ const { validateEmailAndPhone, checkIfContactExists, prepareHeader, - removeEmptyKey, transformUserTraits, prepareTrackEventData, getListIds, diff --git a/src/v0/destinations/sendinblue/util.js b/src/v0/destinations/sendinblue/util.js index 9fded8e493..e4862ccc39 100644 --- a/src/v0/destinations/sendinblue/util.js +++ b/src/v0/destinations/sendinblue/util.js @@ -90,20 +90,6 @@ const checkIfContactExists = async (identifier, apiKey) => { return false; }; -/** - * Function to remove empty key ("") from payload - * @param {*} payload {"key1":"a","":{"id":1}} - * @returns // {"key1":"a"} - */ -const removeEmptyKey = (payload) => { - const rawPayload = payload; - const key = ''; - if (Object.prototype.hasOwnProperty.call(rawPayload, key)) { - delete rawPayload['']; - } - return rawPayload; -}; - /** * Function to remove duplicate traits from user traits * @param {*} userTraits {"location":"San Francisco","LOCATION":"San Francisco"} @@ -171,7 +157,6 @@ module.exports = { validateEmailAndPhone, checkIfContactExists, prepareHeader, - removeEmptyKey, transformUserTraits, prepareTrackEventData, getListIds, diff --git a/src/v0/util/index.js b/src/v0/util/index.js index f30ccbbfd1..dc06bcc43a 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -171,6 +171,20 @@ const isDefinedNotNullNotEmpty = (value) => const removeUndefinedNullEmptyExclBoolInt = (obj) => lodash.pickBy(obj, isDefinedNotNullNotEmpty); +/** + * Function to remove empty key ("") from payload + * @param {*} payload {"key1":"a","":{"id":1}} + * @returns // {"key1":"a"} + */ +const removeEmptyKey = (payload) => { + const rawPayload = payload; + const key = ''; + if (Object.prototype.hasOwnProperty.call(rawPayload, key)) { + delete rawPayload['']; + } + return rawPayload; +}; + /** * Recursively removes undefined, null, empty objects, and empty arrays from the given object at all levels. * @param {*} obj @@ -2376,4 +2390,5 @@ module.exports = { removeDuplicateMetadata, combineBatchRequestsWithSameJobIds, validateEventAndLowerCaseConversion, + removeEmptyKey, }; diff --git a/test/integrations/destinations/cordial/common.ts b/test/integrations/destinations/cordial/common.ts new file mode 100644 index 0000000000..1ebd0db34b --- /dev/null +++ b/test/integrations/destinations/cordial/common.ts @@ -0,0 +1,90 @@ +import { Destination } from '../../../../src/types'; + +const destType = 'cordial'; +const destTypeInUpperCase = 'CORDIAL'; +const displayName = 'Cordial'; +const destination: Destination = { + Config: { + apiBaseUrl: 'https://abc.example.com', + apiKey: 'test-api-key', + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', +}; +const traits = { + email: 'johndoe@example.com', + first_name: 'John', + last_name: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pin_code: '123456', + }, + subscribeStatus: 'subscribed', +}; +const endpoint = 'https://abc.example.com/v2/contacts'; +const updateContactEmailEndpoint = 'https://abc.example.com/v2/contacts/email:johndoe@example.com'; +const updateContactIdEndpoint = 'https://abc.example.com/v2/contacts/6690fe3655e334d6270287b5'; +const eventsEndpoint = 'https://abc.example.com/v2/contactactivities'; +const context = { + externalId: [ + { + type: 'cordialContactId', + id: '6690fe3655e334d6270287b5', + }, + ], +}; +const headers = { + 'Content-Type': 'application/json', + Authorization: 'Basic dGVzdC1hcGkta2V5Og==', +}; +const properties = { + product_id: '622c6f5d5cf86a4c77358033', + sku: '8472-998-0112', + category: 'Games', + name: 'Cones of Dunshire', + brand: 'Wyatt Games', + variant: 'expansion pack', + price: 49.99, + quantity: 5, + coupon: 'PREORDER15', + currency: 'USD', + position: 1, + url: 'https://www.website.com/product/path', + image_url: 'https://www.website.com/product/path.webp', + key1: 'value1', +}; +const processorInstrumentationErrorStatTags = { + destType: destTypeInUpperCase, + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', +}; + +export { + destType, + destination, + traits, + endpoint, + updateContactEmailEndpoint, + updateContactIdEndpoint, + eventsEndpoint, + context, + headers, + properties, + processorInstrumentationErrorStatTags, +}; diff --git a/test/integrations/destinations/cordial/network.ts b/test/integrations/destinations/cordial/network.ts new file mode 100644 index 0000000000..9cc6f42408 --- /dev/null +++ b/test/integrations/destinations/cordial/network.ts @@ -0,0 +1,71 @@ +import { destination } from './common'; +export const networkCallsData = [ + { + httpReq: { + url: `${destination.Config.apiBaseUrl}/v2/contacts/email:johndoe@example.com`, + headers: { + Authorization: 'Basic dGVzdC1hcGkta2V5Og==', + }, + method: 'GET', + }, + httpRes: { + data: { + _id: '6690fe3655e334d6270287b5', + attributes: { + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + cID: '6690fe3655e334d6270287b5', + }, + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + }, + status: 200, + statusText: 'Ok', + }, + }, + { + httpReq: { + url: `${destination.Config.apiBaseUrl}/v2/contacts/6690fe3655e334d6270287b5`, + headers: { + Authorization: 'Basic dGVzdC1hcGkta2V5Og==', + }, + method: 'GET', + }, + httpRes: { + data: { + _id: '6690fe3655e334d6270287b5', + attributes: { + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + cID: '6690fe3655e334d6270287b5', + }, + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + }, + status: 200, + statusText: 'Ok', + }, + }, +]; diff --git a/test/integrations/destinations/cordial/processor/data.ts b/test/integrations/destinations/cordial/processor/data.ts new file mode 100644 index 0000000000..5c89c89a08 --- /dev/null +++ b/test/integrations/destinations/cordial/processor/data.ts @@ -0,0 +1,4 @@ +import { identify } from './identify'; +import { track } from './track'; +import { validation } from './validation'; +export const data = [...identify, ...track, ...validation]; diff --git a/test/integrations/destinations/cordial/processor/identify.ts b/test/integrations/destinations/cordial/processor/identify.ts new file mode 100644 index 0000000000..074852b199 --- /dev/null +++ b/test/integrations/destinations/cordial/processor/identify.ts @@ -0,0 +1,205 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata, transformResultBuilder } from '../../../testUtils'; +import { + destType, + destination, + traits, + headers, + endpoint, + updateContactEmailEndpoint, + updateContactIdEndpoint, + context, +} from '../common'; + +export const identify: ProcessorTestData[] = [ + { + id: 'cordial-identify-test-1', + name: destType, + description: 'Identify call to create contact', + scenario: 'Framework+Business', + successCriteria: 'Response should contain all the mapping and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits: { ...traits, email: 'abc@example.com' }, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint, + headers, + JSON: { + channels: { + email: { + address: 'abc@example.com', + subscribeStatus: 'subscribed', + }, + }, + first_name: 'John', + last_name: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pin_code: '123456', + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'cordial-identify-test-2', + name: destType, + description: 'Identify call to update contact using email', + scenario: 'Framework+Business', + successCriteria: 'Response should contain all the mapping and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'PUT', + userId: '', + endpoint: updateContactEmailEndpoint, + headers, + JSON: { + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'subscribed', + }, + }, + first_name: 'John', + last_name: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pin_code: '123456', + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'cordial-identify-test-3', + name: destType, + description: 'Identify call to update contact using contact id', + scenario: 'Framework+Business', + successCriteria: 'Response should contain all the mapping and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits, + integrations: { + All: true, + }, + context, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'PUT', + userId: '', + endpoint: updateContactIdEndpoint, + headers, + JSON: { + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'subscribed', + }, + }, + first_name: 'John', + last_name: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pin_code: '123456', + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/cordial/processor/track.ts b/test/integrations/destinations/cordial/processor/track.ts new file mode 100644 index 0000000000..3e7a560a52 --- /dev/null +++ b/test/integrations/destinations/cordial/processor/track.ts @@ -0,0 +1,125 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata, transformResultBuilder } from '../../../testUtils'; +import { + destType, + destination, + traits, + headers, + eventsEndpoint, + context, + properties, +} from '../common'; + +export const track: ProcessorTestData[] = [ + { + id: 'cordial-track-test-1', + name: destType, + description: 'Track event with exiting contact using email', + scenario: 'Framework+Business', + successCriteria: 'Response should contain all the mapping and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + userId: 'userId123', + anonymousId: 'anonId123', + event: 'test event', + properties, + traits, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint: eventsEndpoint, + headers, + JSON: { + a: 'test event', + email: 'johndoe@example.com', + ats: '2024-03-04T15:32:56.409Z', + properties, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'cordial-track-test-2', + name: destType, + description: 'Track event with existing contact using contact id', + scenario: 'Framework+Business', + successCriteria: 'Response should contain all the mapping and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + userId: 'userId123', + anonymousId: 'anonId123', + event: 'test event', + properties, + traits, + context, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint: eventsEndpoint, + headers, + JSON: { + a: 'test event', + cID: '6690fe3655e334d6270287b5', + ats: '2024-03-04T15:32:56.409Z', + properties, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/cordial/processor/validation.ts b/test/integrations/destinations/cordial/processor/validation.ts new file mode 100644 index 0000000000..a764b79443 --- /dev/null +++ b/test/integrations/destinations/cordial/processor/validation.ts @@ -0,0 +1,50 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata } from '../../../testUtils'; +import { destType, destination, processorInstrumentationErrorStatTags } from '../common'; + +export const validation: ProcessorTestData[] = [ + { + id: 'cordial-validation-test-2', + name: destType, + description: 'Unsupported message type -> group', + scenario: 'Framework', + successCriteria: 'Instrumentation Error for Unsupported message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'group', + userId: 'userId123', + channel: 'mobile', + anonymousId: 'anon_123', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + metadata: generateMetadata(1), + statTags: processorInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/cordial/router/data.ts b/test/integrations/destinations/cordial/router/data.ts new file mode 100644 index 0000000000..43d366d873 --- /dev/null +++ b/test/integrations/destinations/cordial/router/data.ts @@ -0,0 +1,134 @@ +import { generateMetadata } from '../../../testUtils'; +import { + destType, + destination, + traits, + properties, + headers, + eventsEndpoint, + updateContactEmailEndpoint, +} from '../common'; + +export const data = [ + { + id: 'cordial-router-test-1', + name: destType, + description: 'Basic Router Test to test multiple payloads', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + destination, + }, + { + message: { + type: 'track', + userId: 'userId123', + anonymousId: 'anonId123', + event: 'test event', + properties, + traits, + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(2), + destination, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + JSON: { + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'subscribed', + }, + }, + first_name: 'John', + last_name: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pin_code: '123456', + }, + }, + FORM: {}, + }, + files: {}, + endpoint: updateContactEmailEndpoint, + headers, + version: '1', + params: {}, + type: 'REST', + method: 'PUT', + }, + metadata: [generateMetadata(1)], + batched: false, + statusCode: 200, + destination, + }, + { + batchedRequest: { + body: { + XML: {}, + JSON_ARRAY: {}, + JSON: { + a: 'test event', + email: 'johndoe@example.com', + ats: '2024-03-04T15:32:56.409Z', + properties, + }, + FORM: {}, + }, + files: {}, + endpoint: eventsEndpoint, + headers, + version: '1', + params: {}, + type: 'REST', + method: 'POST', + }, + metadata: [generateMetadata(2)], + batched: false, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, +]; From e357141d22e5296b6d1cda2e763ac24abfcb66e6 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:10:05 +0530 Subject: [PATCH 076/201] feat: braze source event mapping (#3527) * feat: braze source event mapping * feat: delete unnecessary code * fix: removing the duplicate code from v0 route * fix: shortened the test cases --- src/v0/sources/braze/eventMapping.json | 1 - src/{v0 => v1}/sources/braze/ignore.json | 0 src/{v0 => v1}/sources/braze/mapping.json | 0 src/{v0 => v1}/sources/braze/transform.js | 29 +- test/__tests__/braze_source.test.js | 30 - test/__tests__/data/braze_source_input.json | 243 ---- test/__tests__/data/braze_source_output.json | 288 ---- test/integrations/sources/braze/common.ts | 30 + test/integrations/sources/braze/data.ts | 1252 ++++++++++++++++++ 9 files changed, 1297 insertions(+), 576 deletions(-) delete mode 100644 src/v0/sources/braze/eventMapping.json rename src/{v0 => v1}/sources/braze/ignore.json (100%) rename src/{v0 => v1}/sources/braze/mapping.json (100%) rename src/{v0 => v1}/sources/braze/transform.js (79%) delete mode 100644 test/__tests__/braze_source.test.js delete mode 100644 test/__tests__/data/braze_source_input.json delete mode 100644 test/__tests__/data/braze_source_output.json create mode 100644 test/integrations/sources/braze/common.ts create mode 100644 test/integrations/sources/braze/data.ts diff --git a/src/v0/sources/braze/eventMapping.json b/src/v0/sources/braze/eventMapping.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/src/v0/sources/braze/eventMapping.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/src/v0/sources/braze/ignore.json b/src/v1/sources/braze/ignore.json similarity index 100% rename from src/v0/sources/braze/ignore.json rename to src/v1/sources/braze/ignore.json diff --git a/src/v0/sources/braze/mapping.json b/src/v1/sources/braze/mapping.json similarity index 100% rename from src/v0/sources/braze/mapping.json rename to src/v1/sources/braze/mapping.json diff --git a/src/v0/sources/braze/transform.js b/src/v1/sources/braze/transform.js similarity index 79% rename from src/v0/sources/braze/transform.js rename to src/v1/sources/braze/transform.js index e3d7200023..771c5887b3 100644 --- a/src/v0/sources/braze/transform.js +++ b/src/v1/sources/braze/transform.js @@ -3,17 +3,15 @@ const get = require('get-value'); const path = require('path'); const fs = require('fs'); const { TransformationError } = require('@rudderstack/integrations-lib'); -const { formatTimeStamp, removeUndefinedAndNullValues } = require('../../util'); -const Message = require('../message'); +const { + formatTimeStamp, + removeUndefinedAndNullValues, + getHashFromArray, +} = require('../../../v0/util'); +const Message = require('../../../v0/sources/message'); // import mapping json using JSON.parse to preserve object key order const mapping = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8')); - -// if we need to map braze event name to something else. blank as of now -const eventNameMap = JSON.parse( - fs.readFileSync(path.resolve(__dirname, './eventMapping.json'), 'utf-8'), -); - // ignored properties // to be deleted from the field `event.properties` as already mapped // using mapping.json @@ -21,7 +19,7 @@ const ignoredProperties = JSON.parse( fs.readFileSync(path.resolve(__dirname, './ignore.json'), 'utf-8'), ); -const processEvent = (event) => { +const processEvent = (event, eventMapping) => { const messageType = 'track'; if (event.event_type) { @@ -32,7 +30,7 @@ const processEvent = (event) => { message.setEventType(messageType); // set event name - const eventName = eventNameMap[eventType] || eventType; + const eventName = eventMapping[eventType] || eventType; message.setEventName(eventName); // map event properties based on mapping.json @@ -68,14 +66,17 @@ const processEvent = (event) => { throw new TransformationError('Unknown event type from Braze'); }; -const process = (events) => { +const process = (inputEvent) => { + const { event, source } = inputEvent; + const { customMapping } = source.Config; + const eventMapping = getHashFromArray(customMapping, 'from', 'to', false); const responses = []; // Ref: Custom Currents Connector Partner Dev Documentation.pdf - const eventList = Array.isArray(events) && events.length > 0 ? events[0].events : events.events; - eventList.forEach((event) => { + const eventList = Array.isArray(event) && event.length > 0 ? event[0].events : event.events; + eventList.forEach((singleEvent) => { try { - const resp = processEvent(event); + const resp = processEvent(singleEvent, eventMapping); if (resp) { responses.push(removeUndefinedAndNullValues(resp)); } diff --git a/test/__tests__/braze_source.test.js b/test/__tests__/braze_source.test.js deleted file mode 100644 index 009b650578..0000000000 --- a/test/__tests__/braze_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "braze"; -const name = "Braze"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, () => { - try { - const output = transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/data/braze_source_input.json b/test/__tests__/data/braze_source_input.json deleted file mode 100644 index aef068229b..0000000000 --- a/test/__tests__/data/braze_source_input.json +++ /dev/null @@ -1,243 +0,0 @@ -[ - [ - { - "events": [ - { - "event_type": "users.messages.inappmessage.Click", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1607988752, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "platform": "android", - "os_version": "Android (N)", - "device_model": "Nexus 5X", - "button_id": "0", - "send_id": "f123456789abcdef01234567" - } - }, - { - "event_type": "users.messages.pushnotification.Send", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "platform": "ios", - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "send_id": "f123456789abcdef01234567", - "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" - } - }, - { - "event_type": "users.messages.email.Open", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "timezone": "America/Chicago" - }, - "properties": { - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "dispatch_id": "12345qwert", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "email_address": "test@test.com", - "send_id": "f123456789abcdef01234567", - "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" - } - }, - { - "event_type": "users.messages.sms.Delivery", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "timezone": "America/Chicago" - }, - "properties": { - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "dispatch_id": "12345qwert", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "to_phone_number": "+16462345678", - "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", - "from_phone_number": "+12123470922" - } - }, - { - "event_type": "users.messages.inappmessage.Click", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Campaign", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "platform": "android", - "os_version": "Android (N)", - "device_model": "Nexus 5X", - "button_id": "0", - "send_id": "f123456789abcdef01234567" - } - }, - { - "event_type": "users.messages.pushnotification.Send", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "platform": "ios", - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Campaign", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "send_id": "f123456789abcdef01234567", - "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" - } - }, - { - "event_type": "users.messages.email.Open", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "timezone": "America/Chicago" - }, - "properties": { - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Canvas", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "dispatch_id": "12345qwert", - "email_address": "test@test.com", - "send_id": "f123456789abcdef01234567", - "user_agent": "Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36" - } - }, - { - "event_type": "users.messages.sms.Delivery", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "timezone": "America/Chicago" - }, - "properties": { - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "MyCoolCanvas", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "dispatch_id": "12345qwert", - "to_phone_number": "+16462345678", - "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", - "from_phone_number": "+12123470922" - } - }, - { - "event_type": "users.behaviors.CustomEvent", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "platform": "ios", - "os_version": "iOS10.3.1", - "device_model": "iPhone7Plus", - "name": "customeventname", - "ad_id": "01234567-89ab-cdef-0123-456789abcdef", - "ad_id_type": "roku_ad_id", - "ad_tracking_enabled": true, - "custom_properties": { - "stringpropertyname": "a", - "numberpropertyname": 1, - "listpropertyname": ["a", "b"] - } - } - }, - { - "event_type": "users.behaviors.Purchase", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210", - "timezone": "America/Chicago" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "platform": "ios", - "os_version": "iOS10.3.1", - "device_model": "iPhone7Plus", - "product_id": "1234", - "price": 12.34, - "currency": "AED", - "ad_id": "01234567-89ab-cdef-0123-456789abcdef", - "ad_id_type": "roku_ad_id", - "ad_tracking_enabled": true, - "purchase_properties": { - "stringpropertyname": "a", - "numberpropertyname": 1, - "listpropertyname": ["a", "b"] - } - } - }, - { - "event_type": "users.behaviors.app.SessionStart", - "id": "a1234567-89ab-cdef-0123-456789abcdef", - "time": 1477502783, - "user": { - "user_id": "0123456789abcdef01234567", - "external_user_id": "user_id", - "device_id": "fedcba87-6543-210f-edc-ba9876543210" - }, - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "platform": "ios", - "os_version": "iOS10.3.1", - "device_model": "iPhone7Plus", - "session_id": "b1234567-89ab-cdef-0123-456789abcdef" - } - } - ] - } - ] -] diff --git a/test/__tests__/data/braze_source_output.json b/test/__tests__/data/braze_source_output.json deleted file mode 100644 index b4e61885fe..0000000000 --- a/test/__tests__/data/braze_source_output.json +++ /dev/null @@ -1,288 +0,0 @@ -[ - [ - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { - "id": "fedcba87-6543-210f-edc-ba9876543210", - "model": "Nexus 5X" - }, - "timezone": "America/Chicago", - "os": { "version": "Android (N)", "name": "android" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.inappmessage.Click", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "button_id": "0", - "send_id": "f123456789abcdef01234567" - }, - "timestamp": "2020-12-14T23:32:32.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { "id": "fedcba87-6543-210f-edc-ba9876543210" }, - "timezone": "America/Chicago", - "os": { "name": "ios" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.pushnotification.Send", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "send_id": "f123456789abcdef01234567", - "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "timezone": "America/Chicago", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.email.Open", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "traits": { "email": "test@test.com" }, - "properties": { - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "dispatch_id": "12345qwert", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "send_id": "f123456789abcdef01234567" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "timezone": "America/Chicago", - "integration": { "name": "Braze" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.sms.Delivery", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "traits": { "phone": "+16462345678" }, - "properties": { - "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", - "campaign_name": "Test Campaign", - "dispatch_id": "12345qwert", - "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", - "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", - "from_phone_number": "+12123470922" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { - "id": "fedcba87-6543-210f-edc-ba9876543210", - "model": "Nexus 5X" - }, - "timezone": "America/Chicago", - "os": { "version": "Android (N)", "name": "android" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.inappmessage.Click", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Campaign", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "button_id": "0", - "send_id": "f123456789abcdef01234567" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { "id": "fedcba87-6543-210f-edc-ba9876543210" }, - "timezone": "America/Chicago", - "os": { "name": "ios" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.pushnotification.Send", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Campaign", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "send_id": "f123456789abcdef01234567", - "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "timezone": "America/Chicago", - "userAgent": "Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36" - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.email.Open", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "traits": { "email": "test@test.com" }, - "properties": { - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "My Cool Canvas", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "dispatch_id": "12345qwert", - "send_id": "f123456789abcdef01234567" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "timezone": "America/Chicago", - "integration": { "name": "Braze" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.messages.sms.Delivery", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "traits": { "phone": "+16462345678" }, - "properties": { - "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", - "canvas_name": "MyCoolCanvas", - "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", - "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", - "dispatch_id": "12345qwert", - "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", - "from_phone_number": "+12123470922" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { - "id": "fedcba87-6543-210f-edc-ba9876543210", - "model": "iPhone7Plus", - "advertisingId": "01234567-89ab-cdef-0123-456789abcdef", - "adTrackingEnabled": true - }, - "timezone": "America/Chicago", - "os": { "version": "iOS10.3.1", "name": "ios" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.behaviors.CustomEvent", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "name": "customeventname", - "ad_id_type": "roku_ad_id", - "custom_properties": { - "stringpropertyname": "a", - "numberpropertyname": 1, - "listpropertyname": ["a", "b"] - } - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { - "id": "fedcba87-6543-210f-edc-ba9876543210", - "model": "iPhone7Plus", - "advertisingId": "01234567-89ab-cdef-0123-456789abcdef", - "adTrackingEnabled": true - }, - "timezone": "America/Chicago", - "os": { "version": "iOS10.3.1", "name": "ios" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.behaviors.Purchase", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "product_id": "1234", - "price": 12.34, - "currency": "AED", - "ad_id_type": "roku_ad_id", - "purchase_properties": { - "stringpropertyname": "a", - "numberpropertyname": 1, - "listpropertyname": ["a", "b"] - } - }, - "timestamp": "2016-10-26T17:26:23.000Z" - }, - { - "context": { - "library": { "name": "unknown", "version": "unknown" }, - "integration": { "name": "Braze" }, - "device": { - "id": "fedcba87-6543-210f-edc-ba9876543210", - "model": "iPhone7Plus" - }, - "os": { "version": "iOS10.3.1", "name": "ios" } - }, - "integrations": { "Braze": false }, - "type": "track", - "event": "users.behaviors.app.SessionStart", - "messageId": "a1234567-89ab-cdef-0123-456789abcdef", - "anonymousId": "0123456789abcdef01234567", - "userId": "user_id", - "properties": { - "app_id": "01234567-89ab-cdef-0123-456789abcdef", - "session_id": "b1234567-89ab-cdef-0123-456789abcdef" - }, - "timestamp": "2016-10-26T17:26:23.000Z" - } - ] -] diff --git a/test/integrations/sources/braze/common.ts b/test/integrations/sources/braze/common.ts new file mode 100644 index 0000000000..a8271e3e9c --- /dev/null +++ b/test/integrations/sources/braze/common.ts @@ -0,0 +1,30 @@ +export const commonSourceDefinition = { + ID: '1lh9senY3vrBg4JQXswWzyYBTOO', + Name: 'Braze', + Category: 'webhook', + Type: 'cloud', +}; + +export const DgSourceTrackingPlanConfig = { + sourceId: '', + version: 0, + config: null, + mergedConfig: null, + deleted: false, + trackingPlan: { + id: '', + version: 0, + }, +}; + +export const commonSourceConfigProperties = { + Enabled: true, + WorkspaceID: '2hSS1hZ8kuCpUZAAYsQucAFdob9', + Destinations: null, + WriteKey: '2hgvYykpvMaE5Eg47Au8RWC9Yza', + DgSourceTrackingPlanConfig: DgSourceTrackingPlanConfig, + Transient: false, + GeoEnrichment: { + Enabled: false, + }, +}; diff --git a/test/integrations/sources/braze/data.ts b/test/integrations/sources/braze/data.ts new file mode 100644 index 0000000000..e140bbc030 --- /dev/null +++ b/test/integrations/sources/braze/data.ts @@ -0,0 +1,1252 @@ +import { commonSourceConfigProperties, commonSourceDefinition } from './common'; + +export const data = [ + { + name: 'braze', + description: 'event mapping done in UI', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.inappmessage.Click', + properties: { + device_model: 'samsung', + }, + user: { + user_id: 'user_id', + external_user_id: 'externalUserId', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'users.messages.inappmessage.Click', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: 'user_id', + context: { + device: { + model: 'samsung', + }, + integration: { + name: 'Braze', + }, + library: { + name: 'unknown', + version: 'unknown', + }, + }, + event: 'In-App Message Clicked', + integrations: { + Braze: false, + }, + type: 'track', + userId: 'externalUserId', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'The event is not mapped in the UI', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.inappmessage.Click', + properties: { + device_model: 'samsung', + }, + user: { + user_id: 'user_id', + external_user_id: 'externalUserId', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: 'user_id', + context: { + device: { + model: 'samsung', + }, + integration: { + name: 'Braze', + }, + library: { + name: 'unknown', + version: 'unknown', + }, + }, + event: 'users.messages.inappmessage.Click', + integrations: { + Braze: false, + }, + type: 'track', + userId: 'externalUserId', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.inappmessage.Click event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.inappmessage.Click', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1607988752, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + platform: 'android', + os_version: 'Android (N)', + device_model: 'Nexus 5X', + button_id: '0', + send_id: 'f123456789abcdef01234567', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { + id: 'fedcba87-6543-210f-edc-ba9876543210', + model: 'Nexus 5X', + }, + timezone: 'America/Chicago', + os: { version: 'Android (N)', name: 'android' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.inappmessage.Click', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + button_id: '0', + send_id: 'f123456789abcdef01234567', + }, + timestamp: '2020-12-14T23:32:32.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.pushnotification.Send event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.pushnotification.Send', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + platform: 'ios', + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + send_id: 'f123456789abcdef01234567', + dispatch_id: '01234567-89ab-cdef-0123-456789abcdef', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { id: 'fedcba87-6543-210f-edc-ba9876543210' }, + timezone: 'America/Chicago', + os: { name: 'ios' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.pushnotification.Send', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + send_id: 'f123456789abcdef01234567', + dispatch_id: '01234567-89ab-cdef-0123-456789abcdef', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.email.Open event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.email.Open', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + timezone: 'America/Chicago', + }, + properties: { + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + dispatch_id: '12345qwert', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + email_address: 'test@test.com', + send_id: 'f123456789abcdef01234567', + user_agent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + timezone: 'America/Chicago', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36', + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.email.Open', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + traits: { email: 'test@test.com' }, + properties: { + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + dispatch_id: '12345qwert', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + send_id: 'f123456789abcdef01234567', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.sms.Delivery send', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.sms.Delivery', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + timezone: 'America/Chicago', + }, + properties: { + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + dispatch_id: '12345qwert', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + to_phone_number: '+16462345678', + subscription_group_id: '41234567-89ab-cdef-0123-456789abcdef', + from_phone_number: '+12123470922', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + timezone: 'America/Chicago', + integration: { name: 'Braze' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.sms.Delivery', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + traits: { phone: '+16462345678' }, + properties: { + campaign_id: '11234567-89ab-cdef-0123-456789abcdef', + campaign_name: 'Test Campaign', + dispatch_id: '12345qwert', + message_variation_id: 'c1234567-89ab-cdef-0123-456789abcdef', + subscription_group_id: '41234567-89ab-cdef-0123-456789abcdef', + from_phone_number: '+12123470922', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.inappmessage.Click event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.inappmessage.Click', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Campaign', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + platform: 'android', + os_version: 'Android (N)', + device_model: 'Nexus 5X', + button_id: '0', + send_id: 'f123456789abcdef01234567', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { + id: 'fedcba87-6543-210f-edc-ba9876543210', + model: 'Nexus 5X', + }, + timezone: 'America/Chicago', + os: { version: 'Android (N)', name: 'android' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.inappmessage.Click', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Campaign', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + button_id: '0', + send_id: 'f123456789abcdef01234567', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.pushnotification.Send event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.pushnotification.Send', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + platform: 'ios', + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Campaign', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + send_id: 'f123456789abcdef01234567', + dispatch_id: '01234567-89ab-cdef-0123-456789abcdef', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { id: 'fedcba87-6543-210f-edc-ba9876543210' }, + timezone: 'America/Chicago', + os: { name: 'ios' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.pushnotification.Send', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Campaign', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + send_id: 'f123456789abcdef01234567', + dispatch_id: '01234567-89ab-cdef-0123-456789abcdef', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.email.Open event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.email.Open', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + timezone: 'America/Chicago', + }, + properties: { + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Canvas', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + dispatch_id: '12345qwert', + email_address: 'test@test.com', + send_id: 'f123456789abcdef01234567', + user_agent: + 'Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + timezone: 'America/Chicago', + userAgent: + 'Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36', + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.email.Open', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + traits: { email: 'test@test.com' }, + properties: { + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'My Cool Canvas', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + dispatch_id: '12345qwert', + send_id: 'f123456789abcdef01234567', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.messages.sms.Delivery event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.messages.sms.Delivery', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + timezone: 'America/Chicago', + }, + properties: { + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'MyCoolCanvas', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + dispatch_id: '12345qwert', + to_phone_number: '+16462345678', + subscription_group_id: '41234567-89ab-cdef-0123-456789abcdef', + from_phone_number: '+12123470922', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + timezone: 'America/Chicago', + integration: { name: 'Braze' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.messages.sms.Delivery', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + traits: { phone: '+16462345678' }, + properties: { + canvas_id: '11234567-89ab-cdef-0123-456789abcdef', + canvas_name: 'MyCoolCanvas', + canvas_variation_id: '31234567-89ab-cdef-0123-456789abcdef', + canvas_step_id: '41234567-89ab-cdef-0123-456789abcdef', + dispatch_id: '12345qwert', + subscription_group_id: '41234567-89ab-cdef-0123-456789abcdef', + from_phone_number: '+12123470922', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.behaviors.CustomEvent any custom event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.behaviors.CustomEvent', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + platform: 'ios', + os_version: 'iOS10.3.1', + device_model: 'iPhone7Plus', + name: 'customeventname', + ad_id: '01234567-89ab-cdef-0123-456789abcdef', + ad_id_type: 'roku_ad_id', + ad_tracking_enabled: true, + custom_properties: { + stringpropertyname: 'a', + numberpropertyname: 1, + listpropertyname: ['a', 'b'], + }, + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { + id: 'fedcba87-6543-210f-edc-ba9876543210', + model: 'iPhone7Plus', + advertisingId: '01234567-89ab-cdef-0123-456789abcdef', + adTrackingEnabled: true, + }, + timezone: 'America/Chicago', + os: { version: 'iOS10.3.1', name: 'ios' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.behaviors.CustomEvent', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + name: 'customeventname', + ad_id_type: 'roku_ad_id', + custom_properties: { + stringpropertyname: 'a', + numberpropertyname: 1, + listpropertyname: ['a', 'b'], + }, + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.behaviors.Purchase event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.behaviors.Purchase', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + timezone: 'America/Chicago', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + platform: 'ios', + os_version: 'iOS10.3.1', + device_model: 'iPhone7Plus', + product_id: '1234', + price: 12.34, + currency: 'AED', + ad_id: '01234567-89ab-cdef-0123-456789abcdef', + ad_id_type: 'roku_ad_id', + ad_tracking_enabled: true, + purchase_properties: { + stringpropertyname: 'a', + numberpropertyname: 1, + listpropertyname: ['a', 'b'], + }, + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { + id: 'fedcba87-6543-210f-edc-ba9876543210', + model: 'iPhone7Plus', + advertisingId: '01234567-89ab-cdef-0123-456789abcdef', + adTrackingEnabled: true, + }, + timezone: 'America/Chicago', + os: { version: 'iOS10.3.1', name: 'ios' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.behaviors.Purchase', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + product_id: '1234', + price: 12.34, + currency: 'AED', + ad_id_type: 'roku_ad_id', + purchase_properties: { + stringpropertyname: 'a', + numberpropertyname: 1, + listpropertyname: ['a', 'b'], + }, + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'braze', + description: 'users.behaviors.app.SessionStart event', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + events: [ + { + event_type: 'users.behaviors.app.SessionStart', + id: 'a1234567-89ab-cdef-0123-456789abcdef', + time: 1477502783, + user: { + user_id: '0123456789abcdef01234567', + external_user_id: 'user_id', + device_id: 'fedcba87-6543-210f-edc-ba9876543210', + }, + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + platform: 'ios', + os_version: 'iOS10.3.1', + device_model: 'iPhone7Plus', + session_id: 'b1234567-89ab-cdef-0123-456789abcdef', + }, + }, + ], + }, + source: { + ID: '2hgvYyU5TYaFvVzBge6tF2UKoeG', + OriginalID: '', + Name: 'Braze source', + SourceDefinition: commonSourceDefinition, + Config: { + customMapping: [ + { + from: 'randomEvent', + to: 'In-App Message Clicked', + }, + ], + }, + ...commonSourceConfigProperties, + }, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Braze' }, + device: { + id: 'fedcba87-6543-210f-edc-ba9876543210', + model: 'iPhone7Plus', + }, + os: { version: 'iOS10.3.1', name: 'ios' }, + }, + integrations: { Braze: false }, + type: 'track', + event: 'users.behaviors.app.SessionStart', + messageId: 'a1234567-89ab-cdef-0123-456789abcdef', + anonymousId: '0123456789abcdef01234567', + userId: 'user_id', + properties: { + app_id: '01234567-89ab-cdef-0123-456789abcdef', + session_id: 'b1234567-89ab-cdef-0123-456789abcdef', + }, + timestamp: '2016-10-26T17:26:23.000Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; From 20aa7f35e13ad89e8a43fbbb743df73b0c103975 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:14:44 +0530 Subject: [PATCH 077/201] feat: onboarding new destination zoho (#3555) * feat: initial commit * feat: adding unit test for utils * feat: adding router tests * feat: editing batching logic * feat: adding data delivery test cases * fix: fixing the endpoint bugs * feat: zoho record deletion feature (#3566) * chore: binding issue code * fix: searchRecordId function * fix: adding record deletion implementation * fix: adding record deletion test cases --------- Co-authored-by: Dilip Kola * chore: adding debug logs * fix: code refactor * fix: shortening the test cases * fix: error message edit * chore: missing comma in features file * fix: adding validation for inconsistent module choice * fix: extra fields and logs removed --------- Co-authored-by: Dilip Kola --- src/cdk/v2/destinations/zoho/config.js | 61 ++ src/cdk/v2/destinations/zoho/rtWorkflow.yaml | 38 + .../v2/destinations/zoho/transformRecord.js | 338 ++++++++ src/cdk/v2/destinations/zoho/utils.js | 168 ++++ src/cdk/v2/destinations/zoho/utils.test.js | 245 ++++++ src/features.json | 1 + src/v1/destinations/zoho/networkHandler.js | 141 ++++ test/integrations/component.test.ts | 4 +- test/integrations/destinations/zoho/common.ts | 334 ++++++++ .../zoho/dataDelivery/business.ts | 401 +++++++++ .../destinations/zoho/dataDelivery/data.ts | 3 + test/integrations/destinations/zoho/mocks.ts | 5 + .../integrations/destinations/zoho/network.ts | 421 ++++++++++ .../destinations/zoho/router/data.ts | 4 + .../destinations/zoho/router/deletion.ts | 249 ++++++ .../destinations/zoho/router/upsert.ts | 771 ++++++++++++++++++ 16 files changed, 3183 insertions(+), 1 deletion(-) create mode 100644 src/cdk/v2/destinations/zoho/config.js create mode 100644 src/cdk/v2/destinations/zoho/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/zoho/transformRecord.js create mode 100644 src/cdk/v2/destinations/zoho/utils.js create mode 100644 src/cdk/v2/destinations/zoho/utils.test.js create mode 100644 src/v1/destinations/zoho/networkHandler.js create mode 100644 test/integrations/destinations/zoho/common.ts create mode 100644 test/integrations/destinations/zoho/dataDelivery/business.ts create mode 100644 test/integrations/destinations/zoho/dataDelivery/data.ts create mode 100644 test/integrations/destinations/zoho/mocks.ts create mode 100644 test/integrations/destinations/zoho/network.ts create mode 100644 test/integrations/destinations/zoho/router/data.ts create mode 100644 test/integrations/destinations/zoho/router/deletion.ts create mode 100644 test/integrations/destinations/zoho/router/upsert.ts diff --git a/src/cdk/v2/destinations/zoho/config.js b/src/cdk/v2/destinations/zoho/config.js new file mode 100644 index 0000000000..d942d9e369 --- /dev/null +++ b/src/cdk/v2/destinations/zoho/config.js @@ -0,0 +1,61 @@ +// https://www.zoho.com/crm/developer/docs/api/v6/access-refresh.html +const DATA_CENTRE_BASE_ENDPOINTS_MAP = { + US: 'https://www.zohoapis.com', + AU: 'https://www.zohoapis.com.au', + EU: 'https://www.zohoapis.eu', + IN: 'https://www.zohoapis.in', + CN: 'https://www.zohoapis.com.cn', + JP: 'https://www.zohoapis.jp', + CA: 'https://www.zohoapiscloud.ca', +}; + +const getBaseEndpoint = (dataServer) => DATA_CENTRE_BASE_ENDPOINTS_MAP[dataServer]; +const COMMON_RECORD_ENDPOINT = (dataCenter = 'US') => + `${getBaseEndpoint(dataCenter)}/crm/v6/moduleType`; + +// ref: https://www.zoho.com/crm/developer/docs/api/v6/insert-records.html#:~:text=%2DX%20POST-,System%2Ddefined%20mandatory%20fields%20for%20each%20module,-While%20inserting%20records +const MODULE_MANDATORY_FIELD_CONFIG = { + Leads: ['Last_Name'], + Contacts: ['Last_Name'], + Accounts: ['Account_Name'], + Deals: ['Deal_Name', 'Stage', 'Pipeline'], + Tasks: ['Subject'], + Calls: ['Subject', 'Call_Type', 'Call_Start_Time', 'Call_Duration'], + Events: ['Event_Title', 'Start_DateTime', 'Remind_At', 'End_DateTime'], + Products: ['Product_Name'], + Quotes: ['Subject', 'Quoted_Items'], + Invoices: ['Subject', 'Invoiced_Items'], + Campaigns: ['Campaign_Name'], + Vendors: ['Vendor_Name'], + 'Price Books': ['Price_Book_Name', 'Pricing_Details'], + Cases: ['Case_Origin', 'Status', 'Subject'], + Solutions: ['Solution_Title'], + 'Purchase Orders': ['Subject', 'Vendor_Name', 'Purchased_Items'], + 'Sales Orders': ['Subject', 'Ordered_Items'], +}; + +const MODULE_WISE_DUPLICATE_CHECK_FIELD = { + Leads: ['Email'], + Accounts: ['Account_Name'], + Contacts: ['Email'], + Deals: ['Deal_Name'], + Campaigns: ['Campaign_Name'], + Cases: ['Subject'], + Solutions: ['Solution_Title'], + Products: ['Product_Name'], + Vendors: ['Vendor_Name'], + PriceBooks: ['Price_Book_Name'], + Quotes: ['Subject'], + SalesOrders: ['Subject'], + PurchaseOrders: ['Subject'], + Invoices: ['Subject'], + CustomModules: ['Name'], +}; + +module.exports = { + MAX_BATCH_SIZE: 100, + DATA_CENTRE_BASE_ENDPOINTS_MAP, + COMMON_RECORD_ENDPOINT, + MODULE_MANDATORY_FIELD_CONFIG, + MODULE_WISE_DUPLICATE_CHECK_FIELD, +}; diff --git a/src/cdk/v2/destinations/zoho/rtWorkflow.yaml b/src/cdk/v2/destinations/zoho/rtWorkflow.yaml new file mode 100644 index 0000000000..b50b9502e3 --- /dev/null +++ b/src/cdk/v2/destinations/zoho/rtWorkflow.yaml @@ -0,0 +1,38 @@ +bindings: + - name: EventType + path: ../../../../constants + - name: processRecordInputs + path: ./transformRecord + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + - name: InstrumentationError + path: '@rudderstack/integrations-lib' + +steps: + - name: validateConfig + template: | + const config = ^[0].destination.Config + $.assertConfig(config.region, "Datacentre Region is not present. Aborting") + + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: processRecordEvents + template: | + await $.processRecordInputs(^.{.message.type === $.EventType.RECORD}[], ^[0].destination) + + - name: failOtherEvents + template: | + const otherEvents = ^.{.message.type !== $.EventType.RECORD}[] + let failedEvents = otherEvents.map( + function(event) { + const error = new $.InstrumentationError("Event type " + event.message.type + " is not supported"); + $.handleRtTfSingleEventError(event, error, {}) + } + ) + failedEvents ?? [] + + - name: finalPayload + template: | + [...$.outputs.processRecordEvents, ...$.outputs.failOtherEvents] diff --git a/src/cdk/v2/destinations/zoho/transformRecord.js b/src/cdk/v2/destinations/zoho/transformRecord.js new file mode 100644 index 0000000000..8f4586e46b --- /dev/null +++ b/src/cdk/v2/destinations/zoho/transformRecord.js @@ -0,0 +1,338 @@ +const { + InstrumentationError, + getHashFromArray, + ConfigurationError, + RetryableError, +} = require('@rudderstack/integrations-lib'); +const { BatchUtils } = require('@rudderstack/workflow-engine'); +const { + defaultPostRequestConfig, + defaultRequestConfig, + getSuccessRespEvents, + removeUndefinedAndNullValues, + handleRtTfSingleEventError, + isEmptyObject, + defaultDeleteRequestConfig, +} = require('../../../../v0/util'); +const zohoConfig = require('./config'); +const { + deduceModuleInfo, + validatePresenceOfMandatoryProperties, + formatMultiSelectFields, + handleDuplicateCheck, + searchRecordId, + calculateTrigger, + validateConfigurationIssue, +} = require('./utils'); +const { REFRESH_TOKEN } = require('../../../../adapters/networkhandler/authConstants'); + +// Main response builder function +const responseBuilder = ( + items, + config, + identifierType, + operationModuleType, + commonEndPoint, + action, + metadata, +) => { + const { trigger, addDefaultDuplicateCheck, multiSelectFieldLevelDecision } = config; + + const response = defaultRequestConfig(); + response.headers = { + Authorization: `Zoho-oauthtoken ${metadata[0].secret.accessToken}`, + }; + + if (action === 'insert' || action === 'update') { + const payload = { + duplicate_check_fields: handleDuplicateCheck( + addDefaultDuplicateCheck, + identifierType, + operationModuleType, + ), + data: items, + $append_values: getHashFromArray(multiSelectFieldLevelDecision, 'from', 'to', false), + trigger: calculateTrigger(trigger), + }; + response.method = defaultPostRequestConfig.requestMethod; + response.body.JSON = removeUndefinedAndNullValues(payload); + response.endpoint = `${commonEndPoint}/upsert`; + } else { + response.endpoint = `${commonEndPoint}?ids=${items.join(',')}&wf_trigger=${trigger !== 'None'}`; + response.method = defaultDeleteRequestConfig.requestMethod; + } + + return response; +}; +const batchResponseBuilder = ( + transformedResponseToBeBatched, + config, + identifierType, + operationModuleType, + upsertEndPoint, + action, +) => { + const upsertResponseArray = []; + const deletionResponseArray = []; + const { upsertData, deletionData, upsertSuccessMetadata, deletionSuccessMetadata } = + transformedResponseToBeBatched; + + const upsertDataChunks = BatchUtils.chunkArrayBySizeAndLength(upsertData, { + maxItems: zohoConfig.MAX_BATCH_SIZE, + }); + + const deletionDataChunks = BatchUtils.chunkArrayBySizeAndLength(deletionData, { + maxItems: zohoConfig.MAX_BATCH_SIZE, + }); + + const upsertmetadataChunks = BatchUtils.chunkArrayBySizeAndLength(upsertSuccessMetadata, { + maxItems: zohoConfig.MAX_BATCH_SIZE, + }); + + const deletionmetadataChunks = BatchUtils.chunkArrayBySizeAndLength(deletionSuccessMetadata, { + maxItems: zohoConfig.MAX_BATCH_SIZE, + }); + + upsertDataChunks.items.forEach((chunk) => { + upsertResponseArray.push( + responseBuilder( + chunk, + config, + identifierType, + operationModuleType, + upsertEndPoint, + action, + upsertmetadataChunks.items[0], + ), + ); + }); + + deletionDataChunks.items.forEach((chunk) => { + deletionResponseArray.push( + responseBuilder( + chunk, + config, + identifierType, + operationModuleType, + upsertEndPoint, + action, + deletionmetadataChunks.items[0], + ), + ); + }); + + return { + upsertResponseArray, + upsertmetadataChunks, + deletionResponseArray, + deletionmetadataChunks, + }; +}; + +/** + * Handles the upsert operation for a specific module type by validating mandatory properties, + * processing the input fields, and updating the response accordingly. + * + * @param {Object} input - The input data for the upsert operation. + * @param {Object} fields - The fields to be upserted. + * @param {string} operationModuleType - The type of module operation being performed. + * @param {Object} Config - The configuration object. + * @param {Object} transformedResponseToBeBatched - The response object to be batched. + * @param {Array} errorResponseList - The list to store error responses. + * @returns {Promise} - A promise that resolves once the upsert operation is handled. + */ +const handleUpsert = async ( + input, + fields, + operationModuleType, + Config, + transformedResponseToBeBatched, + errorResponseList, +) => { + const eventErroneous = validatePresenceOfMandatoryProperties(operationModuleType, fields); + + if (eventErroneous?.status) { + const error = new ConfigurationError( + `${operationModuleType} object must have the ${eventErroneous.missingField.join('", "')} property(ies).`, + ); + errorResponseList.push(handleRtTfSingleEventError(input, error, {})); + } else { + const formattedFields = formatMultiSelectFields(Config, fields); + transformedResponseToBeBatched.upsertSuccessMetadata.push(input.metadata); + transformedResponseToBeBatched.upsertData.push(formattedFields); + } +}; + +/** + * Handles search errors in Zoho record search. + * If the search response message code is 'INVALID_TOKEN', returns a RetryableError with a specific message and status code. + * Otherwise, returns a ConfigurationError with a message indicating failure to fetch Zoho ID for a record. + * + * @param {Object} searchResponse - The response object from the search operation. + * @returns {RetryableError|ConfigurationError} - The error object based on the search response. + */ +const handleSearchError = (searchResponse) => { + if (searchResponse.message.code === 'INVALID_TOKEN') { + return new RetryableError( + `[Zoho]:: ${JSON.stringify(searchResponse.message)} during zoho record search`, + 500, + searchResponse.message, + REFRESH_TOKEN, + ); + } + return new ConfigurationError( + `failed to fetch zoho id for record for ${JSON.stringify(searchResponse.message)}`, + ); +}; + +/** + * Asynchronously handles the deletion operation based on the search response. + * + * @param {Object} input - The input object containing metadata and other details. + * @param {Array} fields - The fields to be used for searching the record. + * @param {Object} Config - The configuration object. + * @param {Object} transformedResponseToBeBatched - The object to store transformed response data to be batched. + * @param {Array} errorResponseList - The list to store error responses. + */ +const handleDeletion = async ( + input, + fields, + Config, + transformedResponseToBeBatched, + errorResponseList, +) => { + const searchResponse = await searchRecordId(fields, input.metadata, Config); + + if (searchResponse.erroneous) { + const error = handleSearchError(searchResponse); + errorResponseList.push(handleRtTfSingleEventError(input, error, {})); + } else { + transformedResponseToBeBatched.deletionData.push(...searchResponse.message); + transformedResponseToBeBatched.deletionSuccessMetadata.push(input.metadata); + } +}; + +/** + * Process the input message based on the specified action. + * If the 'fields' in the input message are empty, an error is generated. + * Determines whether to handle an upsert operation or a deletion operation based on the action. + * + * @param {Object} input - The input message containing the fields. + * @param {string} action - The action to be performed ('insert', 'update', or other). + * @param {string} operationModuleType - The type of operation module. + * @param {Object} Config - The configuration object. + * @param {Object} transformedResponseToBeBatched - The object to store transformed responses. + * @param {Array} errorResponseList - The list to store error responses. + */ +const processInput = async ( + input, + action, + operationModuleType, + Config, + transformedResponseToBeBatched, + errorResponseList, +) => { + const { fields } = input.message; + + if (isEmptyObject(fields)) { + const emptyFieldsError = new InstrumentationError('`fields` cannot be empty'); + errorResponseList.push(handleRtTfSingleEventError(input, emptyFieldsError, {})); + return; + } + + if (action === 'insert' || action === 'update') { + await handleUpsert( + input, + fields, + operationModuleType, + Config, + transformedResponseToBeBatched, + errorResponseList, + ); + } else { + await handleDeletion(input, fields, Config, transformedResponseToBeBatched, errorResponseList); + } +}; + +/** + * Appends success responses to the main response array. + * + * @param {Array} response - The main response array to which success responses will be appended. + * @param {Array} responseArray - An array of batched responses. + * @param {Array} metadataChunks - An array containing metadata chunks. + * @param {string} destination - The destination for the success responses. + */ +const appendSuccessResponses = (response, responseArray, metadataChunks, destination) => { + responseArray.forEach((batchedResponse, index) => { + response.push( + getSuccessRespEvents(batchedResponse, metadataChunks.items[index], destination, true), + ); + }); +}; + +/** + * Process multiple record inputs for a destination. + * + * @param {Array} inputs - The array of record inputs to be processed. + * @param {Object} destination - The destination object containing configuration. + * @returns {Array} - An array of responses after processing the record inputs. + */ +const processRecordInputs = async (inputs, destination) => { + if (!inputs || inputs.length === 0) { + return []; + } + + const response = []; + const errorResponseList = []; + const { Config } = destination; + const { action } = inputs[0].message; + + const transformedResponseToBeBatched = { + upsertData: [], + upsertSuccessMetadata: [], + deletionSuccessMetadata: [], + deletionData: [], + }; + + const { operationModuleType, identifierType, upsertEndPoint } = deduceModuleInfo(inputs, Config); + + validateConfigurationIssue(Config, operationModuleType, action); + + await Promise.all( + inputs.map((input) => + processInput( + input, + action, + operationModuleType, + Config, + transformedResponseToBeBatched, + errorResponseList, + ), + ), + ); + + const { + upsertResponseArray, + upsertmetadataChunks, + deletionResponseArray, + deletionmetadataChunks, + } = batchResponseBuilder( + transformedResponseToBeBatched, + Config, + identifierType, + operationModuleType, + upsertEndPoint, + action, + ); + + if (upsertResponseArray.length === 0 && deletionResponseArray.length === 0) { + return errorResponseList; + } + + appendSuccessResponses(response, upsertResponseArray, upsertmetadataChunks, destination); + appendSuccessResponses(response, deletionResponseArray, deletionmetadataChunks, destination); + + return [...response, ...errorResponseList]; +}; + +module.exports = { processRecordInputs }; diff --git a/src/cdk/v2/destinations/zoho/utils.js b/src/cdk/v2/destinations/zoho/utils.js new file mode 100644 index 0000000000..8b170d2b82 --- /dev/null +++ b/src/cdk/v2/destinations/zoho/utils.js @@ -0,0 +1,168 @@ +const { + MappedToDestinationKey, + getHashFromArray, + isDefinedAndNotNull, + ConfigurationError, +} = require('@rudderstack/integrations-lib'); +const get = require('get-value'); +const { getDestinationExternalIDInfoForRetl, isHttpStatusSuccess } = require('../../../../v0/util'); +const zohoConfig = require('./config'); +const { handleHttpRequest } = require('../../../../adapters/network'); + +const deduceModuleInfo = (inputs, Config) => { + const singleRecordInput = inputs[0].message; + const operationModuleInfo = {}; + const mappedToDestination = get(singleRecordInput, MappedToDestinationKey); + if (mappedToDestination) { + const { objectType, identifierType } = getDestinationExternalIDInfoForRetl( + singleRecordInput, + 'ZOHO', + ); + operationModuleInfo.operationModuleType = objectType; + operationModuleInfo.upsertEndPoint = zohoConfig + .COMMON_RECORD_ENDPOINT(Config.region) + .replace('moduleType', objectType); + operationModuleInfo.identifierType = identifierType; + } + return operationModuleInfo; +}; + +// eslint-disable-next-line consistent-return +function validatePresenceOfMandatoryProperties(objectName, object) { + if (zohoConfig.MODULE_MANDATORY_FIELD_CONFIG.hasOwnProperty(objectName)) { + const requiredFields = zohoConfig.MODULE_MANDATORY_FIELD_CONFIG[objectName]; + const missingFields = requiredFields.filter((field) => !object.hasOwnProperty(field)) || []; + return { status: missingFields.length > 0, missingField: missingFields }; + } + // No mandatory check performed for custom objects +} + +const formatMultiSelectFields = (config, fields) => { + // Convert multiSelectFieldLevelDecision array into a hash map for quick lookups + const multiSelectFields = getHashFromArray( + config.multiSelectFieldLevelDecision, + 'from', + 'to', + false, + ); + + Object.keys(fields).forEach((eachFieldKey) => { + if (multiSelectFields.hasOwnProperty(eachFieldKey)) { + // eslint-disable-next-line no-param-reassign + fields[eachFieldKey] = [fields[eachFieldKey]]; + } + }); + return fields; +}; + +// Utility to handle duplicate check +const handleDuplicateCheck = (addDefaultDuplicateCheck, identifierType, operationModuleType) => { + let duplicateCheckFields = [identifierType]; + + if (addDefaultDuplicateCheck) { + const moduleDuplicateCheckField = + zohoConfig.MODULE_WISE_DUPLICATE_CHECK_FIELD[operationModuleType]; + + if (isDefinedAndNotNull(moduleDuplicateCheckField)) { + duplicateCheckFields = [...moduleDuplicateCheckField]; + duplicateCheckFields.unshift(identifierType); + } else { + duplicateCheckFields.push('Name'); // user chosen duplicate field always carries higher priority + } + } + + return [...new Set(duplicateCheckFields)]; +}; + +function escapeAndEncode(value) { + return encodeURIComponent(value.replace(/([(),\\])/g, '\\$1')); +} + +function transformToURLParams(fields, Config) { + const criteria = Object.entries(fields) + .map(([key, value]) => `(${key}:equals:${escapeAndEncode(value)})`) + .join('and'); + + const dataCenter = Config.region; + const regionBasedEndPoint = zohoConfig.DATA_CENTRE_BASE_ENDPOINTS_MAP[dataCenter]; + + return `${regionBasedEndPoint}/crm/v6/Leads/search?criteria=${criteria}`; +} + +// ref : https://www.zoho.com/crm/developer/docs/api/v6/search-records.html +const searchRecordId = async (fields, metadata, Config) => { + const searchURL = transformToURLParams(fields, Config); + const searchResult = await handleHttpRequest( + 'get', + searchURL, + { + headers: { + Authorization: `Zoho-oauthtoken ${metadata.secret.accessToken}`, + }, + }, + { + destType: 'zoho', + feature: 'deleteRecords', + requestMethod: 'GET', + endpointPath: 'crm/v6/Leads/search?criteria=', + module: 'router', + }, + ); + if (!isHttpStatusSuccess(searchResult.processedResponse.status)) { + return { + erroneous: true, + message: searchResult.processedResponse.response, + }; + } + if (searchResult.processedResponse.status === 204) { + return { + erroneous: true, + message: 'No contact is found with record details', + }; + } + const recordIds = searchResult.processedResponse.response.data.map((record) => record.id); + return { + erroneous: false, + message: recordIds, + }; +}; + +// ref : https://www.zoho.com/crm/developer/docs/api/v6/upsert-records.html#:~:text=The%20trigger%20input%20can%20be%20workflow%2C%20approval%2C%20or%20blueprint.%20If%20the%20trigger%20is%20not%20mentioned%2C%20the%20workflows%2C%20approvals%20and%20blueprints%20related%20to%20the%20API%20will%20get%20executed.%20Enter%20the%20trigger%20value%20as%20%5B%5D%20to%20not%20execute%20the%20workflows. +const calculateTrigger = (trigger) => { + if (trigger === 'Default') { + return null; + } + if (trigger === 'None') { + return []; + } + return [trigger]; +}; + +const validateConfigurationIssue = (Config, operationModuleType, action) => { + const hashMapMultiselect = getHashFromArray( + Config.multiSelectFieldLevelDecision, + 'from', + 'to', + false, + ); + if ( + Object.keys(hashMapMultiselect).length > 0 && + Config.module !== operationModuleType && + action !== 'delete' + ) { + throw new ConfigurationError( + 'Object Chosen in Visual Data Mapper is not consistent with Module type selected in destination configuration. Aborting Events.', + ); + } +}; + +module.exports = { + deduceModuleInfo, + validatePresenceOfMandatoryProperties, + formatMultiSelectFields, + handleDuplicateCheck, + searchRecordId, + transformToURLParams, + calculateTrigger, + validateConfigurationIssue, +}; diff --git a/src/cdk/v2/destinations/zoho/utils.test.js b/src/cdk/v2/destinations/zoho/utils.test.js new file mode 100644 index 0000000000..332a408695 --- /dev/null +++ b/src/cdk/v2/destinations/zoho/utils.test.js @@ -0,0 +1,245 @@ +const { + handleDuplicateCheck, + deduceModuleInfo, + validatePresenceOfMandatoryProperties, + formatMultiSelectFields, + validateConfigurationIssue, +} = require('./utils'); + +const { ConfigurationError } = require('@rudderstack/integrations-lib'); + +describe('handleDuplicateCheck', () => { + // Returns identifierType when addDefaultDuplicateCheck is false + it('should return identifierType when addDefaultDuplicateCheck is false', () => { + const identifierType = 'email'; + const addDefaultDuplicateCheck = false; + const operationModuleType = 'Leads'; + const moduleWiseDuplicateCheckField = {}; + + const result = handleDuplicateCheck( + addDefaultDuplicateCheck, + identifierType, + operationModuleType, + moduleWiseDuplicateCheckField, + ); + + expect(result).toEqual([identifierType]); + }); + + it('Handles valid operationModuleType and already included identifierType', () => { + const identifierType = 'Email'; + const addDefaultDuplicateCheck = true; + const operationModuleType = 'Leads'; + + const result = handleDuplicateCheck( + addDefaultDuplicateCheck, + identifierType, + operationModuleType, + ); + + expect(result).toEqual(['Email']); + }); + + // Returns identifierType and 'Name' when addDefaultDuplicateCheck is true and moduleDuplicateCheckField is not defined + it("should return identifierType and 'Name' when addDefaultDuplicateCheck is true and moduleDuplicateCheckField is not defined", () => { + const identifierType = 'id'; + const operationModuleType = 'type3'; + const addDefaultDuplicateCheck = true; + + const result = handleDuplicateCheck( + addDefaultDuplicateCheck, + identifierType, + operationModuleType, + ); + + expect(result).toEqual(['id', 'Name']); + }); + + // Handles null values in moduleWiseDuplicateCheckField + it('should handle null values in moduleWiseDuplicateCheckField', () => { + const addDefaultDuplicateCheck = true; + const identifierType = 'Identifier'; + const operationModuleType = 'type1'; + + const result = handleDuplicateCheck( + addDefaultDuplicateCheck, + identifierType, + operationModuleType, + ); + + expect(result).toEqual(['Identifier', 'Name']); + }); +}); + +describe('deduceModuleInfo', () => { + const Config = { region: 'US' }; + + it('should return empty object when mappedToDestination is not present', () => { + const inputs = [{}]; + const result = deduceModuleInfo(inputs, Config); + expect(result).toEqual({}); + }); + + it('should return operationModuleInfo when mappedToDestination is present', () => { + const inputs = [ + { + message: { + context: { + externalId: [{ type: 'ZOHO-Leads', id: '12345', identifierType: 'Email' }], + mappedToDestination: true, + }, + }, + }, + ]; + + const result = deduceModuleInfo(inputs, Config); + expect(result).toEqual({ + operationModuleType: 'Leads', + upsertEndPoint: 'https://www.zohoapis.com/crm/v6/Leads', + identifierType: 'Email', + }); + }); + + it('should handle different regions in config', () => { + const inputs = [ + { + message: { + context: { + externalId: [{ type: 'ZOHO-Leads', id: '12345', identifierType: 'Email' }], + mappedToDestination: 'true', + }, + }, + }, + ]; + const Config = { region: 'EU' }; + + const result = deduceModuleInfo(inputs, Config); + expect(result).toEqual({ + operationModuleType: 'Leads', + upsertEndPoint: 'https://www.zohoapis.eu/crm/v6/Leads', + identifierType: 'Email', + }); + }); +}); + +describe('validatePresenceOfMandatoryProperties', () => { + it('should not throw an error if the object has all required fields', () => { + const objectName = 'Leads'; + const object = { Last_Name: 'Doe' }; + + expect(() => validatePresenceOfMandatoryProperties(objectName, object)).not.toThrow(); + }); + + it('should not throw an error if the objectName is not in MODULE_MANDATORY_FIELD_CONFIG', () => { + const objectName = 'CustomObject'; + const object = { Some_Field: 'Some Value' }; + + expect(() => validatePresenceOfMandatoryProperties(objectName, object)).not.toThrow(); + }); + + it('should throw an error if the object is missing multiple required fields', () => { + const objectName = 'Deals'; + const object = { Deal_Name: 'Big Deal' }; + const output = validatePresenceOfMandatoryProperties(objectName, object); + expect(output).toEqual({ + missingField: ['Stage', 'Pipeline'], + status: true, + }); + }); + + it('should not throw an error if the object has all required fields for Deals', () => { + const objectName = 'Deals'; + const object = { Deal_Name: 'Big Deal', Stage: 'Negotiation', Pipeline: 'Sales' }; + + expect(() => validatePresenceOfMandatoryProperties(objectName, object)).not.toThrow(); + }); +}); + +describe('validateConfigurationIssue', () => { + test('should throw ConfigurationError when hashMapMultiselect is not empty, Config.module is different from operationModuleType, and action is not delete', () => { + const Config = { + multiSelectFieldLevelDecision: [{ from: 'field1', to: 'true' }], + module: 'moduleA', + }; + const operationModuleType = 'moduleB'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).toThrow( + ConfigurationError, + ); + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).toThrow( + 'Object Chosen in Visual Data Mapper is not consistent with Module type selected in destination configuration. Aborting Events.', + ); + }); + + test('should not throw an error when hashMapMultiselect is not empty, Config.module is the same as operationModuleType, and action is not delete', () => { + const Config = { + multiSelectFieldLevelDecision: [{ from: 'field1', to: 'true' }], + module: 'moduleA', + }; + const operationModuleType = 'moduleA'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).not.toThrow(); + }); + + test('should not throw an error when hashMapMultiselect is empty, Config.module is different from operationModuleType, and action is not delete', () => { + const Config = { + multiSelectFieldLevelDecision: [], + module: 'moduleA', + }; + const operationModuleType = 'moduleB'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).not.toThrow(); + }); + + test('should not throw an error when hashMapMultiselect is empty, Config.module is the same as operationModuleType, and action is not delete', () => { + const Config = { + multiSelectFieldLevelDecision: [], + module: 'moduleA', + }; + const operationModuleType = 'moduleA'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).not.toThrow(); + }); + + test('should not throw an error when multiSelectFieldLevelDecision has entries without from key', () => { + const Config = { + multiSelectFieldLevelDecision: [{ to: 'true' }], + module: 'moduleA', + }; + const operationModuleType = 'moduleB'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).not.toThrow(); + }); + + test('should throw ConfigurationError when multiSelectFieldLevelDecision has mixed case from keys, Config.module is different from operationModuleType, and action is not delete', () => { + const Config = { + multiSelectFieldLevelDecision: [ + { from: 'FIELD1', to: 'true' }, + { from: 'field2', to: 'false' }, + ], + module: 'moduleA', + }; + const operationModuleType = 'moduleB'; + const action = 'create'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).toThrow( + ConfigurationError, + ); + }); + + test('should not throw an error when hashMapMultiselect is not empty, Config.module is different from operationModuleType, and action is delete', () => { + const Config = { + multiSelectFieldLevelDecision: [{ from: 'field1', to: 'true' }], + module: 'moduleA', + }; + const operationModuleType = 'moduleB'; + const action = 'delete'; + + expect(() => validateConfigurationIssue(Config, operationModuleType, action)).not.toThrow(); + }); +}); diff --git a/src/features.json b/src/features.json index 78737193a8..94e36a2416 100644 --- a/src/features.json +++ b/src/features.json @@ -75,6 +75,7 @@ "KODDI": true, "WUNDERKIND": true, "CLICKSEND": true, + "ZOHO": true, "CORDIAL": true }, "regulations": [ diff --git a/src/v1/destinations/zoho/networkHandler.js b/src/v1/destinations/zoho/networkHandler.js new file mode 100644 index 0000000000..2ceb0bbdf3 --- /dev/null +++ b/src/v1/destinations/zoho/networkHandler.js @@ -0,0 +1,141 @@ +const { TransformerProxyError } = require('../../../v0/util/errorTypes'); +const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network'); +const { + processAxiosResponse, + getDynamicErrorType, +} = require('../../../adapters/utils/networkUtils'); +const { isHttpStatusSuccess, getAuthErrCategoryFromStCode } = require('../../../v0/util/index'); +const tags = require('../../../v0/util/tags'); + +/** + * upsert response : + + { + "data": [ + { + "code": "INVALID_DATA", + "details": { + "expected_data_type": "integer", + "api_name": "No_of_Employees", + "json_path": "$.data[0].No_of_Employees" + }, + "message": "invalid data", + "status": "error" + }, + { + "code": "SUCCESS", + "duplicate_field": "Email", + "action": "update", + "details": { + "Modified_Time": "2024-07-14T10:54:15+05:30", + "Modified_By": { + "name": "dummy user", + "id": "724445000000323001" + }, + "Created_Time": "2024-07-01T21:25:36+05:30", + "id": "724445000000349039", + "Created_By": { + "name": "dummy user", + "id": "724445000000323001" + } + }, + "message": "record updated", + "status": "success" + } + ] +} + +* delete response : + + { + "data": [ + { + "code": "SUCCESS", + "details": { + "id": "724445000000445001" + }, + "message": "record deleted", + "status": "success" + }, + { + "code": "INVALID_DATA", + "details": { + "id": "724445000000323001" + }, + "message": "record not deleted", + "status": "error" + } + ] +} + */ + +const checkIfEventIsAbortableAndExtractErrorMessage = (element) => { + if (element.status === 'success') { + return { isAbortable: false, errorMsg: '' }; + } + + const errorMsg = `message: ${element.messaege} ${JSON.stringify(element.details)}`; + return { isAbortable: true, errorMsg }; +}; + +const responseHandler = (responseParams) => { + const { destinationResponse, rudderJobMetadata } = responseParams; + + const message = '[ZOHO Response V1 Handler] - Request Processed Successfully'; + const responseWithIndividualEvents = []; + const { response, status } = destinationResponse; + if (isHttpStatusSuccess(status)) { + // check for Partial Event failures and Successes + const { data } = response; + data.forEach((event, idx) => { + const proxyOutput = { + statusCode: 200, + metadata: rudderJobMetadata[idx], + error: 'success', + }; + // update status of partial event if abortable + const { isAbortable, errorMsg } = checkIfEventIsAbortableAndExtractErrorMessage(event); + if (isAbortable) { + proxyOutput.statusCode = 400; + proxyOutput.error = errorMsg; + } + responseWithIndividualEvents.push(proxyOutput); + }); + return { + status, + message, + destinationResponse, + response: responseWithIndividualEvents, + }; + } + + if (response?.code === 'INVALID_TOKEN') { + throw new TransformerProxyError( + `Zoho: Error transformer proxy v1 during Zoho response transformation. ${response.message}`, + 500, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(500), + }, + destinationResponse, + getAuthErrCategoryFromStCode(status), + response.message, + ); + } + throw new TransformerProxyError( + `ZOHO: Error encountered in transformer proxy V1`, + status, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + destinationResponse, + '', + responseWithIndividualEvents, + ); +}; +function networkHandler() { + this.proxy = proxyRequest; + this.processAxiosResponse = processAxiosResponse; + this.prepareProxy = prepareProxyRequest; + this.responseHandler = responseHandler; +} +module.exports = { networkHandler }; diff --git a/test/integrations/component.test.ts b/test/integrations/component.test.ts index 388c283c61..d4c109c55c 100644 --- a/test/integrations/component.test.ts +++ b/test/integrations/component.test.ts @@ -28,7 +28,7 @@ import _ from 'lodash'; // To run single destination test cases // npm run test:ts -- component --destination=adobe_analytics // npm run test:ts -- component --destination=adobe_analytics --feature=router -// npm run test:ts -- component --destination=adobe_analytics --feature=router --index=0 +// npm run test:ts -- component --destination=adobe_analytics --feature=dataDelivery --index=0 // Use below command to generate mocks // npm run test:ts -- component --destination=zendesk --generate=true @@ -101,6 +101,8 @@ if (!opts.generate || opts.generate === 'false') { // END const rootDir = __dirname; +console.log('rootDir', rootDir); +console.log('opts', opts); const allTestDataFilePaths = getTestDataFilePaths(rootDir, opts); const DEFAULT_VERSION = 'v0'; diff --git a/test/integrations/destinations/zoho/common.ts b/test/integrations/destinations/zoho/common.ts new file mode 100644 index 0000000000..bea4437e6f --- /dev/null +++ b/test/integrations/destinations/zoho/common.ts @@ -0,0 +1,334 @@ +import { Destination } from '../../../../src/types'; + +const destType = 'zoho'; +const destTypeInUpperCase = 'ZOHO'; +const advertiserId = 'test-advertiser-id'; +const dataProviderId = 'rudderstack'; +const segmentName = 'test-segment'; +const leadUpsertEndpoint = 'https://www.zohoapis.in/crm/v6/Leads/upsert'; + +const deletionPayload1 = { + action: 'delete', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'tobedeleted@gmail.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + type: 'record', +}; + +const commonDeletionDestConfig: Destination = { + ID: '345', + Name: 'Test', + Enabled: true, + WorkspaceID: '', + Transformations: [], + DestinationDefinition: { + ID: '345', + Name: 'Test', + DisplayName: 'ZOHO', + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + region: 'IN', + module: 'Leads', + trigger: 'None', + addDefaultDuplicateCheck: true, + multiSelectFieldLevelDecision: [ + { + from: 'multi-language', + to: 'true', + }, + { + from: 'multi class', + to: 'false', + }, + ], + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +const upsertPayload1 = { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + type: 'record', +}; + +const upsertPayload2 = { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + 'multi-language': 'Bengali', + }, + type: 'record', +}; + +const upsertPayload3 = { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'Email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + type: 'record', +}; + +const commonUpsertDestConfig: Destination = { + ID: '345', + Name: 'Test', + Enabled: true, + WorkspaceID: '', + Transformations: [], + DestinationDefinition: { + ID: '345', + Name: 'Test', + DisplayName: 'ZOHO', + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + region: 'US', + module: 'Leads', + trigger: 'workflow', + addDefaultDuplicateCheck: true, + multiSelectFieldLevelDecision: [ + { + from: 'multi-language', + to: 'true', + }, + { + from: 'multi class', + to: 'false', + }, + ], + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +const commonUpsertDestConfig2: Destination = { + ID: '345', + Name: 'Test', + Enabled: true, + WorkspaceID: '', + Transformations: [], + DestinationDefinition: { + ID: '345', + Name: 'Test', + DisplayName: 'ZOHO', + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + region: 'US', + module: 'Leads', + trigger: 'None', + addDefaultDuplicateCheck: true, + multiSelectFieldLevelDecision: [ + { + from: 'multi-language', + to: 'true', + }, + { + from: 'multi class', + to: 'false', + }, + ], + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +const commonUpsertDestConfig2CustomModule: Destination = { + ID: '345', + Name: 'Test', + Enabled: true, + WorkspaceID: '', + Transformations: [], + DestinationDefinition: { + ID: '345', + Name: 'Test', + DisplayName: 'ZOHO', + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + region: 'US', + module: 'CUSTOM', + trigger: 'None', + addDefaultDuplicateCheck: true, + multiSelectFieldLevelDecision: [ + { + from: 'multi-language', + to: 'true', + }, + { + from: 'multi class', + to: 'false', + }, + ], + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +const commonUpsertDestConfig3: Destination = { + ID: '345', + Name: 'Test', + Enabled: true, + WorkspaceID: '', + Transformations: [], + DestinationDefinition: { + ID: '345', + Name: 'Test', + DisplayName: 'ZOHO', + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + region: 'US', + module: 'Leads', + trigger: 'workflow', + addDefaultDuplicateCheck: true, + oneTrustCookieCategories: [ + { + oneTrustCookieCategory: 'Marketing', + }, + ], + }, +}; + +const commonOutput1 = { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], +}; + +export { + destType, + destTypeInUpperCase, + advertiserId, + dataProviderId, + segmentName, + leadUpsertEndpoint, + deletionPayload1, + commonDeletionDestConfig, + upsertPayload1, + upsertPayload2, + upsertPayload3, + commonUpsertDestConfig, + commonUpsertDestConfig2, + commonOutput1, + commonUpsertDestConfig3, + commonUpsertDestConfig2CustomModule, +}; diff --git a/test/integrations/destinations/zoho/dataDelivery/business.ts b/test/integrations/destinations/zoho/dataDelivery/business.ts new file mode 100644 index 0000000000..89c3ca214b --- /dev/null +++ b/test/integrations/destinations/zoho/dataDelivery/business.ts @@ -0,0 +1,401 @@ +import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; +import { ProxyV1TestData } from '../../../testTypes'; + +export const headerBlockWithCorrectAccessToken = { + 'Content-Type': 'application/json', + Authorization: 'Zoho-oauthtoken dummy-key', +}; + +export const contactPayload = { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], +}; + +export const statTags = { + destType: 'ZOHO', + errorCategory: 'network', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', +}; + +export const metadata = [ + { + jobId: 1, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + { + jobId: 2, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + { + jobId: 3, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, +]; + +export const singleMetadata = [ + { + jobId: 1, + attemptNum: 1, + userId: 'default-userId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + sourceId: 'default-sourceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, +]; + +const commonRecordParameters = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { ...contactPayload }, +}; + +const commonRecordParametersWithWrongToken = { + method: 'POST', + headers: { 'Content-Type': 'application/json', Authorization: 'Zoho-oauthtoken wrong-token' }, + JSON: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, +}; + +const multiContactPayload = { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Random: 'subscribed@eewrfrd.com', + }, + ], + $append_values: {}, + trigger: ['workflow'], +}; + +const commonMultiRecordParameters = { + method: 'POST', + headers: headerBlockWithCorrectAccessToken, + JSON: { ...multiContactPayload }, +}; + +export const testScenariosForV1API: ProxyV1TestData[] = [ + { + id: 'zoho_v1_scenario_1', + name: 'zoho', + description: 'Upserting Leads successfully', + successCriteria: 'Should return 200 and success', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + ...commonRecordParameters, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[ZOHO Response V1 Handler] - Request Processed Successfully', + destinationResponse: { + response: { + data: [ + { + code: 'SUCCESS', + duplicate_field: null, + action: 'insert', + details: { + Modified_Time: '2024-07-16T09:39:27+05:30', + Modified_By: { + name: 'Dummy-User', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'Dummy-User', + id: '724445000000323001', + }, + $approval_state: 'approved', + }, + message: 'record added', + status: 'success', + }, + ], + }, + status: 200, + }, + response: [ + { + statusCode: 200, + metadata: generateMetadata(1), + error: 'success', + }, + ], + }, + }, + }, + }, + }, + { + id: 'zoho_v1_scenario_2', + name: 'zoho', + description: 'Trying to upsert in wrong module name', + successCriteria: 'Should return 400 and should be aborted', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://www.zohoapis.in/crm/v6/Wrong/upsert', + ...commonRecordParameters, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 400, + statTags, + message: 'ZOHO: Error encountered in transformer proxy V1', + response: [ + { + statusCode: 400, + metadata: generateMetadata(1), + error: + '{"code":"INVALID_MODULE","details":{"resource_path_index":0},"message":"the module name given seems to be invalid","status":"error"}', + }, + ], + }, + }, + }, + }, + }, + { + id: 'zoho_v1_scenario_3', + name: 'zoho', + description: 'Trying to upsert using invalid access token', + successCriteria: 'Should return 500 and try for refreshed token', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + ...commonRecordParametersWithWrongToken, + }, + singleMetadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 500, + body: { + output: { + status: 500, + statTags: { ...statTags, errorType: 'retryable' }, + message: + 'Zoho: Error transformer proxy v1 during Zoho response transformation. invalid oauth token', + authErrorCategory: 'REFRESH_TOKEN', + response: [ + { + error: + '{"code":"INVALID_TOKEN","details":{},"message":"invalid oauth token","status":"error"}', + statusCode: 500, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + }, + }, + { + id: 'zoho_v1_scenario_4', + name: 'zoho', + description: 'testing partial failure', + successCriteria: 'Should return 200 and success for successful and 400 for failed payloads', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + ...commonMultiRecordParameters, + }, + metadata, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[ZOHO Response V1 Handler] - Request Processed Successfully', + destinationResponse: { + response: { + data: [ + { + code: 'SUCCESS', + duplicate_field: 'Email', + action: 'update', + details: { + Modified_Time: '2024-07-16T15:01:02+05:30', + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + }, + message: 'record updated', + status: 'success', + }, + { + code: 'SUCCESS', + duplicate_field: 'Email', + action: 'update', + details: { + Modified_Time: '2024-07-16T15:01:02+05:30', + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + }, + message: 'record updated', + status: 'success', + }, + { + code: 'MANDATORY_NOT_FOUND', + details: { + api_name: 'Last_Name', + json_path: '$.data[2].Last_Name', + }, + message: 'required field not found', + status: 'error', + }, + ], + }, + status: 200, + }, + response: [ + { + statusCode: 200, + metadata: generateMetadata(1), + error: 'success', + }, + { + error: 'success', + metadata: generateMetadata(2), + statusCode: 200, + }, + { + error: + 'message: undefined {"api_name":"Last_Name","json_path":"$.data[2].Last_Name"}', + metadata: generateMetadata(3), + statusCode: 400, + }, + ], + }, + }, + }, + }, + }, +]; + +export const data = [...testScenariosForV1API]; diff --git a/test/integrations/destinations/zoho/dataDelivery/data.ts b/test/integrations/destinations/zoho/dataDelivery/data.ts new file mode 100644 index 0000000000..fc969bb8e1 --- /dev/null +++ b/test/integrations/destinations/zoho/dataDelivery/data.ts @@ -0,0 +1,3 @@ +import { testScenariosForV1API } from './business'; + +export const data = [...testScenariosForV1API]; diff --git a/test/integrations/destinations/zoho/mocks.ts b/test/integrations/destinations/zoho/mocks.ts new file mode 100644 index 0000000000..1e4c7d18c7 --- /dev/null +++ b/test/integrations/destinations/zoho/mocks.ts @@ -0,0 +1,5 @@ +import config from '../../../../src/cdk/v2/destinations/zoho/config'; + +export const defaultMockFns = () => { + jest.replaceProperty(config, 'MAX_BATCH_SIZE', 2); +}; diff --git a/test/integrations/destinations/zoho/network.ts b/test/integrations/destinations/zoho/network.ts new file mode 100644 index 0000000000..b37a56d123 --- /dev/null +++ b/test/integrations/destinations/zoho/network.ts @@ -0,0 +1,421 @@ +import { destType } from './common'; + +export const networkCallsData = [ + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + data: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, + params: { destination: destType }, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Zoho-oauthtoken dummy-key', + }, + method: 'POST', + }, + httpRes: { + data: { + data: [ + { + code: 'SUCCESS', + duplicate_field: null, + action: 'insert', + details: { + Modified_Time: '2024-07-16T09:39:27+05:30', + Modified_By: { + name: 'Dummy-User', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'Dummy-User', + id: '724445000000323001', + }, + $approval_state: 'approved', + }, + message: 'record added', + status: 'success', + }, + ], + }, + status: 200, + statusText: 'OK', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Wrong/upsert', + data: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, + params: { destination: destType }, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Zoho-oauthtoken dummy-key', + }, + method: 'POST', + }, + httpRes: { + data: { + code: 'INVALID_MODULE', + details: { + resource_path_index: 0, + }, + message: 'the module name given seems to be invalid', + status: 'error', + }, + status: 400, + statusText: 'Bad Request', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + data: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, + params: { destination: destType }, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Zoho-oauthtoken wrong-token', + }, + method: 'POST', + }, + httpRes: { + data: { + code: 'INVALID_TOKEN', + details: {}, + message: 'invalid oauth token', + status: 'error', + }, + status: 401, + statusText: 'Bad Request', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/upsert', + data: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Random: 'subscribed@eewrfrd.com', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, + params: { destination: destType }, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Zoho-oauthtoken dummy-key', + }, + method: 'POST', + }, + httpRes: { + data: { + data: [ + { + code: 'SUCCESS', + duplicate_field: 'Email', + action: 'update', + details: { + Modified_Time: '2024-07-16T15:01:02+05:30', + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + }, + message: 'record updated', + status: 'success', + }, + { + code: 'SUCCESS', + duplicate_field: 'Email', + action: 'update', + details: { + Modified_Time: '2024-07-16T15:01:02+05:30', + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + Created_Time: '2024-07-16T09:39:27+05:30', + id: '724445000000424003', + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + }, + }, + message: 'record updated', + status: 'success', + }, + { + code: 'MANDATORY_NOT_FOUND', + details: { + api_name: 'Last_Name', + json_path: '$.data[2].Last_Name', + }, + message: 'required field not found', + status: 'error', + }, + ], + // }, + }, + status: 200, + statusText: 'OK', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/search?criteria=(Email:equals:tobedeleted3%40gmail.com)and(First_Name:equals:subcribed3)and(Last_Name:equals:%20User3)', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + method: 'GET', + }, + httpRes: { + data: { + data: '', + }, + status: 204, + statusText: 'OK', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/search?criteria=(Email:equals:tobedeleted%40gmail.com)and(First_Name:equals:subcribed)and(Last_Name:equals:%20User)', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + method: 'GET', + }, + httpRes: { + data: { + data: [ + { + Owner: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + Company: null, + Email: 'tobedeleted@gmail.com', + $currency_symbol: '$', + $field_states: null, + $sharing_permission: 'full_access', + Last_Activity_Time: '2024-07-18T23:55:42+05:30', + Industry: null, + Unsubscribed_Mode: null, + $process_flow: false, + Street: null, + Zip_Code: null, + id: '', + $approval: { + delegate: false, + approve: false, + reject: false, + resubmit: false, + }, + Created_Time: '2024-07-18T19:34:50+05:30', + $editable: true, + City: null, + No_of_Employees: null, + Converted_Account: null, + State: null, + Country: null, + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + $zia_owner_assignment: 'owner_recommendation_unavailable', + Annual_Revenue: null, + Secondary_Email: null, + Description: null, + Rating: null, + $review_process: { + approve: false, + reject: false, + resubmit: false, + }, + Website: null, + Twitter: null, + Salutation: null, + First_Name: 'subcribed', + Full_Name: 'subcribed User', + Lead_Status: null, + Record_Image: null, + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + Converted_Deal: null, + $review: null, + Lead_Conversion_Time: null, + Skype_ID: null, + Phone: null, + Email_Opt_Out: false, + $zia_visions: null, + Designation: null, + Modified_Time: '2024-07-18T23:55:42+05:30', + $converted_detail: {}, + Unsubscribed_Time: null, + Converted_Contact: null, + Mobile: null, + $orchestration: null, + Last_Name: 'User', + $in_merge: false, + Lead_Source: null, + Fax: null, + $approval_state: 'approved', + $pathfinder: null, + }, + ], + }, + status: 200, + statusText: 'OK', + }, + }, + { + httpReq: { + url: 'https://www.zohoapis.in/crm/v6/Leads/search?criteria=(Email:equals:tobedeleted2%40gmail.com)and(First_Name:equals:subcribed2)and(Last_Name:equals:%20User2)', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + method: 'GET', + }, + httpRes: { + data: { + data: [ + { + Owner: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + Company: null, + Email: 'tobedeleted2@gmail.com', + $currency_symbol: '$', + $field_states: null, + $sharing_permission: 'full_access', + Last_Activity_Time: '2024-07-18T23:55:42+05:30', + Industry: null, + Unsubscribed_Mode: null, + $process_flow: false, + Street: null, + Zip_Code: null, + id: '', + $approval: { + delegate: false, + approve: false, + reject: false, + resubmit: false, + }, + Created_Time: '2024-07-18T19:34:50+05:30', + $editable: true, + City: null, + No_of_Employees: null, + Converted_Account: null, + State: null, + Country: null, + Created_By: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + $zia_owner_assignment: 'owner_recommendation_unavailable', + Annual_Revenue: null, + Secondary_Email: null, + Description: null, + Rating: null, + $review_process: { + approve: false, + reject: false, + resubmit: false, + }, + Website: null, + Twitter: null, + Salutation: null, + First_Name: 'subcribed2', + Full_Name: 'subcribed2 User', + Lead_Status: null, + Record_Image: null, + Modified_By: { + name: 'dummy-user', + id: '724445000000323001', + email: 'dummy@gmail.com', + }, + Converted_Deal: null, + $review: null, + Lead_Conversion_Time: null, + Skype_ID: null, + Phone: null, + Email_Opt_Out: false, + $zia_visions: null, + Designation: null, + Modified_Time: '2024-07-18T23:55:42+05:30', + $converted_detail: {}, + Unsubscribed_Time: null, + Converted_Contact: null, + Mobile: null, + $orchestration: null, + Last_Name: 'User2', + $in_merge: false, + Lead_Source: null, + Fax: null, + $approval_state: 'approved', + $pathfinder: null, + }, + ], + }, + status: 200, + statusText: 'OK', + }, + }, +]; diff --git a/test/integrations/destinations/zoho/router/data.ts b/test/integrations/destinations/zoho/router/data.ts new file mode 100644 index 0000000000..7340fd18c8 --- /dev/null +++ b/test/integrations/destinations/zoho/router/data.ts @@ -0,0 +1,4 @@ +import { upsertData } from './upsert'; +import { deleteData } from './deletion'; + +export const data = [...upsertData, ...deleteData]; diff --git a/test/integrations/destinations/zoho/router/deletion.ts b/test/integrations/destinations/zoho/router/deletion.ts new file mode 100644 index 0000000000..5e922bc794 --- /dev/null +++ b/test/integrations/destinations/zoho/router/deletion.ts @@ -0,0 +1,249 @@ +import { defaultMockFns } from '../mocks'; +import { commonDeletionDestConfig, deletionPayload1, destType } from '../common'; + +export const deleteData = [ + { + name: destType, + id: 'zoho_deletion_1', + description: 'Happy flow record deletion with Leads module', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: deletionPayload1, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonDeletionDestConfig, + }, + { + message: { + action: 'delete', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'tobedeleted2@gmail.com', + First_Name: 'subcribed2', + Last_Name: ' User2', + }, + type: 'record', + }, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonDeletionDestConfig, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: + 'https://www.zohoapis.in/crm/v6/Leads?ids=,&wf_trigger=false', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonDeletionDestConfig, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + id: 'zoho_deletion_2', + description: 'Batch containing already existing and non existing records for deletion', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: deletionPayload1, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonDeletionDestConfig, + }, + { + message: { + action: 'delete', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'tobedeleted3@gmail.com', + First_Name: 'subcribed3', + Last_Name: ' User3', + }, + type: 'record', + }, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonDeletionDestConfig, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: 'https://www.zohoapis.in/crm/v6/Leads?ids=&wf_trigger=false', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonDeletionDestConfig, + }, + { + metadata: [ + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: false, + statusCode: 400, + error: + 'failed to fetch zoho id for record for "No contact is found with record details"', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'ZOHO', + module: 'destination', + implementation: 'cdkV2', + feature: 'router', + }, + destination: commonDeletionDestConfig, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, +]; diff --git a/test/integrations/destinations/zoho/router/upsert.ts b/test/integrations/destinations/zoho/router/upsert.ts new file mode 100644 index 0000000000..a2b898970d --- /dev/null +++ b/test/integrations/destinations/zoho/router/upsert.ts @@ -0,0 +1,771 @@ +import { defaultMockFns } from '../mocks'; +import { + commonOutput1, + commonUpsertDestConfig, + commonUpsertDestConfig2, + commonUpsertDestConfig2CustomModule, + commonUpsertDestConfig3, + destType, + upsertPayload1, + upsertPayload2, + upsertPayload3, +} from '../common'; + +export const upsertData = [ + { + name: destType, + description: 'Happy flow with Leads module', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: upsertPayload1, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig, + }, + { + message: upsertPayload2, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: { + duplicate_check_fields: ['email', 'Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + 'multi-language': ['Bengali'], + }, + ], + $append_values: { + 'multi-language': 'true', + 'multi class': 'false', + }, + trigger: ['workflow'], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: 'Happy flow with Trigger None', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: upsertPayload1, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig2, + }, + { + message: upsertPayload2, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig2, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: { + duplicate_check_fields: ['email', 'Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + 'multi-language': ['Bengali'], + }, + ], + $append_values: { + 'multi-language': 'true', + 'multi class': 'false', + }, + trigger: [], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig2, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: 'Happy flow with custom Module', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-CUSTOM', + identifierType: 'Email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + Name: 'ABC', + }, + type: 'record', + }, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig2CustomModule, + }, + { + message: { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-CUSTOM', + identifierType: 'Email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + 'multi-language': 'Bengali', + Name: 'ABC', + }, + type: 'record', + }, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig2, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/CUSTOM/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: { + duplicate_check_fields: ['Email', 'Name'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + Name: 'ABC', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + 'multi-language': ['Bengali'], + Name: 'ABC', + }, + ], + $append_values: { + 'multi-language': 'true', + 'multi class': 'false', + }, + trigger: [], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig2CustomModule, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: 'If module specific mandatory field is absent, event will fail', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'Email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + type: 'record', + }, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig, + }, + { + message: { + action: 'insert', + context: { + externalId: [ + { + type: 'ZOHO-Leads', + identifierType: 'Email', + }, + ], + mappedToDestination: 'true', + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + fields: { + 'multi-language': 'Bengali', + }, + type: 'record', + }, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: { + 'multi-language': 'true', + 'multi class': 'false', + }, + trigger: ['workflow'], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig, + }, + { + metadata: [ + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: false, + statusCode: 400, + error: 'Leads object must have the Last_Name property(ies).', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'ZOHO', + module: 'destination', + implementation: 'cdkV2', + feature: 'router', + }, + destination: commonUpsertDestConfig, + }, + ], + }, + }, + }, + }, + { + name: destType, + description: + 'If multiselect key decision is not set from UI, Rudderstack will consider those as normal fields', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: upsertPayload3, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig3, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: commonOutput1, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig3, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, + { + name: destType, + description: 'Test Batching', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: upsertPayload3, + metadata: { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig3, + }, + { + message: upsertPayload3, + metadata: { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig3, + }, + { + message: upsertPayload3, + metadata: { + jobId: 3, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + destination: commonUpsertDestConfig3, + }, + ], + destType, + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: { + duplicate_check_fields: ['Email'], + data: [ + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + { + Email: 'subscribed@eewrfrd.com', + First_Name: 'subcribed', + Last_Name: ' User', + }, + ], + $append_values: {}, + trigger: ['workflow'], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 1, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + { + jobId: 2, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig3, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.zohoapis.com/crm/v6/Leads/upsert', + headers: { + Authorization: 'Zoho-oauthtoken correct-access-token', + }, + params: {}, + body: { + JSON: commonOutput1, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + { + jobId: 3, + userId: 'u1', + secret: { + accessToken: 'correct-access-token', + }, + }, + ], + batched: true, + statusCode: 200, + destination: commonUpsertDestConfig3, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, +]; From f0918ed05721e0b7faf73929564f04842a47a3ef Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 22 Jul 2024 12:15:53 +0000 Subject: [PATCH 078/201] chore(release): 1.72.0 --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b01182c27..e4e2400f06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,35 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.72.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.3...v1.72.0) (2024-07-22) + + +### Features + +* add support for subscribing for RETL flow ([#3195](https://github.com/rudderlabs/rudder-transformer/issues/3195)) ([cc56004](https://github.com/rudderlabs/rudder-transformer/commit/cc560044ceb769da1f0090da4f690933552b6347)) +* braze source event mapping ([#3527](https://github.com/rudderlabs/rudder-transformer/issues/3527)) ([e357141](https://github.com/rudderlabs/rudder-transformer/commit/e357141d22e5296b6d1cda2e763ac24abfcb66e6)) +* introduces new user fields in titkok ads ([#3575](https://github.com/rudderlabs/rudder-transformer/issues/3575)) ([6304abb](https://github.com/rudderlabs/rudder-transformer/commit/6304abb2346f331b78e927b73e7c2ca17e94f4cf)) +* onboard cordial destination ([#3581](https://github.com/rudderlabs/rudder-transformer/issues/3581)) ([fbcdcd6](https://github.com/rudderlabs/rudder-transformer/commit/fbcdcd609888150efa0da33eec60a4cc7b436d06)) +* onboard new custom destination: wunderkind ([#3456](https://github.com/rudderlabs/rudder-transformer/issues/3456)) ([7f49a01](https://github.com/rudderlabs/rudder-transformer/commit/7f49a01b04322a38c5f96199d21097a9210e80fc)) +* onboarding new destination zoho ([#3555](https://github.com/rudderlabs/rudder-transformer/issues/3555)) ([20aa7f3](https://github.com/rudderlabs/rudder-transformer/commit/20aa7f35e13ad89e8a43fbbb743df73b0c103975)), closes [#3566](https://github.com/rudderlabs/rudder-transformer/issues/3566) +* update webhook destination to support all datatypes ([#3541](https://github.com/rudderlabs/rudder-transformer/issues/3541)) ([448f574](https://github.com/rudderlabs/rudder-transformer/commit/448f57484c57d4a55147e9566149c8b714a191c9)) + + +### Bug Fixes + +* add optional chaining to webengage page event ([bf10ca9](https://github.com/rudderlabs/rudder-transformer/commit/bf10ca9bb34caa571d58f9673872e9db3006f8ef)) +* add optional chaining to webengage page event ([#3570](https://github.com/rudderlabs/rudder-transformer/issues/3570)) ([20205d6](https://github.com/rudderlabs/rudder-transformer/commit/20205d66298f5633d3971888f0866db2c38a50e2)) +* add validation for type in google pubsub ([#3578](https://github.com/rudderlabs/rudder-transformer/issues/3578)) ([1bef212](https://github.com/rudderlabs/rudder-transformer/commit/1bef2126a75324598c2af0ecaffcf582f038af11)) +* adding readiness probe annotations for openfaas ([#3529](https://github.com/rudderlabs/rudder-transformer/issues/3529)) ([2eb92e3](https://github.com/rudderlabs/rudder-transformer/commit/2eb92e3332ef0e8b2f83621fe0130fbc1356fa91)) +* formatting ([a7f5c6a](https://github.com/rudderlabs/rudder-transformer/commit/a7f5c6a11b286d7194d369b2d75afcdf23879c03)) +* **gainsight:** replace myAxios utility with handleHttpRequest utility ([c9f934c](https://github.com/rudderlabs/rudder-transformer/commit/c9f934c87eb878e94f713febb36371ca3d240135)) +* **gainsight:** replace myAxios utility with handleHttpRequest utility ([#3241](https://github.com/rudderlabs/rudder-transformer/issues/3241)) ([04be1aa](https://github.com/rudderlabs/rudder-transformer/commit/04be1aaf438f824ddf61fc2f4d13eb7d8a223a9d)) +* job ordering for hs ([#3319](https://github.com/rudderlabs/rudder-transformer/issues/3319)) ([f840d54](https://github.com/rudderlabs/rudder-transformer/commit/f840d54dcbdc011eeb716dce74f2ecb36e99d0e9)) +* update authErrorCategory for 2 step verification issue for google ads ([b7ab0d2](https://github.com/rudderlabs/rudder-transformer/commit/b7ab0d25dbac9c45e7262a506ff0ea3aa9fe03c9)) +* update authErrorCategory for 2 step verification issue for google ads destinations ([#3552](https://github.com/rudderlabs/rudder-transformer/issues/3552)) ([5a0392e](https://github.com/rudderlabs/rudder-transformer/commit/5a0392ee24301486b7973531be28f8178ef03eab)) +* update python transformation fn ([#3491](https://github.com/rudderlabs/rudder-transformer/issues/3491)) ([f363f35](https://github.com/rudderlabs/rudder-transformer/commit/f363f3512f690e0745165f46587efdbe88f48683)) +* zapier event lower case issue ([#3535](https://github.com/rudderlabs/rudder-transformer/issues/3535)) ([277c1f0](https://github.com/rudderlabs/rudder-transformer/commit/277c1f00606b0ec5974e6bf24dae6749a1679069)) + ### [1.71.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.2...v1.71.3) (2024-07-15) diff --git a/package-lock.json b/package-lock.json index 12b2155bea..089bb6b110 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.71.3", + "version": "1.72.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.71.3", + "version": "1.72.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 7893676937..8fdce01b7e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.71.3", + "version": "1.72.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From b77d7157f857d1b416c23e545cdc556205c6f2dd Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Tue, 23 Jul 2024 11:59:44 +0530 Subject: [PATCH 079/201] chore: fix changelog --- CHANGELOG.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4e2400f06..97b2add9f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,25 +11,19 @@ All notable changes to this project will be documented in this file. See [standa * braze source event mapping ([#3527](https://github.com/rudderlabs/rudder-transformer/issues/3527)) ([e357141](https://github.com/rudderlabs/rudder-transformer/commit/e357141d22e5296b6d1cda2e763ac24abfcb66e6)) * introduces new user fields in titkok ads ([#3575](https://github.com/rudderlabs/rudder-transformer/issues/3575)) ([6304abb](https://github.com/rudderlabs/rudder-transformer/commit/6304abb2346f331b78e927b73e7c2ca17e94f4cf)) * onboard cordial destination ([#3581](https://github.com/rudderlabs/rudder-transformer/issues/3581)) ([fbcdcd6](https://github.com/rudderlabs/rudder-transformer/commit/fbcdcd609888150efa0da33eec60a4cc7b436d06)) -* onboard new custom destination: wunderkind ([#3456](https://github.com/rudderlabs/rudder-transformer/issues/3456)) ([7f49a01](https://github.com/rudderlabs/rudder-transformer/commit/7f49a01b04322a38c5f96199d21097a9210e80fc)) * onboarding new destination zoho ([#3555](https://github.com/rudderlabs/rudder-transformer/issues/3555)) ([20aa7f3](https://github.com/rudderlabs/rudder-transformer/commit/20aa7f35e13ad89e8a43fbbb743df73b0c103975)), closes [#3566](https://github.com/rudderlabs/rudder-transformer/issues/3566) * update webhook destination to support all datatypes ([#3541](https://github.com/rudderlabs/rudder-transformer/issues/3541)) ([448f574](https://github.com/rudderlabs/rudder-transformer/commit/448f57484c57d4a55147e9566149c8b714a191c9)) ### Bug Fixes -* add optional chaining to webengage page event ([bf10ca9](https://github.com/rudderlabs/rudder-transformer/commit/bf10ca9bb34caa571d58f9673872e9db3006f8ef)) * add optional chaining to webengage page event ([#3570](https://github.com/rudderlabs/rudder-transformer/issues/3570)) ([20205d6](https://github.com/rudderlabs/rudder-transformer/commit/20205d66298f5633d3971888f0866db2c38a50e2)) * add validation for type in google pubsub ([#3578](https://github.com/rudderlabs/rudder-transformer/issues/3578)) ([1bef212](https://github.com/rudderlabs/rudder-transformer/commit/1bef2126a75324598c2af0ecaffcf582f038af11)) * adding readiness probe annotations for openfaas ([#3529](https://github.com/rudderlabs/rudder-transformer/issues/3529)) ([2eb92e3](https://github.com/rudderlabs/rudder-transformer/commit/2eb92e3332ef0e8b2f83621fe0130fbc1356fa91)) -* formatting ([a7f5c6a](https://github.com/rudderlabs/rudder-transformer/commit/a7f5c6a11b286d7194d369b2d75afcdf23879c03)) -* **gainsight:** replace myAxios utility with handleHttpRequest utility ([c9f934c](https://github.com/rudderlabs/rudder-transformer/commit/c9f934c87eb878e94f713febb36371ca3d240135)) * **gainsight:** replace myAxios utility with handleHttpRequest utility ([#3241](https://github.com/rudderlabs/rudder-transformer/issues/3241)) ([04be1aa](https://github.com/rudderlabs/rudder-transformer/commit/04be1aaf438f824ddf61fc2f4d13eb7d8a223a9d)) * job ordering for hs ([#3319](https://github.com/rudderlabs/rudder-transformer/issues/3319)) ([f840d54](https://github.com/rudderlabs/rudder-transformer/commit/f840d54dcbdc011eeb716dce74f2ecb36e99d0e9)) -* update authErrorCategory for 2 step verification issue for google ads ([b7ab0d2](https://github.com/rudderlabs/rudder-transformer/commit/b7ab0d25dbac9c45e7262a506ff0ea3aa9fe03c9)) * update authErrorCategory for 2 step verification issue for google ads destinations ([#3552](https://github.com/rudderlabs/rudder-transformer/issues/3552)) ([5a0392e](https://github.com/rudderlabs/rudder-transformer/commit/5a0392ee24301486b7973531be28f8178ef03eab)) * update python transformation fn ([#3491](https://github.com/rudderlabs/rudder-transformer/issues/3491)) ([f363f35](https://github.com/rudderlabs/rudder-transformer/commit/f363f3512f690e0745165f46587efdbe88f48683)) -* zapier event lower case issue ([#3535](https://github.com/rudderlabs/rudder-transformer/issues/3535)) ([277c1f0](https://github.com/rudderlabs/rudder-transformer/commit/277c1f00606b0ec5974e6bf24dae6749a1679069)) ### [1.71.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.2...v1.71.3) (2024-07-15) From 475ebc104c69a52eaa425a9ed564ea9aca1ecd9c Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Tue, 23 Jul 2024 14:36:52 +0530 Subject: [PATCH 080/201] fix: garl get auth err category (#3590) fix: update getAuthErrCategory for garl destination --- .../networkHandler.js | 2 +- .../dataDelivery/business.ts | 8 +-- .../dataDelivery/data.ts | 3 +- .../dataDelivery/oauth.ts | 70 +++++++++++++++++++ .../network.ts | 34 +++++++++ 5 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 1247eae0b1..98659fdf88 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -159,7 +159,7 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }, response, - getAuthErrCategory(status), + getAuthErrCategory(destResponse), ); }; diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts index a036da149d..ed1741e939 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts @@ -4,20 +4,20 @@ import { generateProxyV1Payload, } from '../../../testUtils'; -const commonHeaders = { +export const commonHeaders = { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', 'developer-token': 'dummy-dev-token', }; -const commonParams = { +export const commonParams = { destination: 'google_adwords_remarketing_lists', listId: '709078448', customerId: '7693729833', consent: { adPersonalization: 'UNSPECIFIED', adUserData: 'UNSPECIFIED' }, }; -const validRequestPayload1 = { +export const validRequestPayload1 = { enablePartialFailure: true, operations: [ { @@ -92,7 +92,7 @@ const invalidArgumentRequestPayload = { const metadataArray = [generateGoogleOAuthMetadata(1)]; -const expectedStatTags = { +export const expectedStatTags = { destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', destinationId: 'default-destinationId', errorCategory: 'network', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/data.ts index 51827a38e2..8bde58c780 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/data.ts @@ -1,3 +1,4 @@ import { testScenariosForV0API, testScenariosForV1API } from './business'; +import { oauthError } from './oauth'; -export const data = [...testScenariosForV0API, ...testScenariosForV1API]; +export const data = [...testScenariosForV0API, ...testScenariosForV1API, ...oauthError]; diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts new file mode 100644 index 0000000000..b7f93a6945 --- /dev/null +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts @@ -0,0 +1,70 @@ +import { generateProxyV1Payload } from '../../../testUtils'; +import { commonHeaders, commonParams, expectedStatTags, validRequestPayload1 } from './business'; + +export const oauthError = [ + { + id: 'garl_oauth_scenario', + name: 'google_adwords_remarketing_lists', + description: + '[Proxy v1 API] :: Oauth where valid credentials are missing as mock response from destination', + successCriteria: 'The proxy should return 401 with authErrorCategory as REFRESH_TOKEN', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload({ + headers: commonHeaders, + params: commonParams, + JSON: validRequestPayload1, + endpoint: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + accessToken: 'dummy-access', + }), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'REFRESH_TOKEN', + message: + 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during ga_audience response transformation', + response: [ + { + error: + 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during ga_audience response transformation', + metadata: { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 1, + secret: { + accessToken: 'dummy-access', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + statusCode: 401, + }, + ], + statTags: { + destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', + }, + status: 401, + }, + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts index 8e7c0acbcf..1fd95858a1 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts @@ -207,4 +207,38 @@ export const networkCallsData = [ data: {}, }, }, + { + httpReq: { + url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', + data: { + job: { + type: 'CUSTOMER_MATCH_USER_LIST', + customerMatchUserListMetadata: { + userList: 'customers/7693729833/userLists/709078448', + consent: { + adPersonalization: 'UNSPECIFIED', + adUserData: 'UNSPECIFIED', + }, + }, + }, + }, + headers: { + Authorization: 'Bearer dummy-access', + 'Content-Type': 'application/json', + 'developer-token': 'dummy-dev-token', + }, + method: 'POST', + }, + httpRes: { + status: 401, + data: { + error: { + code: 401, + message: + 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', + status: 'UNAUTHENTICATED', + }, + }, + }, + }, ]; From bcabf227256f970e8b981cb1328c0d3e49a1dcf0 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 23 Jul 2024 11:08:38 +0000 Subject: [PATCH 081/201] chore(release): 1.72.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97b2add9f0..59bcb63fd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.72.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.0...v1.72.1) (2024-07-23) + + +### Bug Fixes + +* garl get auth err category ([#3590](https://github.com/rudderlabs/rudder-transformer/issues/3590)) ([475ebc1](https://github.com/rudderlabs/rudder-transformer/commit/475ebc104c69a52eaa425a9ed564ea9aca1ecd9c)) + ## [1.72.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.71.3...v1.72.0) (2024-07-22) diff --git a/package-lock.json b/package-lock.json index 089bb6b110..f68ebefd4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.72.0", + "version": "1.72.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.72.0", + "version": "1.72.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 8fdce01b7e..ea20285752 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.72.0", + "version": "1.72.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 96674af4ba006796175bd0c10774b88370cd1ef9 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Tue, 23 Jul 2024 16:55:33 +0530 Subject: [PATCH 082/201] chore: fix typo --- src/v0/destinations/klaviyo/transform.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index 4d3d0a8438..eac9dda8a0 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -20,7 +20,7 @@ const { batchSubscribeEvents, getIdFromNewOrExistingProfile, profileUpdateResponseBuilder, - addSubcribeFlagToTraits, + addSubscribeFlagToTraits, } = require('./util'); const { defaultRequestConfig, @@ -63,7 +63,7 @@ const identifyRequestHandler = async ( if (mappedToDestination) { addExternalIdToTraits(message); adduserIdFromExternalId(message); - traitsInfo = addSubcribeFlagToTraits(traitsInfo); + traitsInfo = addSubscribeFlagToTraits(traitsInfo); } let propertyPayload = constructPayload(message, MAPPING_CONFIG[category.name]); From 8508b4e75655c8c66b9e8c13239ff4ccb50b15e8 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 23 Jul 2024 11:30:38 +0000 Subject: [PATCH 083/201] chore(release): 1.72.2 --- CHANGELOG.md | 2 ++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59bcb63fd6..39548ce37c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.72.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.1...v1.72.2) (2024-07-23) + ### [1.72.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.0...v1.72.1) (2024-07-23) diff --git a/package-lock.json b/package-lock.json index f68ebefd4c..c4619cc586 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.72.1", + "version": "1.72.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.72.1", + "version": "1.72.2", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index ea20285752..94cf607c50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.72.1", + "version": "1.72.2", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 39d30d330bd51d8db07c0bc8936e56dec34c2034 Mon Sep 17 00:00:00 2001 From: Leonidas Vrachnis Date: Tue, 23 Jul 2024 16:30:45 +0200 Subject: [PATCH 084/201] chore: provide go test cases for webhook sources (#3549) --- go/.gitignore | 2 + go/README.md | 23 + go/go.mod | 11 + go/go.sum | 9 + go/webhook/testcases/testcases.go | 99 ++++ go/webhook/testcases/testdata/context.json | 5 + .../testcases/adjust/simple_track_call.json | 66 +++ ...e_track_call_with_no_query_parameters.json | 25 + .../auth0/add_member_to_an_organization.json | 126 ++++ .../testdata/testcases/auth0/empty_batch.json | 21 + .../testcases/auth0/missing_user_id.json | 97 +++ ...er_id_for_all_the_requests_in_a_batch.json | 143 +++++ .../testcases/auth0/successful_signup.json | 506 ++++++++++++++++ .../auth0/update_tenant_settings.json | 557 ++++++++++++++++++ .../testcases/close_crm/group_creation.json | 102 ++++ .../testcases/close_crm/lead_deletion.json | 105 ++++ .../testcases/close_crm/lead_update.json | 147 +++++ .../testcases/moengage/batch_of_events.json | 389 ++++++++++++ .../testcases/moengage/simple_track_call.json | 246 ++++++++ .../testcases/ortto/simple_track_call.json | 108 ++++ ...mple_track_call_with_unknown_field_id.json | 104 ++++ .../revenuecat/initial_purchase_event.json | 121 ++++ .../purchase_event_with_anonymous_user.json | 112 ++++ .../revenuecat/simple_track_call.json | 149 +++++ .../testcases/shopify/carts_create.json | 16 + .../shopify/fullfillments_updated_event.json | 251 ++++++++ .../testcases/shopify/identify_call.json | 174 ++++++ .../testcases/shopify/invalid_topic.json | 24 + .../testcases/shopify/no_query_params.json | 19 + .../shopify/unsupported_checkout_event.json | 50 ++ .../shopify/unsupported_event_type.json | 16 + .../testcases/slack/message_event.json | 145 +++++ .../testdata/testcases/slack/msg_event.json | 149 +++++ .../testdata/testcases/slack/team_joined.json | 89 +++ .../testcases/slack/team_joined_event.json | 85 +++ .../testcases/slack/verification.json | 31 + .../slack/webhook_url_verificatin_event.json | 26 + test/integrations/sources/adjust/data.ts | 3 + test/integrations/sources/auth0/data.ts | 6 + test/integrations/testTypes.ts | 3 + test/integrations/testUtils.ts | 6 +- test/scripts/generateJson.ts | 141 +++++ tsconfig.json | 2 +- 43 files changed, 4506 insertions(+), 3 deletions(-) create mode 100644 go/.gitignore create mode 100644 go/README.md create mode 100644 go/go.mod create mode 100644 go/go.sum create mode 100644 go/webhook/testcases/testcases.go create mode 100644 go/webhook/testcases/testdata/context.json create mode 100644 go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json create mode 100644 go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/empty_batch.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/successful_signup.json create mode 100644 go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json create mode 100644 go/webhook/testcases/testdata/testcases/close_crm/group_creation.json create mode 100644 go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json create mode 100644 go/webhook/testcases/testdata/testcases/close_crm/lead_update.json create mode 100644 go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json create mode 100644 go/webhook/testcases/testdata/testcases/moengage/simple_track_call.json create mode 100644 go/webhook/testcases/testdata/testcases/ortto/simple_track_call.json create mode 100644 go/webhook/testcases/testdata/testcases/ortto/simple_track_call_with_unknown_field_id.json create mode 100644 go/webhook/testcases/testdata/testcases/revenuecat/initial_purchase_event.json create mode 100644 go/webhook/testcases/testdata/testcases/revenuecat/purchase_event_with_anonymous_user.json create mode 100644 go/webhook/testcases/testdata/testcases/revenuecat/simple_track_call.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/carts_create.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/identify_call.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/no_query_params.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/message_event.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/msg_event.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/team_joined.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/team_joined_event.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/verification.json create mode 100644 go/webhook/testcases/testdata/testcases/slack/webhook_url_verificatin_event.json create mode 100644 test/scripts/generateJson.ts diff --git a/go/.gitignore b/go/.gitignore new file mode 100644 index 0000000000..d1147c6492 --- /dev/null +++ b/go/.gitignore @@ -0,0 +1,2 @@ +go.work +go.work.sum \ No newline at end of file diff --git a/go/README.md b/go/README.md new file mode 100644 index 0000000000..5286119183 --- /dev/null +++ b/go/README.md @@ -0,0 +1,23 @@ +# GO libraries + +## webhook/testdata + +To generate the test files use: + +```bash +go generate ./... +``` + +Work against local rudder-server: + +```bash +go work init +go work use . +go work use ../../rudder-server +``` + +Then run the webhook tests: + +```bash +go test github.com/rudderlabs/rudder-server/gateway/webhook -count 1 -timeout 2m +``` diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 0000000000..26ebf86140 --- /dev/null +++ b/go/go.mod @@ -0,0 +1,11 @@ +module github.com/rudderlabs/rudder-transformer/go + +go 1.22.4 + +require github.com/stretchr/testify v1.9.0 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 0000000000..e20fa14b0b --- /dev/null +++ b/go/go.sum @@ -0,0 +1,9 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/webhook/testcases/testcases.go b/go/webhook/testcases/testcases.go new file mode 100644 index 0000000000..92a808dcbd --- /dev/null +++ b/go/webhook/testcases/testcases.go @@ -0,0 +1,99 @@ +package testcases + +import ( + "embed" + "encoding/json" + "io/fs" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +type Setup struct { + Context Context + Cases []Case +} + +type Context struct { + Now time.Time + RequestIP string `json:"request_ip"` +} + +type Case struct { + Name string + Description string + Skip string + Input Input + Output Output +} + +type Input struct { + Request Request +} +type Request struct { + Method string + RawQuery string `json:"query"` + Headers map[string]string + Body json.RawMessage +} + +type Output struct { + Response Response + Queue []json.RawMessage + ErrQueue []json.RawMessage `json:"err_queue"` +} + +type Response struct { + Body json.RawMessage + StatusCode int `json:"status"` +} + +//go:generate npx ts-node ../../../test/scripts/generateJson.ts sources ./testdata/testcases +//go:generate npx prettier --write ./testdata/**/*.json + +//go:embed testdata/context.json +var contextData []byte + +//go:embed testdata/testcases/**/*.json +var testdata embed.FS + +func Load(t *testing.T) Setup { + t.Helper() + + var tc Context + err := json.Unmarshal(contextData, &tc) + require.NoError(t, err) + + var tcs []Case + err = fs.WalkDir(testdata, ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + + if d.IsDir() { + return nil + } + + f, err := testdata.Open(path) + if err != nil { + return err + } + defer f.Close() + + var tc Case + err = json.NewDecoder(f).Decode(&tc) + if err != nil { + return err + } + tcs = append(tcs, tc) + + return nil + }) + require.NoError(t, err) + + return Setup{ + Context: tc, + Cases: tcs, + } +} diff --git a/go/webhook/testcases/testdata/context.json b/go/webhook/testcases/testdata/context.json new file mode 100644 index 0000000000..1b1f135638 --- /dev/null +++ b/go/webhook/testcases/testdata/context.json @@ -0,0 +1,5 @@ +{ + "request_ip_comment": "192.0.2.x/24 - This block is assigned as \"TEST-NET\" for use in documentation and example code.", + "request_ip": "192.0.2.30", + "now": "2024-03-03T04:48:29.000Z" +} diff --git a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json new file mode 100644 index 0000000000..ce508cacff --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json @@ -0,0 +1,66 @@ +{ + "name": "adjust", + "description": "Simple track call", + "input": { + "request": { + "body": { + "id": "adjust", + "query_parameters": { + "gps_adid": ["38400000-8cf0-11bd-b23e-10b96e40000d"], + "adid": ["18546f6171f67e29d1cb983322ad1329"], + "tracker_token": ["abc"], + "custom": ["custom"], + "tracker_name": ["dummy"], + "created_at": ["1404214665"], + "event_name": ["Click"] + }, + "updated_at": "2023-02-10T12:16:07.251Z", + "created_at": "2023-02-10T12:05:04.402Z" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Adjust" + }, + "device": { + "id ": "18546f6171f67e29d1cb983322ad1329" + } + }, + "integrations": { + "Adjust": false + }, + "type": "track", + "event": "Click", + "originalTimestamp": "2014-07-01T11:37:45.000Z", + "timestamp": "2014-07-01T11:37:45.000Z", + "properties": { + "gps_adid": "38400000-8cf0-11bd-b23e-10b96e40000d", + "tracker_token": "abc", + "custom": "custom", + "tracker_name": "dummy" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "FIXME" +} diff --git a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json new file mode 100644 index 0000000000..f8e5a480a0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json @@ -0,0 +1,25 @@ +{ + "name": "adjust", + "description": "Simple track call with no query parameters", + "input": { + "request": { + "body": { + "id": "adjust", + "updated_at": "2023-02-10T12:16:07.251Z", + "created_at": "2023-02-10T12:05:04.402Z" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Query_parameters is missing" + }, + "queue": [], + "errQueue": [null] + }, + "skip": "FIXME" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json b/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json new file mode 100644 index 0000000000..77fbd643c8 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json @@ -0,0 +1,126 @@ +{ + "name": "auth0", + "description": "add member to an organization", + "input": { + "request": { + "body": { + "log_id": "90020221031061004280169676882609459981150114445973782546", + "data": { + "date": "2022-10-31T06:09:59.135Z", + "type": "sapi", + "description": "Add members to an organization", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "ip": "35.167.74.121", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "details": { + "request": { + "ip": "35.167.74.121", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "google-oauth2|123456" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f" + } + }, + "body": { + "members": ["auth0|123456"] + }, + "path": "/api/v2/organizations/org_eoe8p2atZ7furBxg/members", + "query": {}, + "method": "post", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": {}, + "statusCode": 204 + } + }, + "user_id": "google-oauth2|123456", + "log_id": "90020221031061004280169676882609459981150114445973782546" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "group", + "sentAt": "2022-10-31T06:09:59.135Z", + "userId": "google-oauth2|123456", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "userId": "google-oauth2|123456" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "request_ip": "35.167.74.121", + "integration": { + "name": "Auth0" + } + }, + "groupId": "org_eoe8p2atZ7furBxg", + "properties": { + "log_id": "90020221031061004280169676882609459981150114445973782546", + "details": { + "request": { + "ip": "35.167.74.121", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "google-oauth2|123456" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f" + } + }, + "body": { + "members": ["auth0|123456"] + }, + "path": "/api/v2/organizations/org_eoe8p2atZ7furBxg/members", + "query": {}, + "method": "post", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": {}, + "statusCode": 204 + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "description": "Add members to an organization", + "source_type": "sapi" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T06:09:59.135Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json b/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json new file mode 100644 index 0000000000..709ee35525 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json @@ -0,0 +1,21 @@ +{ + "name": "auth0", + "description": "empty batch", + "input": { + "request": { + "body": [], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json new file mode 100644 index 0000000000..8dc148b4c2 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json @@ -0,0 +1,97 @@ +{ + "name": "auth0", + "description": "missing userId", + "input": { + "request": { + "body": { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "data": { + "date": "2022-10-31T05:57:06.859Z", + "type": "ss", + "description": "", + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "ip": "35.166.202.113", + "user_agent": "unknown", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "user_id": "", + "user_name": "testRudderlabs+21@gmail.com", + "strategy": "auth0", + "strategy_type": "database", + "log_id": "90020221031055712103169676686005480714681762668315934738" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "identify", + "sentAt": "2022-10-31T05:57:06.859Z", + "traits": { + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S" + }, + "userId": "", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "traits": { + "userId": "", + "user_name": "testRudderlabs+21@gmail.com" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "userAgent": "unknown", + "request_ip": "35.166.202.113", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "description": "", + "source_type": "ss" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T05:57:06.859Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json new file mode 100644 index 0000000000..774ab7e7e2 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json @@ -0,0 +1,143 @@ +{ + "name": "auth0", + "description": "missing userId for all the requests in a batch", + "input": { + "request": { + "body": [ + { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "data": { + "date": "2022-10-31T05:57:06.859Z", + "type": "ss", + "description": "", + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "ip": "35.166.202.113", + "user_agent": "unknown", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "user_id": "", + "user_name": "testRudderlabs+21@gmail.com", + "strategy": "auth0", + "strategy_type": "database", + "log_id": "90020221031055712103169676686005480714681762668315934738" + } + }, + { + "log_id": "90020221031055712103169676686007898566320991926665347090", + "data": { + "date": "2022-10-31T05:57:06.874Z", + "type": "sapi", + "description": "Create a User", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "ip": "35.166.202.113", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "log_id": "90020221031055712103169676686007898566320991926665347090" + } + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "identify", + "userId": "", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "sentAt": "2022-10-31T05:57:06.859Z", + "traits": { + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S" + }, + "context": { + "traits": { + "userId": "", + "user_name": "testRudderlabs+21@gmail.com" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "userAgent": "unknown", + "request_ip": "35.166.202.113", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "description": "", + "source_type": "ss" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T05:57:06.859Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "type": "track", + "event": "Success API Operation", + "sentAt": "2022-10-31T05:57:06.874Z", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "request_ip": "35.166.202.113", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031055712103169676686007898566320991926665347090", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "description": "Create a User", + "source_type": "sapi" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T05:57:06.874Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json b/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json new file mode 100644 index 0000000000..91fba2bd4b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json @@ -0,0 +1,506 @@ +{ + "name": "auth0", + "description": "successful signup", + "input": { + "request": { + "body": [ + { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "data": { + "date": "2022-10-31T05:57:06.859Z", + "type": "ss", + "description": "", + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "ip": "35.166.202.113", + "user_agent": "unknown", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "user_id": "auth0|dummyPassword", + "user_name": "testRudderlabs+21@gmail.com", + "strategy": "auth0", + "strategy_type": "database", + "log_id": "90020221031055712103169676686005480714681762668315934738" + } + }, + { + "log_id": "90020221031055712103169676686007898566320991926665347090", + "data": { + "date": "2022-10-31T05:57:06.874Z", + "type": "sapi", + "description": "Create a User", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "ip": "35.166.202.113", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "details": { + "request": { + "ip": "35.166.202.113", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "auth0|dummyPassword" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f", + "scopes": [ + "create:actions", + "create:actions_log_sessions", + "create:client_credentials", + "create:client_grants", + "create:clients", + "create:connections", + "create:custom_domains", + "create:email_provider", + "create:email_templates", + "create:guardian_enrollment_tickets", + "create:integrations", + "create:log_streams", + "create:organization_connections", + "create:organization_invitations", + "create:organization_member_roles", + "create:organization_members", + "create:organizations", + "create:requested_scopes", + "create:resource_servers", + "create:roles", + "create:rules", + "create:shields", + "create:signing_keys", + "create:tenant_invitations", + "create:test_email_dispatch", + "create:users", + "delete:actions", + "delete:anomaly_blocks", + "delete:branding", + "delete:client_credentials", + "delete:client_grants", + "delete:clients", + "delete:connections", + "delete:custom_domains", + "delete:device_credentials", + "delete:email_provider", + "delete:email_templates", + "delete:grants", + "delete:guardian_enrollments", + "delete:integrations", + "delete:log_streams", + "delete:organization_connections", + "delete:organization_invitations", + "delete:organization_member_roles", + "delete:organization_members", + "delete:organizations", + "delete:owners", + "delete:requested_scopes", + "delete:resource_servers", + "delete:roles", + "delete:rules", + "delete:rules_configs", + "delete:shields", + "delete:tenant_invitations", + "delete:tenant_members", + "delete:tenants", + "delete:users", + "read:actions", + "read:anomaly_blocks", + "read:attack_protection", + "read:branding", + "read:checks", + "read:client_credentials", + "read:client_grants", + "read:client_keys", + "read:clients", + "read:connections", + "read:custom_domains", + "read:device_credentials", + "read:email_provider", + "read:email_templates", + "read:email_triggers", + "read:entity_counts", + "read:grants", + "read:guardian_factors", + "read:insights", + "read:integrations", + "read:log_streams", + "read:logs", + "read:mfa_policies", + "read:organization_connections", + "read:organization_invitations", + "read:organization_member_roles", + "read:organization_members", + "read:organizations", + "read:prompts", + "read:requested_scopes", + "read:resource_servers", + "read:roles", + "read:rules", + "read:rules_configs", + "read:shields", + "read:signing_keys", + "read:stats", + "read:tenant_invitations", + "read:tenant_members", + "read:tenant_settings", + "read:triggers", + "read:users", + "run:checks", + "update:actions", + "update:attack_protection", + "update:branding", + "update:client_credentials", + "update:client_grants", + "update:client_keys", + "update:clients", + "update:connections", + "update:custom_domains", + "update:email_provider", + "update:email_templates", + "update:email_triggers", + "update:guardian_factors", + "update:integrations", + "update:log_streams", + "update:mfa_policies", + "update:organization_connections", + "update:organizations", + "update:prompts", + "update:requested_scopes", + "update:resource_servers", + "update:roles", + "update:rules", + "update:rules_configs", + "update:shields", + "update:signing_keys", + "update:tenant_members", + "update:tenant_settings", + "update:triggers", + "update:users" + ] + } + }, + "body": { + "email": "testRudderlabs+21@gmail.com", + "password": "dummyPassword", + "connection": "Username-Password-Authentication" + }, + "path": "/api/v2/users", + "query": {}, + "method": "post", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": { + "name": "testRudderlabs+21@gmail.com", + "email": "testRudderlabs+21@gmail.com", + "picture": "https://s.gravatar.com/avatar/0902f9d02b92aed9f0ac59aaf9475b60?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fbh.png", + "user_id": "auth0|dummyPassword", + "nickname": "testRudderlabs+21", + "created_at": "2022-10-31T05:57:06.864Z", + "identities": [ + { + "user_id": "auth0|dummyPassword", + "isSocial": false, + "provider": "auth0", + "connection": "Username-Password-Authentication" + } + ], + "updated_at": "2022-10-31T05:57:06.864Z", + "email_verified": false + }, + "statusCode": 201 + } + }, + "user_id": "auth0|dummyPassword", + "log_id": "90020221031055712103169676686007898566320991926665347090" + } + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "identify", + "sentAt": "2022-10-31T05:57:06.859Z", + "traits": { + "connection": "Username-Password-Authentication", + "connection_id": "con_djwCjiwyID0vZy1S" + }, + "userId": "auth0|dummyPassword", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "traits": { + "userId": "auth0|dummyPassword", + "user_name": "testRudderlabs+21@gmail.com" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "userAgent": "unknown", + "request_ip": "35.166.202.113", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031055712103169676686005480714681762668315934738", + "details": { + "body": { + "email": "testRudderlabs+21@gmail.com", + "tenant": "dev-cu4jy2zgao6yx15x", + "password": "dummyPassword", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "connection": "Username-Password-Authentication" + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "All Applications", + "description": "", + "source_type": "ss" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T05:57:06.859Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "type": "track", + "event": "Success API Operation", + "sentAt": "2022-10-31T05:57:06.874Z", + "userId": "auth0|dummyPassword", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "userId": "auth0|dummyPassword" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "request_ip": "35.166.202.113", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031055712103169676686007898566320991926665347090", + "details": { + "request": { + "ip": "35.166.202.113", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "auth0|dummyPassword" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f", + "scopes": [ + "create:actions", + "create:actions_log_sessions", + "create:client_credentials", + "create:client_grants", + "create:clients", + "create:connections", + "create:custom_domains", + "create:email_provider", + "create:email_templates", + "create:guardian_enrollment_tickets", + "create:integrations", + "create:log_streams", + "create:organization_connections", + "create:organization_invitations", + "create:organization_member_roles", + "create:organization_members", + "create:organizations", + "create:requested_scopes", + "create:resource_servers", + "create:roles", + "create:rules", + "create:shields", + "create:signing_keys", + "create:tenant_invitations", + "create:test_email_dispatch", + "create:users", + "delete:actions", + "delete:anomaly_blocks", + "delete:branding", + "delete:client_credentials", + "delete:client_grants", + "delete:clients", + "delete:connections", + "delete:custom_domains", + "delete:device_credentials", + "delete:email_provider", + "delete:email_templates", + "delete:grants", + "delete:guardian_enrollments", + "delete:integrations", + "delete:log_streams", + "delete:organization_connections", + "delete:organization_invitations", + "delete:organization_member_roles", + "delete:organization_members", + "delete:organizations", + "delete:owners", + "delete:requested_scopes", + "delete:resource_servers", + "delete:roles", + "delete:rules", + "delete:rules_configs", + "delete:shields", + "delete:tenant_invitations", + "delete:tenant_members", + "delete:tenants", + "delete:users", + "read:actions", + "read:anomaly_blocks", + "read:attack_protection", + "read:branding", + "read:checks", + "read:client_credentials", + "read:client_grants", + "read:client_keys", + "read:clients", + "read:connections", + "read:custom_domains", + "read:device_credentials", + "read:email_provider", + "read:email_templates", + "read:email_triggers", + "read:entity_counts", + "read:grants", + "read:guardian_factors", + "read:insights", + "read:integrations", + "read:log_streams", + "read:logs", + "read:mfa_policies", + "read:organization_connections", + "read:organization_invitations", + "read:organization_member_roles", + "read:organization_members", + "read:organizations", + "read:prompts", + "read:requested_scopes", + "read:resource_servers", + "read:roles", + "read:rules", + "read:rules_configs", + "read:shields", + "read:signing_keys", + "read:stats", + "read:tenant_invitations", + "read:tenant_members", + "read:tenant_settings", + "read:triggers", + "read:users", + "run:checks", + "update:actions", + "update:attack_protection", + "update:branding", + "update:client_credentials", + "update:client_grants", + "update:client_keys", + "update:clients", + "update:connections", + "update:custom_domains", + "update:email_provider", + "update:email_templates", + "update:email_triggers", + "update:guardian_factors", + "update:integrations", + "update:log_streams", + "update:mfa_policies", + "update:organization_connections", + "update:organizations", + "update:prompts", + "update:requested_scopes", + "update:resource_servers", + "update:roles", + "update:rules", + "update:rules_configs", + "update:shields", + "update:signing_keys", + "update:tenant_members", + "update:tenant_settings", + "update:triggers", + "update:users" + ] + } + }, + "body": { + "email": "testRudderlabs+21@gmail.com", + "password": "dummyPassword", + "connection": "Username-Password-Authentication" + }, + "path": "/api/v2/users", + "query": {}, + "method": "post", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": { + "name": "testRudderlabs+21@gmail.com", + "email": "testRudderlabs+21@gmail.com", + "picture": "https://s.gravatar.com/avatar/0902f9d02b92aed9f0ac59aaf9475b60?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fbh.png", + "user_id": "auth0|dummyPassword", + "nickname": "testRudderlabs+21", + "created_at": "2022-10-31T05:57:06.864Z", + "identities": [ + { + "user_id": "auth0|dummyPassword", + "isSocial": false, + "provider": "auth0", + "connection": "Username-Password-Authentication" + } + ], + "updated_at": "2022-10-31T05:57:06.864Z", + "email_verified": false + }, + "statusCode": 201 + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "description": "Create a User", + "source_type": "sapi" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T05:57:06.874Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json b/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json new file mode 100644 index 0000000000..da005184ad --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json @@ -0,0 +1,557 @@ +{ + "name": "auth0", + "description": "update tenant settings", + "input": { + "request": { + "body": [ + { + "log_id": "90020221031061527239169676960191065529099349299958906898", + "data": { + "date": "2022-10-31T06:15:25.201Z", + "type": "sapi", + "description": "Update tenant settings", + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "ip": "35.160.3.103", + "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "details": { + "request": { + "ip": "35.160.3.103", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "google-oauth2|123456" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f", + "scopes": [ + "create:actions", + "create:actions_log_sessions", + "create:client_credentials", + "create:client_grants", + "create:clients", + "create:connections", + "create:custom_domains", + "create:email_provider", + "create:email_templates", + "create:guardian_enrollment_tickets", + "create:integrations", + "create:log_streams", + "create:organization_connections", + "create:organization_invitations", + "create:organization_member_roles", + "create:organization_members", + "create:organizations", + "create:requested_scopes", + "create:resource_servers", + "create:roles", + "create:rules", + "create:shields", + "create:signing_keys", + "create:tenant_invitations", + "create:test_email_dispatch", + "create:users", + "delete:actions", + "delete:anomaly_blocks", + "delete:branding", + "delete:client_credentials", + "delete:client_grants", + "delete:clients", + "delete:connections", + "delete:custom_domains", + "delete:device_credentials", + "delete:email_provider", + "delete:email_templates", + "delete:grants", + "delete:guardian_enrollments", + "delete:integrations", + "delete:log_streams", + "delete:organization_connections", + "delete:organization_invitations", + "delete:organization_member_roles", + "delete:organization_members", + "delete:organizations", + "delete:owners", + "delete:requested_scopes", + "delete:resource_servers", + "delete:roles", + "delete:rules", + "delete:rules_configs", + "delete:shields", + "delete:tenant_invitations", + "delete:tenant_members", + "delete:tenants", + "delete:users", + "read:actions", + "read:anomaly_blocks", + "read:attack_protection", + "read:branding", + "read:checks", + "read:client_credentials", + "read:client_grants", + "read:client_keys", + "read:clients", + "read:connections", + "read:custom_domains", + "read:device_credentials", + "read:email_provider", + "read:email_templates", + "read:email_triggers", + "read:entity_counts", + "read:grants", + "read:guardian_factors", + "read:insights", + "read:integrations", + "read:log_streams", + "read:logs", + "read:mfa_policies", + "read:organization_connections", + "read:organization_invitations", + "read:organization_member_roles", + "read:organization_members", + "read:organizations", + "read:prompts", + "read:requested_scopes", + "read:resource_servers", + "read:roles", + "read:rules", + "read:rules_configs", + "read:shields", + "read:signing_keys", + "read:stats", + "read:tenant_invitations", + "read:tenant_members", + "read:tenant_settings", + "read:triggers", + "read:users", + "run:checks", + "update:actions", + "update:attack_protection", + "update:branding", + "update:client_credentials", + "update:client_grants", + "update:client_keys", + "update:clients", + "update:connections", + "update:custom_domains", + "update:email_provider", + "update:email_templates", + "update:email_triggers", + "update:guardian_factors", + "update:integrations", + "update:log_streams", + "update:mfa_policies", + "update:organization_connections", + "update:organizations", + "update:prompts", + "update:requested_scopes", + "update:resource_servers", + "update:roles", + "update:rules", + "update:rules_configs", + "update:shields", + "update:signing_keys", + "update:tenant_members", + "update:tenant_settings", + "update:triggers", + "update:users" + ] + } + }, + "body": { + "picture_url": "", + "support_url": "", + "friendly_name": "mecro-action", + "support_email": "support@test.com" + }, + "path": "/api/v2/tenants/settings", + "query": {}, + "method": "patch", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": { + "flags": { + "enable_sso": true, + "universal_login": true, + "disable_impersonation": true, + "allow_changing_enable_sso": false, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "new_universal_login_experience_enabled": true, + "enforce_client_authentication_on_passwordless_start": true, + "cannot_change_enforce_client_authentication_on_passwordless_start": true + }, + "picture_url": "", + "support_url": "", + "friendly_name": "mecro-action", + "support_email": "support@test.com", + "enabled_locales": ["en"], + "sandbox_version": "16", + "universal_login": {} + }, + "statusCode": 200 + } + }, + "user_id": "google-oauth2|123456", + "log_id": "90020221031061527239169676960191065529099349299958906898" + } + }, + { + "log_id": "90020221031061530247169676961198100736838335677367058450", + "data": { + "date": "2022-10-31T06:15:25.196Z", + "type": "gd_tenant_update", + "description": "Guardian - Updates tenant settings", + "ip": "35.160.3.103", + "details": { + "request": { + "ip": "35.160.3.103", + "auth": { + "scopes": [ + "read:authenticators", + "remove:authenticators", + "update:authenticators", + "create:authenticators", + "read:enrollments", + "delete:enrollments", + "read:factors", + "update:factors", + "update:tenant_settings", + "update:users", + "create:enrollment_tickets", + "create:users" + ], + "subject": "google-oauth2|123456", + "strategy": "jwt_api2_internal_token" + }, + "body": { + "picture_url": "[REDACTED]", + "friendly_name": "[REDACTED]" + }, + "path": "/api/tenants/settings", + "query": {}, + "method": "PATCH" + }, + "response": { + "body": { + "name": "dev-cu4jy2zgao6yx15x", + "picture_url": "[REDACTED]", + "friendly_name": "[REDACTED]", + "guardian_mfa_page": "[REDACTED]" + }, + "statusCode": 200 + } + }, + "user_id": "google-oauth2|123456", + "log_id": "90020221031061530247169676961198100736838335677367058450" + } + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Success API Operation", + "sentAt": "2022-10-31T06:15:25.201Z", + "userId": "google-oauth2|123456", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "userId": "google-oauth2|123456" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", + "request_ip": "35.160.3.103", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031061527239169676960191065529099349299958906898", + "details": { + "request": { + "ip": "35.160.3.103", + "auth": { + "user": { + "name": "rudder test", + "email": "test@rudderstack.com", + "user_id": "google-oauth2|123456" + }, + "strategy": "jwt", + "credentials": { + "jti": "571921bf7833a97efabf08d765a0ec8f", + "scopes": [ + "create:actions", + "create:actions_log_sessions", + "create:client_credentials", + "create:client_grants", + "create:clients", + "create:connections", + "create:custom_domains", + "create:email_provider", + "create:email_templates", + "create:guardian_enrollment_tickets", + "create:integrations", + "create:log_streams", + "create:organization_connections", + "create:organization_invitations", + "create:organization_member_roles", + "create:organization_members", + "create:organizations", + "create:requested_scopes", + "create:resource_servers", + "create:roles", + "create:rules", + "create:shields", + "create:signing_keys", + "create:tenant_invitations", + "create:test_email_dispatch", + "create:users", + "delete:actions", + "delete:anomaly_blocks", + "delete:branding", + "delete:client_credentials", + "delete:client_grants", + "delete:clients", + "delete:connections", + "delete:custom_domains", + "delete:device_credentials", + "delete:email_provider", + "delete:email_templates", + "delete:grants", + "delete:guardian_enrollments", + "delete:integrations", + "delete:log_streams", + "delete:organization_connections", + "delete:organization_invitations", + "delete:organization_member_roles", + "delete:organization_members", + "delete:organizations", + "delete:owners", + "delete:requested_scopes", + "delete:resource_servers", + "delete:roles", + "delete:rules", + "delete:rules_configs", + "delete:shields", + "delete:tenant_invitations", + "delete:tenant_members", + "delete:tenants", + "delete:users", + "read:actions", + "read:anomaly_blocks", + "read:attack_protection", + "read:branding", + "read:checks", + "read:client_credentials", + "read:client_grants", + "read:client_keys", + "read:clients", + "read:connections", + "read:custom_domains", + "read:device_credentials", + "read:email_provider", + "read:email_templates", + "read:email_triggers", + "read:entity_counts", + "read:grants", + "read:guardian_factors", + "read:insights", + "read:integrations", + "read:log_streams", + "read:logs", + "read:mfa_policies", + "read:organization_connections", + "read:organization_invitations", + "read:organization_member_roles", + "read:organization_members", + "read:organizations", + "read:prompts", + "read:requested_scopes", + "read:resource_servers", + "read:roles", + "read:rules", + "read:rules_configs", + "read:shields", + "read:signing_keys", + "read:stats", + "read:tenant_invitations", + "read:tenant_members", + "read:tenant_settings", + "read:triggers", + "read:users", + "run:checks", + "update:actions", + "update:attack_protection", + "update:branding", + "update:client_credentials", + "update:client_grants", + "update:client_keys", + "update:clients", + "update:connections", + "update:custom_domains", + "update:email_provider", + "update:email_templates", + "update:email_triggers", + "update:guardian_factors", + "update:integrations", + "update:log_streams", + "update:mfa_policies", + "update:organization_connections", + "update:organizations", + "update:prompts", + "update:requested_scopes", + "update:resource_servers", + "update:roles", + "update:rules", + "update:rules_configs", + "update:shields", + "update:signing_keys", + "update:tenant_members", + "update:tenant_settings", + "update:triggers", + "update:users" + ] + } + }, + "body": { + "picture_url": "", + "support_url": "", + "friendly_name": "mecro-action", + "support_email": "support@test.com" + }, + "path": "/api/v2/tenants/settings", + "query": {}, + "method": "patch", + "channel": "https://manage.auth0.com/", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36" + }, + "response": { + "body": { + "flags": { + "enable_sso": true, + "universal_login": true, + "disable_impersonation": true, + "allow_changing_enable_sso": false, + "revoke_refresh_token_grant": false, + "disable_clickjack_protection_headers": false, + "new_universal_login_experience_enabled": true, + "enforce_client_authentication_on_passwordless_start": true, + "cannot_change_enforce_client_authentication_on_passwordless_start": true + }, + "picture_url": "", + "support_url": "", + "friendly_name": "mecro-action", + "support_email": "support@test.com", + "enabled_locales": ["en"], + "sandbox_version": "16", + "universal_login": {} + }, + "statusCode": 200 + } + }, + "client_id": "vQcJNDTxsM1W72eHFonRJdzyOvawlwIt", + "client_name": "", + "description": "Update tenant settings", + "source_type": "sapi" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T06:15:25.201Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "type": "track", + "event": "Guardian tenant update", + "sentAt": "2022-10-31T06:15:25.196Z", + "userId": "google-oauth2|123456", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "userId": "google-oauth2|123456" + }, + "request_ip": "35.160.3.103", + "integration": { + "name": "Auth0" + } + }, + "properties": { + "log_id": "90020221031061530247169676961198100736838335677367058450", + "details": { + "request": { + "ip": "35.160.3.103", + "auth": { + "scopes": [ + "read:authenticators", + "remove:authenticators", + "update:authenticators", + "create:authenticators", + "read:enrollments", + "delete:enrollments", + "read:factors", + "update:factors", + "update:tenant_settings", + "update:users", + "create:enrollment_tickets", + "create:users" + ], + "subject": "google-oauth2|123456", + "strategy": "jwt_api2_internal_token" + }, + "body": { + "picture_url": "[REDACTED]", + "friendly_name": "[REDACTED]" + }, + "path": "/api/tenants/settings", + "query": {}, + "method": "PATCH" + }, + "response": { + "body": { + "name": "dev-cu4jy2zgao6yx15x", + "picture_url": "[REDACTED]", + "friendly_name": "[REDACTED]", + "guardian_mfa_page": "[REDACTED]" + }, + "statusCode": 200 + } + }, + "description": "Guardian - Updates tenant settings", + "source_type": "gd_tenant_update" + }, + "integrations": { + "Auth0": false + }, + "originalTimestamp": "2022-10-31T06:15:25.196Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "dynamic anonymousId" +} diff --git a/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json new file mode 100644 index 0000000000..bff58cdf04 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json @@ -0,0 +1,102 @@ +{ + "name": "close_crm", + "description": "group creation", + "input": { + "request": { + "body": { + "event": { + "subscription_id": "whsub_123", + "event": { + "id": "ev_123", + "date_created": "2024-06-13T03:53:33.917000", + "date_updated": "2024-06-13T03:53:33.917000", + "organization_id": "orga_123", + "user_id": "user_123", + "request_id": "req_123", + "api_key_id": null, + "oauth_client_id": null, + "oauth_scope": null, + "object_type": "group", + "object_id": "group_123", + "lead_id": null, + "action": "created", + "changed_fields": [], + "meta": { + "request_path": "/api/v1/graphql/", + "request_method": "POST" + }, + "data": { + "id": "group_123", + "name": "Test group", + "members": [ + { + "user_id": "user_123" + } + ] + }, + "previous_data": {} + } + }, + "source": {} + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "integration": { + "name": "CloseCRM" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "group created", + "integrations": { + "CloseCRM": false + }, + "messageId": "ev_123", + "originalTimestamp": "2024-06-ThT03:53:33.917+00:00", + "properties": { + "action": "created", + "data": { + "id": "group_123", + "members": [ + { + "user_id": "user_123" + } + ], + "name": "Test group" + }, + "date_created": "2024-06-13T03:53:33.917000", + "date_updated": "2024-06-13T03:53:33.917000", + "id": "ev_123", + "meta": { + "request_method": "POST", + "request_path": "/api/v1/graphql/" + }, + "object_id": "group_123", + "object_type": "group", + "organization_id": "orga_123", + "request_id": "req_123", + "subscription_id": "whsub_123", + "user_id": "user_123" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json new file mode 100644 index 0000000000..4e7076e03d --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json @@ -0,0 +1,105 @@ +{ + "name": "close_crm", + "description": "lead deletion", + "input": { + "request": { + "body": { + "event": { + "subscription_id": "whsub_123", + "event": { + "id": "ev_123", + "date_created": "2024-06-14T05:16:04.138000", + "date_updated": "2024-06-14T05:16:04.138000", + "organization_id": "orga_123", + "user_id": "user_123", + "request_id": "req_123", + "api_key_id": "api_123", + "oauth_client_id": null, + "oauth_scope": null, + "object_type": "lead", + "object_id": "lead_123", + "lead_id": "lead_123", + "action": "deleted", + "changed_fields": [], + "meta": { + "request_path": "/api/v1/lead/lead_123/", + "request_method": "DELETE" + }, + "data": {}, + "previous_data": { + "created_by_name": "Rudder User", + "addresses": [], + "description": "", + "url": null, + "date_created": "2024-06-14T05:13:42.239000+00:00", + "status_id": "stat_123", + "contact_ids": ["cont_123"], + "id": "lead_12", + "date_updated": "2024-06-14T05:13:42.262000+00:00", + "updated_by_name": "Rudder User", + "status_label": "Potential", + "name": "test name", + "display_name": "test name", + "organization_id": "orga_123", + "updated_by": "user_123", + "created_by": "user_123" + } + } + }, + "source": {} + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "CloseCRM" + } + }, + "integrations": { + "CloseCRM": false + }, + "type": "track", + "event": "lead deleted", + "userId": "lead_123", + "messageId": "ev_123", + "originalTimestamp": "2024-06-FrT05:16:04.138+00:00", + "properties": { + "id": "ev_123", + "date_created": "2024-06-14T05:16:04.138000", + "date_updated": "2024-06-14T05:16:04.138000", + "organization_id": "orga_123", + "user_id": "user_123", + "request_id": "req_123", + "api_key_id": "api_123", + "object_type": "lead", + "object_id": "lead_123", + "lead_id": "lead_123", + "action": "deleted", + "meta": { + "request_path": "/api/v1/lead/lead_123/", + "request_method": "DELETE" + }, + "data": {}, + "subscription_id": "whsub_123" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json new file mode 100644 index 0000000000..186724a793 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json @@ -0,0 +1,147 @@ +{ + "name": "close_crm", + "description": "lead update", + "input": { + "request": { + "body": { + "event": { + "event": { + "date_created": "2019-01-15T12:48:23.395000", + "meta": { + "request_method": "PUT", + "request_path": "/api/v1/opportunity/object_id/" + }, + "id": "ev_123", + "action": "updated", + "date_updated": "2019-01-15T12:48:23.395000", + "changed_fields": [ + "confidence", + "date_updated", + "status_id", + "status_label", + "status_type" + ], + "previous_data": { + "status_type": "active", + "confidence": 70, + "date_updated": "2019-01-15T12:47:39.873000+00:00", + "status_id": "stat_123", + "status_label": "Active" + }, + "organization_id": "orga_123", + "data": { + "contact_name": "Mr. Jones", + "user_name": "Joe Kemp", + "value_period": "one_time", + "updated_by_name": "Joe Kemp", + "date_created": "2019-01-15T12:41:24.496000+00:00", + "user_id": "user_123", + "updated_by": "user_123", + "value_currency": "USD", + "organization_id": "orga_123", + "status_label": "Won", + "contact_id": "cont_123", + "status_type": "won", + "created_by_name": "Joe Kemp", + "id": "id_12", + "lead_name": "KLine", + "date_lost": null, + "note": "", + "date_updated": "2019-01-15T12:48:23.392000+00:00", + "status_id": "stat_12", + "value": 100000, + "created_by": "user_123", + "value_formatted": "$1,000", + "date_won": "2019-01-15", + "lead_id": "lead_123", + "confidence": 100 + }, + "request_id": "req_123", + "object_id": "object_id", + "user_id": "user_123", + "object_type": "opportunity", + "lead_id": "lead_123" + }, + "subscription_id": "whsub_123" + }, + "source": {} + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "CloseCRM" + } + }, + "integrations": { + "CloseCRM": false + }, + "type": "track", + "event": "opportunity updated", + "messageId": "ev_123", + "userId": "lead_123", + "originalTimestamp": "2019-01-TuT12:48:23.395+00:00", + "properties": { + "date_created": "2019-01-15T12:48:23.395000", + "meta": { + "request_method": "PUT", + "request_path": "/api/v1/opportunity/object_id/" + }, + "id": "ev_123", + "action": "updated", + "date_updated": "2019-01-15T12:48:23.395000", + "organization_id": "orga_123", + "data": { + "contact_name": "Mr. Jones", + "user_name": "Joe Kemp", + "value_period": "one_time", + "updated_by_name": "Joe Kemp", + "date_created": "2019-01-15T12:41:24.496000+00:00", + "user_id": "user_123", + "updated_by": "user_123", + "value_currency": "USD", + "organization_id": "orga_123", + "status_label": "Won", + "contact_id": "cont_123", + "status_type": "won", + "created_by_name": "Joe Kemp", + "id": "id_12", + "lead_name": "KLine", + "note": "", + "date_updated": "2019-01-15T12:48:23.392000+00:00", + "status_id": "stat_12", + "value": 100000, + "created_by": "user_123", + "value_formatted": "$1,000", + "date_won": "2019-01-15", + "lead_id": "lead_123", + "confidence": 100 + }, + "request_id": "req_123", + "object_id": "object_id", + "user_id": "user_123", + "object_type": "opportunity", + "lead_id": "lead_123", + "subscription_id": "whsub_123" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json b/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json new file mode 100644 index 0000000000..76f72961ca --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json @@ -0,0 +1,389 @@ +{ + "name": "moengage", + "description": "Batch of events", + "input": { + "request": { + "body": { + "batch": [ + { + "type": "page", + "event": "home", + "sentAt": "2020-11-12T21:12:54.117Z", + "userId": "sajal", + "channel": "mobile", + "context": { + "traits": {}, + "library": { + "name": "rudder-sdk-ruby-sync", + "version": "1.0.7" + }, + "page": { + "path": "/Rectified.html", + "referrer": "http://localhost:1112/", + "search": "", + "title": "", + "url": "http://localhost:1112/Rectified.html" + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.3.0.QFKINXM)" + }, + "rudderId": "asdfasdfsadf", + "properties": { + "name": "asdfsadf" + }, + "timestamp": "2020-11-12T21:12:41.320Z", + "anonymousId": "123123123123" + }, + { + "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", + "channel": "web", + "context": { + "timezone": "Asia/Tokyo", + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.6" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.6" + }, + "locale": "en-GB", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/testing/script-test.html", + "referrer": "", + "search": "", + "title": "", + "url": "http://localhost:3243/testing/script-test.html" + }, + "screen": { + "density": 2 + }, + "traits": { + "company": { + "id": "abc123" + }, + "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", + "email": "rudderTest@gmail.com", + "name": "Rudder Test", + "plan": "Enterprise" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36" + }, + "event": "Order Completed", + "integrations": { + "All": true + }, + "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", + "originalTimestamp": "2020-10-16T08:10:12.782Z", + "properties": { + "checkout_id": "what is checkout id here??", + "coupon": "APPARELSALE", + "currency": "GBP", + "order_id": "transactionId", + "category": "some category", + "originalArray": [ + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + } + ], + "products": [ + { + "brand": "", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/bacon-jam.jpg", + "name": "Food/Drink", + "position": 1, + "price": 3, + "product_id": "product-bacon-jam", + "quantity": 2, + "sku": "sku-1", + "typeOfProduct": "Food", + "url": "https://www.example.com/product/bacon-jam", + "value": 6, + "variant": "Extra topped" + }, + { + "brand": "Levis", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/t-shirt.jpg", + "name": "T-Shirt", + "position": 2, + "price": 12.99, + "product_id": "product-t-shirt", + "quantity": 1, + "sku": "sku-2", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/t-shirt", + "value": 12.99, + "variant": "White" + }, + { + "brand": "Levis", + "category": "Merch", + "coupon": "APPARELSALE", + "currency": "GBP", + "image_url": "https://www.example.com/product/offer-t-shirt.jpg", + "name": "T-Shirt-on-offer", + "position": 1, + "price": 12.99, + "product_id": "offer-t-shirt", + "quantity": 1, + "sku": "sku-3", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/offer-t-shirt", + "value": 12.99, + "variant": "Black" + } + ], + "revenue": 31.98, + "shipping": 4, + "value": 31.98 + }, + "receivedAt": "2020-10-16T13:40:12.792+05:30", + "request_ip": "[::1]", + "sentAt": "2020-10-16T08:10:12.783Z", + "timestamp": "2020-10-16T13:40:12.791+05:30", + "type": "track", + "userId": "rudder123" + } + ] + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "page", + "event": "home", + "sentAt": "2020-11-12T21:12:54.117Z", + "userId": "sajal", + "channel": "mobile", + "context": { + "traits": {}, + "library": { + "name": "rudder-sdk-ruby-sync", + "version": "1.0.7" + }, + "page": { + "path": "/Rectified.html", + "referrer": "http://localhost:1112/", + "search": "", + "title": "", + "url": "http://localhost:1112/Rectified.html" + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 10; Redmi K20 Pro MIUI/V12.0.3.0.QFKINXM)" + }, + "rudderId": "asdfasdfsadf", + "properties": { + "name": "asdfsadf" + }, + "timestamp": "2020-11-12T21:12:41.320Z", + "anonymousId": "123123123123", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", + "channel": "web", + "context": { + "timezone": "Asia/Tokyo", + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.6" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.6" + }, + "locale": "en-GB", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/testing/script-test.html", + "referrer": "", + "search": "", + "title": "", + "url": "http://localhost:3243/testing/script-test.html" + }, + "screen": { + "density": 2 + }, + "traits": { + "company": { + "id": "abc123" + }, + "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", + "email": "rudderTest@gmail.com", + "name": "Rudder Test", + "plan": "Enterprise" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36" + }, + "event": "Order Completed", + "integrations": { + "All": true + }, + "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", + "originalTimestamp": "2020-10-16T08:10:12.782Z", + "properties": { + "checkout_id": "what is checkout id here??", + "coupon": "APPARELSALE", + "currency": "GBP", + "order_id": "transactionId", + "category": "some category", + "originalArray": [ + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + }, + { + "nested_field": "nested value", + "tags": ["tag_1", "tag_2", "tag_3"] + } + ], + "products": [ + { + "brand": "", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/bacon-jam.jpg", + "name": "Food/Drink", + "position": 1, + "price": 3, + "product_id": "product-bacon-jam", + "quantity": 2, + "sku": "sku-1", + "typeOfProduct": "Food", + "url": "https://www.example.com/product/bacon-jam", + "value": 6, + "variant": "Extra topped" + }, + { + "brand": "Levis", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/t-shirt.jpg", + "name": "T-Shirt", + "position": 2, + "price": 12.99, + "product_id": "product-t-shirt", + "quantity": 1, + "sku": "sku-2", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/t-shirt", + "value": 12.99, + "variant": "White" + }, + { + "brand": "Levis", + "category": "Merch", + "coupon": "APPARELSALE", + "currency": "GBP", + "image_url": "https://www.example.com/product/offer-t-shirt.jpg", + "name": "T-Shirt-on-offer", + "position": 1, + "price": 12.99, + "product_id": "offer-t-shirt", + "quantity": 1, + "sku": "sku-3", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/offer-t-shirt", + "value": 12.99, + "variant": "Black" + } + ], + "revenue": 31.98, + "shipping": 4, + "value": 31.98 + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "sentAt": "2020-10-16T08:10:12.783Z", + "timestamp": "2020-10-16T13:40:12.791+05:30", + "type": "track", + "userId": "rudder123" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/moengage/simple_track_call.json b/go/webhook/testcases/testdata/testcases/moengage/simple_track_call.json new file mode 100644 index 0000000000..f9b11bffb4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/moengage/simple_track_call.json @@ -0,0 +1,246 @@ +{ + "name": "moengage", + "description": "Simple track call", + "input": { + "request": { + "body": { + "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", + "channel": "web", + "context": { + "timezone": "Wrong/Timezone", + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.6" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.6" + }, + "locale": "en-GB", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/testing/script-test.html", + "referrer": "", + "search": "", + "title": "", + "url": "http://localhost:3243/testing/script-test.html" + }, + "screen": { + "density": 2 + }, + "traits": { + "company": { + "id": "abc123" + }, + "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", + "email": "rudderTest@gmail.com", + "name": "Rudder Test", + "plan": "Enterprise" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36" + }, + "event": "Order Completed", + "integrations": { + "All": true + }, + "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", + "originalTimestamp": "2020-10-16T08:10:12.782Z", + "properties": { + "checkout_id": "what is checkout id here??", + "coupon": "APPARELSALE", + "currency": "GBP", + "order_id": "transactionId", + "products": [ + { + "brand": "", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/bacon-jam.jpg", + "name": "Food/Drink", + "position": 1, + "price": 3, + "product_id": "product-bacon-jam", + "quantity": 2, + "sku": "sku-1", + "typeOfProduct": "Food", + "url": "https://www.example.com/product/bacon-jam", + "value": 6, + "variant": "Extra topped" + }, + { + "brand": "Levis", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/t-shirt.jpg", + "name": "T-Shirt", + "position": 2, + "price": 12.99, + "product_id": "product-t-shirt", + "quantity": 1, + "sku": "sku-2", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/t-shirt", + "value": 12.99, + "variant": "White" + }, + { + "brand": "Levis", + "category": "Merch", + "coupon": "APPARELSALE", + "currency": "GBP", + "image_url": "https://www.example.com/product/offer-t-shirt.jpg", + "name": "T-Shirt-on-offer", + "position": 1, + "price": 12.99, + "product_id": "offer-t-shirt", + "quantity": 1, + "sku": "sku-3", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/offer-t-shirt", + "value": 12.99, + "variant": "Black" + } + ], + "revenue": 31.98, + "shipping": 4, + "value": 31.98 + }, + "sentAt": "2020-10-16T08:10:12.783Z", + "timestamp": "2020-10-16T13:40:12.791+05:30", + "type": "track", + "userId": "rudder123" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "4eb021e9-a2af-4926-ae82-fe996d12f3c5", + "channel": "web", + "context": { + "timezone": "Wrong/Timezone", + "app": { + "build": "1.0.0", + "name": "RudderLabs JavaScript SDK", + "namespace": "com.rudderlabs.javascript", + "version": "1.1.6" + }, + "library": { + "name": "RudderLabs JavaScript SDK", + "version": "1.1.6" + }, + "locale": "en-GB", + "os": { + "name": "", + "version": "" + }, + "page": { + "path": "/testing/script-test.html", + "referrer": "", + "search": "", + "title": "", + "url": "http://localhost:3243/testing/script-test.html" + }, + "screen": { + "density": 2 + }, + "traits": { + "company": { + "id": "abc123" + }, + "createdAt": "Thu Mar 24 2016 17:46:45 GMT+0000 (UTC)", + "email": "rudderTest@gmail.com", + "name": "Rudder Test", + "plan": "Enterprise" + }, + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36" + }, + "event": "Order Completed", + "integrations": { + "All": true + }, + "messageId": "a0adfab9-baf7-4e09-a2ce-bbe2844c324a", + "originalTimestamp": "2020-10-16T08:10:12.782Z", + "properties": { + "checkout_id": "what is checkout id here??", + "coupon": "APPARELSALE", + "currency": "GBP", + "order_id": "transactionId", + "products": [ + { + "brand": "", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/bacon-jam.jpg", + "name": "Food/Drink", + "position": 1, + "price": 3, + "product_id": "product-bacon-jam", + "quantity": 2, + "sku": "sku-1", + "typeOfProduct": "Food", + "url": "https://www.example.com/product/bacon-jam", + "value": 6, + "variant": "Extra topped" + }, + { + "brand": "Levis", + "category": "Merch", + "currency": "GBP", + "image_url": "https://www.example.com/product/t-shirt.jpg", + "name": "T-Shirt", + "position": 2, + "price": 12.99, + "product_id": "product-t-shirt", + "quantity": 1, + "sku": "sku-2", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/t-shirt", + "value": 12.99, + "variant": "White" + }, + { + "brand": "Levis", + "category": "Merch", + "coupon": "APPARELSALE", + "currency": "GBP", + "image_url": "https://www.example.com/product/offer-t-shirt.jpg", + "name": "T-Shirt-on-offer", + "position": 1, + "price": 12.99, + "product_id": "offer-t-shirt", + "quantity": 1, + "sku": "sku-3", + "typeOfProduct": "Shirt", + "url": "https://www.example.com/product/offer-t-shirt", + "value": 12.99, + "variant": "Black" + } + ], + "revenue": 31.98, + "shipping": 4, + "value": 31.98 + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "sentAt": "2020-10-16T08:10:12.783Z", + "timestamp": "2020-10-16T13:40:12.791+05:30", + "type": "track", + "userId": "rudder123" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/ortto/simple_track_call.json b/go/webhook/testcases/testdata/testcases/ortto/simple_track_call.json new file mode 100644 index 0000000000..81e7241355 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/ortto/simple_track_call.json @@ -0,0 +1,108 @@ +{ + "name": "ortto", + "description": "Simple track call", + "input": { + "request": { + "body": { + "activity": { + "id": "00651b946bfef7e80478efee", + "field_id": "act::s-all", + "created": "2023-10-03T04:11:23Z", + "attr": { + "str::is": "API", + "str::s-ctx": "Subscribed via API" + } + }, + "contact": { + "external_id": "user_x", + "city": { + "name": "Kolkata", + "id": 0, + "lat": 37751000, + "lng": -97822000 + }, + "country": { + "name": "United States", + "id": 6252001, + "lat": 0, + "lng": 0 + }, + "email": "xyz@email.com", + "first_name": "Ujjwal", + "last_name": "Ujjwal", + "birthday": { + "year": 1980, + "month": 12, + "day": 11, + "timezone": "Australia/Sydney" + }, + "phone_number": { + "c": "91", + "n": "401234567" + } + }, + "id": "00651b946cef87c7af64f4f3", + "time": "2023-10-03T04:11:24.25726779Z", + "webhook_id": "651b8aec8002153e16319fd3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "user_x", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "ortto" + }, + "traits": { + "email": "xyz@email.com", + "birthday": "1980-12-11", + "firstName": "Ujjwal", + "lastName": "Ujjwal", + "phone": "91401234567", + "address": { + "city": "Kolkata", + "country": "United States" + } + } + }, + "event": "Resubscribe globally", + "integrations": { + "ortto": false + }, + "type": "track", + "messageId": "00651b946cef87c7af64f4f3", + "originalTimestamp": "2023-10-03T04:11:24.000Z", + "properties": { + "activity.id": "00651b946bfef7e80478efee", + "activity.created": "2023-10-03T04:11:23Z", + "activity.attr.str::is": "API", + "activity.attr.str::s-ctx": "Subscribed via API", + "contact.birthday.timezone": "Australia/Sydney", + "contact.city.id": 0, + "contact.city.lat": 37751000, + "contact.city.lng": -97822000, + "contact.country.id": 6252001, + "contact.country.lat": 0, + "contact.country.lng": 0, + "webhook_id": "651b8aec8002153e16319fd3" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/ortto/simple_track_call_with_unknown_field_id.json b/go/webhook/testcases/testdata/testcases/ortto/simple_track_call_with_unknown_field_id.json new file mode 100644 index 0000000000..6ee5ab4237 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/ortto/simple_track_call_with_unknown_field_id.json @@ -0,0 +1,104 @@ +{ + "name": "ortto", + "description": "Simple track call with unknown field id", + "input": { + "request": { + "body": { + "activity": { + "id": "00651b946bfef7e80478efee", + "field_id": "act::test_webhook", + "created": "2023-10-03T04:11:23Z", + "attr": { + "str::is": "API", + "str::s-ctx": "Subscribed via API" + } + }, + "contact": { + "external_id": "user_x", + "city": { + "name": "Kolkata", + "id": 0, + "lat": 37751000, + "lng": -97822000 + }, + "contact_id": "006524f0b8d370050056e400", + "country": { + "name": "United States", + "id": 6252001, + "lat": 0, + "lng": 0 + }, + "email": "xyz@email.com", + "first_name": "Ujjwal", + "last_name": "Ujjwal", + "birthday": { + "year": 1980, + "month": 3, + "day": 4, + "timezone": "Australia/Sydney" + }, + "phone_number": { + "c": "91", + "n": "401234567" + } + }, + "id": "00651b946cef87c7af64f4f3", + "time": "2023-10-03T04:11:24.25726779Z", + "webhook_id": "651b8aec8002153e16319fd3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": { + "activity": { + "id": "00651b946bfef7e80478efee", + "field_id": "act::test_webhook", + "created": "2023-10-03T04:11:23Z", + "attr": { + "str::is": "API", + "str::s-ctx": "Subscribed via API" + } + }, + "contact": { + "external_id": "user_x", + "city": { + "name": "Kolkata", + "id": 0, + "lat": 37751000, + "lng": -97822000 + }, + "contact_id": "006524f0b8d370050056e400", + "country": { + "name": "United States", + "id": 6252001, + "lat": 0, + "lng": 0 + }, + "email": "xyz@email.com", + "first_name": "Ujjwal", + "last_name": "Ujjwal", + "birthday": { + "year": 1980, + "month": 3, + "day": 4, + "timezone": "Australia/Sydney" + }, + "phone_number": { + "c": "91", + "n": "401234567" + } + }, + "id": "00651b946cef87c7af64f4f3", + "time": "2023-10-03T04:11:24.25726779Z", + "webhook_id": "651b8aec8002153e16319fd3" + } + }, + "queue": [], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/revenuecat/initial_purchase_event.json b/go/webhook/testcases/testdata/testcases/revenuecat/initial_purchase_event.json new file mode 100644 index 0000000000..6dbcbd6622 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/revenuecat/initial_purchase_event.json @@ -0,0 +1,121 @@ +{ + "name": "revenuecat", + "description": "Initial purchase event", + "input": { + "request": { + "body": { + "api_version": "1.0", + "event": { + "aliases": ["yourCustomerAliasedID", "yourCustomerAliasedID"], + "app_id": "yourAppID", + "app_user_id": "yourCustomerAppUserID", + "commission_percentage": 0.3, + "country_code": "US", + "currency": "USD", + "entitlement_id": "pro_cat", + "entitlement_ids": ["pro_cat"], + "environment": "PRODUCTION", + "event_timestamp_ms": 1591121855319, + "expiration_at_ms": 1591726653000, + "id": "UniqueIdentifierOfEvent", + "is_family_share": false, + "offer_code": "free_month", + "original_app_user_id": "OriginalAppUserID", + "original_transaction_id": "1530648507000", + "period_type": "NORMAL", + "presented_offering_id": "OfferingID", + "price": 2.49, + "price_in_purchased_currency": 2.49, + "product_id": "onemonth_no_trial", + "purchased_at_ms": 1591121853000, + "store": "APP_STORE", + "subscriber_attributes": { + "$Favorite Cat": { + "updated_at_ms": 1581121853000, + "value": "Garfield" + } + }, + "takehome_percentage": 0.7, + "tax_percentage": 0.3, + "transaction_id": "170000869511114", + "type": "INITIAL_PURCHASE" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "RevenueCat" + }, + "externalId": [ + { + "type": "revenuecatAppUserId", + "id": "yourCustomerAppUserID" + } + ] + }, + "integrations": { + "RevenueCat": false + }, + "type": "track", + "properties": { + "aliases": ["yourCustomerAliasedID", "yourCustomerAliasedID"], + "appId": "yourAppID", + "appUserId": "yourCustomerAppUserID", + "commissionPercentage": 0.3, + "countryCode": "US", + "currency": "USD", + "entitlementId": "pro_cat", + "entitlementIds": ["pro_cat"], + "environment": "PRODUCTION", + "eventTimestampMs": 1591121855319, + "expirationAtMs": 1591726653000, + "id": "UniqueIdentifierOfEvent", + "isFamilyShare": false, + "offerCode": "free_month", + "originalAppUserId": "OriginalAppUserID", + "originalTransactionId": "1530648507000", + "periodType": "NORMAL", + "presentedOfferingId": "OfferingID", + "price": 2.49, + "priceInPurchasedCurrency": 2.49, + "productId": "onemonth_no_trial", + "purchasedAtMs": 1591121853000, + "store": "APP_STORE", + "subscriberAttributes": { + "$Favorite Cat": { + "updated_at_ms": 1581121853000, + "value": "Garfield" + } + }, + "takehomePercentage": 0.7, + "taxPercentage": 0.3, + "transactionId": "170000869511114", + "type": "INITIAL_PURCHASE" + }, + "event": "INITIAL_PURCHASE", + "userId": "yourCustomerAppUserID", + "messageId": "UniqueIdentifierOfEvent", + "originalTimestamp": "2020-06-02T18:17:35.319Z", + "sentAt": "2020-06-02T18:17:35.319Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/revenuecat/purchase_event_with_anonymous_user.json b/go/webhook/testcases/testdata/testcases/revenuecat/purchase_event_with_anonymous_user.json new file mode 100644 index 0000000000..12e2f4ba11 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/revenuecat/purchase_event_with_anonymous_user.json @@ -0,0 +1,112 @@ +{ + "name": "revenuecat", + "description": "Purchase event with anonymous user", + "input": { + "request": { + "body": { + "api_version": "1.0", + "event": { + "aliases": ["yourCustomerAliasedID", "yourCustomerAliasedID"], + "app_id": "yourAppID", + "commission_percentage": 0.3, + "country_code": "US", + "currency": "USD", + "entitlement_id": "pro_cat", + "entitlement_ids": ["pro_cat"], + "environment": "PRODUCTION", + "event_timestamp_ms": 1591121855319, + "expiration_at_ms": 1591726653000, + "id": "UniqueIdentifierOfEvent", + "is_family_share": false, + "offer_code": "free_month", + "original_transaction_id": "1530648507000", + "period_type": "NORMAL", + "presented_offering_id": "OfferingID", + "price": 2.49, + "price_in_purchased_currency": 2.49, + "product_id": "onemonth_no_trial", + "purchased_at_ms": 1591121853000, + "store": "APP_STORE", + "subscriber_attributes": { + "$Favorite Cat": { + "updated_at_ms": 1581121853000, + "value": "Garfield" + } + }, + "takehome_percentage": 0.7, + "tax_percentage": 0.3, + "transaction_id": "170000869511114", + "type": "INITIAL_PURCHASE" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "RevenueCat" + } + }, + "integrations": { + "RevenueCat": false + }, + "type": "track", + "properties": { + "aliases": ["yourCustomerAliasedID", "yourCustomerAliasedID"], + "appId": "yourAppID", + "commissionPercentage": 0.3, + "countryCode": "US", + "currency": "USD", + "entitlementId": "pro_cat", + "entitlementIds": ["pro_cat"], + "environment": "PRODUCTION", + "eventTimestampMs": 1591121855319, + "expirationAtMs": 1591726653000, + "id": "UniqueIdentifierOfEvent", + "isFamilyShare": false, + "offerCode": "free_month", + "originalTransactionId": "1530648507000", + "periodType": "NORMAL", + "presentedOfferingId": "OfferingID", + "price": 2.49, + "priceInPurchasedCurrency": 2.49, + "productId": "onemonth_no_trial", + "purchasedAtMs": 1591121853000, + "store": "APP_STORE", + "subscriberAttributes": { + "$Favorite Cat": { + "updated_at_ms": 1581121853000, + "value": "Garfield" + } + }, + "takehomePercentage": 0.7, + "taxPercentage": 0.3, + "transactionId": "170000869511114", + "type": "INITIAL_PURCHASE" + }, + "event": "INITIAL_PURCHASE", + "userId": "", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "messageId": "UniqueIdentifierOfEvent", + "originalTimestamp": "2020-06-02T18:17:35.319Z", + "sentAt": "2020-06-02T18:17:35.319Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/revenuecat/simple_track_call.json b/go/webhook/testcases/testdata/testcases/revenuecat/simple_track_call.json new file mode 100644 index 0000000000..851537141b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/revenuecat/simple_track_call.json @@ -0,0 +1,149 @@ +{ + "name": "revenuecat", + "description": "Simple track call", + "input": { + "request": { + "body": { + "api_version": "1.0", + "event": { + "aliases": [ + "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "389ad6dd-bb40-4c03-9471-1353da2d55ec" + ], + "app_user_id": "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "commission_percentage": null, + "country_code": "US", + "currency": null, + "entitlement_id": null, + "entitlement_ids": null, + "environment": "SANDBOX", + "event_timestamp_ms": 1698617217232, + "expiration_at_ms": 1698624417232, + "id": "8CF0CD6C-CAF3-41FB-968A-661938235AF0", + "is_family_share": null, + "offer_code": null, + "original_app_user_id": "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "original_transaction_id": null, + "period_type": "NORMAL", + "presented_offering_id": null, + "price": null, + "price_in_purchased_currency": null, + "product_id": "test_product", + "purchased_at_ms": 1698617217232, + "store": "APP_STORE", + "subscriber_attributes": { + "$displayName": { + "updated_at_ms": 1698617217232, + "value": "Mister Mistoffelees" + }, + "$email": { + "updated_at_ms": 1698617217232, + "value": "tuxedo@revenuecat.com" + }, + "$phoneNumber": { + "updated_at_ms": 1698617217232, + "value": "+19795551234" + }, + "my_custom_attribute_1": { + "updated_at_ms": 1698617217232, + "value": "catnip" + } + }, + "takehome_percentage": null, + "tax_percentage": null, + "transaction_id": null, + "type": "TEST" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "RevenueCat" + }, + "externalId": [ + { + "type": "revenuecatAppUserId", + "id": "f8e14f51-0c76-49ba-8d67-c229f1875dd9" + } + ] + }, + "integrations": { + "RevenueCat": false + }, + "type": "track", + "properties": { + "aliases": [ + "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "389ad6dd-bb40-4c03-9471-1353da2d55ec" + ], + "appUserId": "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "commissionPercentage": null, + "countryCode": "US", + "currency": null, + "entitlementId": null, + "entitlementIds": null, + "environment": "SANDBOX", + "eventTimestampMs": 1698617217232, + "expirationAtMs": 1698624417232, + "id": "8CF0CD6C-CAF3-41FB-968A-661938235AF0", + "isFamilyShare": null, + "offerCode": null, + "originalAppUserId": "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "originalTransactionId": null, + "periodType": "NORMAL", + "presentedOfferingId": null, + "price": null, + "priceInPurchasedCurrency": null, + "productId": "test_product", + "purchasedAtMs": 1698617217232, + "store": "APP_STORE", + "subscriberAttributes": { + "$displayName": { + "updated_at_ms": 1698617217232, + "value": "Mister Mistoffelees" + }, + "$email": { + "updated_at_ms": 1698617217232, + "value": "tuxedo@revenuecat.com" + }, + "$phoneNumber": { + "updated_at_ms": 1698617217232, + "value": "+19795551234" + }, + "my_custom_attribute_1": { + "updated_at_ms": 1698617217232, + "value": "catnip" + } + }, + "takehomePercentage": null, + "taxPercentage": null, + "transactionId": null, + "type": "TEST" + }, + "event": "TEST", + "userId": "f8e14f51-0c76-49ba-8d67-c229f1875dd9", + "messageId": "8CF0CD6C-CAF3-41FB-968A-661938235AF0", + "originalTimestamp": "2023-10-29T22:06:57.232Z", + "sentAt": "2023-10-29T22:06:57.232Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/carts_create.json b/go/webhook/testcases/testdata/testcases/shopify/carts_create.json new file mode 100644 index 0000000000..6c37baa443 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/carts_create.json @@ -0,0 +1,16 @@ +{ + "name": "shopify", + "description": "Track Call -> carts_create ", + "input": { + "request": { + "query": "topic=carts_create" + } + }, + "output": { + "response": { + "status": 200, + "contentType": "text/plain", + "body": "OK" + } + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json b/go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json new file mode 100644 index 0000000000..a7d9717c3d --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json @@ -0,0 +1,251 @@ +{ + "name": "shopify", + "description": "Fulfillment updated event", + "input": { + "request": { + "query": "signature=rudderstack&topic=fulfillments_update", + "body": { + "shipping_address": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "billing_address": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", + "created_at": "2022-01-05T18:13:02+05:30", + "destination": null, + "email": "test_person@email.com", + "id": 4124667937024, + "line_items": [ + { + "admin_graphql_api_id": "gid://shopify/LineItem/11896203149568", + "discount_allocations": [], + "duties": [], + "fulfillable_quantity": 0, + "fulfillment_service": "manual", + "fulfillment_status": "fulfilled", + "gift_card": false, + "grams": 0, + "id": 11896203149568, + "name": "p1", + "origin_location": { + "address1": "74 CC/7, Anupama Housing Estate - II", + "address2": "", + "city": "Kolkatta", + "country_code": "IN", + "id": 3373642219776, + "name": "74 CC/7, Anupama Housing Estate - II", + "province_code": "WB", + "zip": "700052" + }, + "price": "5000.00", + "price_set": { + "presentment_money": { + "amount": "5000.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "5000.00", + "currency_code": "INR" + } + }, + "product_exists": true, + "product_id": 7510929801472, + "properties": [], + "quantity": 1, + "requires_shipping": true, + "sku": "15", + "tax_lines": [ + { + "channel_liable": false, + "price": "900.00", + "price_set": { + "presentment_money": { + "amount": "900.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "900.00", + "currency_code": "INR" + } + }, + "rate": 0.18, + "title": "IGST" + } + ], + "taxable": true, + "title": "p1", + "total_discount": "0.00", + "total_discount_set": { + "presentment_money": { + "amount": "0.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "0.00", + "currency_code": "INR" + } + }, + "variant_id": 42211160228096, + "variant_inventory_management": "shopify", + "variant_title": "", + "vendor": "rudderstack-store" + } + ], + "location_id": 66855371008, + "name": "#1002.1", + "order_id": 4617255092480, + "origin_address": null, + "receipt": {}, + "service": "manual", + "shipment_status": null, + "status": "success", + "tracking_company": "Amazon Logistics UK", + "tracking_number": "Sample001test", + "tracking_numbers": ["Sample001test"], + "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", + "tracking_urls": [ + "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" + ], + "updated_at": "2022-01-05T18:16:48+05:30" + } + } + }, + "output": { + "response": { + "status": 200, + "contentType": "text/plain", + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "RudderStack Shopify Cloud", + "version": "1.0.0" + }, + "integration": { + "name": "SHOPIFY" + }, + "topic": "fulfillments_update" + }, + "integrations": { + "SHOPIFY": true + }, + "type": "track", + "userId": "shopify-admin", + "event": "Fulfillments Update", + "properties": { + "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", + "created_at": "2022-01-05T18:13:02+05:30", + "destination": null, + "email": "test_person@email.com", + "id": 4124667937024, + "location_id": 66855371008, + "name": "#1002.1", + "order_id": 4617255092480, + "origin_address": null, + "receipt": {}, + "service": "manual", + "shipment_status": null, + "status": "success", + "tracking_company": "Amazon Logistics UK", + "tracking_number": "Sample001test", + "tracking_numbers": ["Sample001test"], + "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", + "tracking_urls": [ + "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" + ], + "updated_at": "2022-01-05T18:16:48+05:30", + "products": [ + { + "product_id": 7510929801472, + "sku": "15", + "title": "p1", + "price": "5000.00", + "brand": "rudderstack-store", + "quantity": 1, + "admin_graphql_api_id": "gid://shopify/LineItem/11896203149568", + "discount_allocations": [], + "duties": [], + "fulfillable_quantity": 0, + "fulfillment_service": "manual", + "fulfillment_status": "fulfilled", + "gift_card": false, + "grams": 0, + "id": 11896203149568, + "origin_location": { + "address1": "74 CC/7, Anupama Housing Estate - II", + "address2": "", + "city": "Kolkatta", + "country_code": "IN", + "id": 3373642219776, + "name": "74 CC/7, Anupama Housing Estate - II", + "province_code": "WB", + "zip": "700052" + }, + "price_set": { + "presentment_money": { + "amount": "5000.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "5000.00", + "currency_code": "INR" + } + }, + "product_exists": true, + "properties": [], + "requires_shipping": true, + "tax_lines": [ + { + "channel_liable": false, + "price": "900.00", + "price_set": { + "presentment_money": { + "amount": "900.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "900.00", + "currency_code": "INR" + } + }, + "rate": 0.18, + "title": "IGST" + } + ], + "taxable": true, + "total_discount": "0.00", + "total_discount_set": { + "presentment_money": { + "amount": "0.00", + "currency_code": "INR" + }, + "shop_money": { + "amount": "0.00", + "currency_code": "INR" + } + }, + "variant_inventory_management": "shopify", + "variant": "42211160228096 " + } + ] + }, + "traits": { + "shippingAddress": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "billingAddress": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "email": "test_person@email.com" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "rudderId": "f4ff065d-11d0-4411-b6be-1d0540687f04", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/identify_call.json b/go/webhook/testcases/testdata/testcases/shopify/identify_call.json new file mode 100644 index 0000000000..90c741862a --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/identify_call.json @@ -0,0 +1,174 @@ +{ + "name": "shopify", + "description": "Identify Call for customers create event", + "input": { + "request": { + "query": "topic=customers_create&signature=rudderstack", + "body": { + "id": 5747017285820, + "email": "anuraj@rudderstack.com", + "accepts_marketing": false, + "created_at": "2021-12-29T15:15:19+05:30", + "updated_at": "2021-12-29T15:15:20+05:30", + "first_name": "Anuraj", + "last_name": "Guha", + "orders_count": 0, + "state": "disabled", + "total_spent": "0.00", + "last_order_id": null, + "note": "", + "verified_email": true, + "multipass_identifier": null, + "tax_exempt": false, + "phone": "+919876543210", + "tags": "", + "last_order_name": null, + "currency": "INR", + "addresses": [ + { + "id": 6947581821116, + "customer_id": 5747017285820, + "first_name": "Anuraj", + "last_name": "Guha", + "company": "Rudderstack", + "address1": "Home", + "address2": "Apartment", + "city": "Kolkata", + "province": "West Bengal", + "country": "India", + "zip": "708091", + "phone": "+919876543210", + "name": "Anuraj Guha", + "province_code": "WB", + "country_code": "IN", + "country_name": "India", + "default": true + } + ], + "accepts_marketing_updated_at": "2021-12-29T15:15:20+05:30", + "marketing_opt_in_level": null, + "tax_exemptions": [], + "sms_marketing_consent": { + "state": "not_subscribed", + "opt_in_level": "single_opt_in", + "consent_updated_at": null, + "consent_collected_from": "SHOPIFY" + }, + "admin_graphql_api_id": "gid://shopify/Customer/5747017285820", + "default_address": { + "id": 6947581821116, + "customer_id": 5747017285820, + "first_name": "Anuraj", + "last_name": "Guha", + "company": "Rudderstack", + "address1": "Home", + "address2": "Apartment", + "city": "Kolkata", + "province": "West Bengal", + "country": "India", + "zip": "708091", + "phone": "+919876543210", + "name": "Anuraj Guha", + "province_code": "WB", + "country_code": "IN", + "country_name": "India", + "default": true + } + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "RudderStack Shopify Cloud", + "version": "1.0.0" + }, + "integration": { + "name": "SHOPIFY" + }, + "topic": "customers_create" + }, + "integrations": { + "SHOPIFY": true + }, + "type": "identify", + "userId": "5747017285820", + "traits": { + "email": "anuraj@rudderstack.com", + "firstName": "Anuraj", + "lastName": "Guha", + "phone": "+919876543210", + "addressList": [ + { + "id": 6947581821116, + "customer_id": 5747017285820, + "first_name": "Anuraj", + "last_name": "Guha", + "company": "Rudderstack", + "address1": "Home", + "address2": "Apartment", + "city": "Kolkata", + "province": "West Bengal", + "country": "India", + "zip": "708091", + "phone": "+919876543210", + "name": "Anuraj Guha", + "province_code": "WB", + "country_code": "IN", + "country_name": "India", + "default": true + } + ], + "address": { + "id": 6947581821116, + "customer_id": 5747017285820, + "first_name": "Anuraj", + "last_name": "Guha", + "company": "Rudderstack", + "address1": "Home", + "address2": "Apartment", + "city": "Kolkata", + "province": "West Bengal", + "country": "India", + "zip": "708091", + "phone": "+919876543210", + "name": "Anuraj Guha", + "province_code": "WB", + "country_code": "IN", + "country_name": "India", + "default": true + }, + "acceptsMarketing": false, + "orderCount": 0, + "state": "disabled", + "totalSpent": "0.00", + "note": "", + "verifiedEmail": true, + "taxExempt": false, + "tags": "", + "currency": "INR", + "taxExemptions": [], + "smsMarketingConsent": { + "state": "not_subscribed", + "opt_in_level": "single_opt_in", + "consent_updated_at": null, + "consent_collected_from": "SHOPIFY" + }, + "adminGraphqlApiId": "gid://shopify/Customer/5747017285820", + "acceptsMarketingUpdatedAt": "2021-12-29T15:15:20+05:30" + }, + "timestamp": "2021-12-29T09:45:20.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "rudderId": "56ad0483-e7e8-438d-958f-676fcbf3ed49", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json new file mode 100644 index 0000000000..f4048a0783 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json @@ -0,0 +1,24 @@ +{ + "name": "shopify", + "description": "Invalid topic", + "input": { + "request": { + "query": "signature=rudderstack" + } + }, + "output": { + "response": { + "status": 400, + "contentType": "text/plain", + "body": "Invalid topic in query_parameters\n" + }, + "err_queue": [ + { + "query_parameters": { + "writeKey": ["{{.WriteKey}}"], + "signature": ["rudderstack"] + } + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json b/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json new file mode 100644 index 0000000000..c9eda9924f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json @@ -0,0 +1,19 @@ +{ + "name": "shopify", + "description": "No Query Parameters", + "input": {}, + "output": { + "response": { + "status": 400, + "contentType": "text/plain", + "body": "Invalid topic in query_parameters\n" + }, + "err_queue": [ + { + "query_parameters": { + "writeKey": ["{{.WriteKey}}"] + } + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json b/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json new file mode 100644 index 0000000000..2a6f6c6642 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json @@ -0,0 +1,50 @@ +{ + "name": "shopify", + "description": "Unsupported checkout event", + "input": { + "request": { + "query": "signature=rudderstack&topic=checkout_delete", + "body": { + "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", + "created_at": "2022-01-05T18:13:02+05:30", + "destination": null, + "id": 4124667937024, + "line_items": [], + "customer": { + "email": "test_person@email.com", + "first_name": "Test", + "last_name": "Person" + }, + "billing_address": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "shipping_address": { + "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" + }, + "location_id": 66855371008, + "name": "#1002.1", + "order_id": 4617255092480, + "origin_address": null, + "receipt": {}, + "service": "manual", + "shipment_status": null, + "status": "success", + "tracking_company": "Amazon Logistics UK", + "tracking_number": "Sample001test", + "tracking_numbers": ["Sample001test"], + "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", + "tracking_urls": [ + "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" + ], + "updated_at": "2022-01-05T18:16:48+05:30" + } + } + }, + "output": { + "response": { + "status": 200, + "contentType": "text/plain", + "body": "OK" + } + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json b/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json new file mode 100644 index 0000000000..26c08e9c4f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json @@ -0,0 +1,16 @@ +{ + "name": "shopify", + "description": "Unsupported event type", + "input": { + "request": { + "query": "signature=rudderstack&topic=random_event" + } + }, + "output": { + "response": { + "status": 200, + "contentType": "text/plain", + "body": "OK" + } + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/message_event.json b/go/webhook/testcases/testdata/testcases/slack/message_event.json new file mode 100644 index 0000000000..744170beec --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/message_event.json @@ -0,0 +1,145 @@ +{ + "name": "slack", + "description": "Message event", + "input": { + "request": { + "body": { + "event": { + "user": "U04G7H550", + "type": "message", + "ts": "1709441309.308399", + "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", + "text": "What is the pricing of product X", + "team": "T0GFJL5J7", + "thread_ts": "1709407304.839329", + "parent_user_id": "U06P6LQTPV", + "blocks": [ + { + "type": "rich_text", + "block_id": "xGKJl", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "What is the pricing of product X" + }, + { + "type": "channel", + "channel_id": "C03CDQTPI65" + }, + { + "type": "text", + "text": " to do this" + } + ] + } + ] + } + ], + "channel": "C03CDQTPI65", + "event_ts": "1709441309.308399", + "channel_type": "channel" + }, + "type": "event_callback", + "event_id": "EvY5JTJ0NG5", + "event_time": 1709441309, + "token": "REm2987dqtpi72Lq", + "team_id": "T0GFJL5J7", + "context_team_id": "T01gqtPIL5J7", + "context_enterprise_id": null, + "api_app_id": "A04QTPIHRR", + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T0GFJL5J7", + "user_id": "W012CDE", + "is_bot": true, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": false, + "event_context": "4-wd6joiQfdgTRQTpIzdfifQ" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "SLACK" + }, + "externalId": [ + { + "type": "slackUserId", + "id": "U04G7H550" + } + ] + }, + "integrations": { + "SLACK": false + }, + "type": "track", + "event": "Message", + "anonymousId": "7509c04f547b05afb6838aa742f4910263d6", + "originalTimestamp": "2024-03-03T04:48:29.308Z", + "sentAt": "2024-03-03T04:48:29.000Z", + "properties": { + "user": "U04G7H550", + "type": "message", + "ts": "1709441309.308399", + "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", + "text": "What is the pricing of product X", + "team": "T0GFJL5J7", + "thread_ts": "1709407304.839329", + "parent_user_id": "U06P6LQTPV", + "blocks": [ + { + "type": "rich_text", + "block_id": "xGKJl", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "What is the pricing of product X" + }, + { + "type": "channel", + "channel_id": "C03CDQTPI65" + }, + { + "type": "text", + "text": " to do this" + } + ] + } + ] + } + ], + "channel": "C03CDQTPI65", + "event_ts": "1709441309.308399", + "channel_type": "channel" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/msg_event.json b/go/webhook/testcases/testdata/testcases/slack/msg_event.json new file mode 100644 index 0000000000..9ca194858c --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/msg_event.json @@ -0,0 +1,149 @@ +{ + "name": "slack", + "description": "Message event", + "module": "source", + "version": "v0", + "input": { + "request": { + "body": { + "event": { + "user": "U04G7H550", + "type": "message", + "ts": "1709441309.308399", + "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", + "text": "What is the pricing of product X", + "team": "T0GFJL5J7", + "thread_ts": "1709407304.839329", + "parent_user_id": "U06P6LQTPV", + "blocks": [ + { + "type": "rich_text", + "block_id": "xGKJl", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "What is the pricing of product X" + }, + { + "type": "channel", + "channel_id": "C03CDQTPI65" + }, + { + "type": "text", + "text": " to do this" + } + ] + } + ] + } + ], + "channel": "C03CDQTPI65", + "event_ts": "1709441309.308399", + "channel_type": "channel" + }, + "type": "event_callback", + "event_id": "EvY5JTJ0NG5", + "event_time": 1709441309, + "token": "REm2987dqtpi72Lq", + "team_id": "T0GFJL5J7", + "context_team_id": "T01gqtPIL5J7", + "context_enterprise_id": null, + "api_app_id": "A04QTPIHRR", + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T0GFJL5J7", + "user_id": "W012CDE", + "is_bot": true, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": false, + "event_context": "4-wd6joiQfdgTRQTpIzdfifQ" + }, + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + }, + "pathSuffix": "" + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "SLACK" + }, + "externalId": [ + { + "type": "slackUserId", + "id": "U04G7H550" + } + ] + }, + "integrations": { + "SLACK": false + }, + "type": "track", + "event": "Message", + "anonymousId": "7509c04f547b05afb6838aa742f4910263d6", + "originalTimestamp": "2024-03-03T04:48:29.308Z", + "sentAt": "2024-03-03T04:48:29.000Z", + "properties": { + "user": "U04G7H550", + "type": "message", + "ts": "1709441309.308399", + "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", + "text": "What is the pricing of product X", + "team": "T0GFJL5J7", + "thread_ts": "1709407304.839329", + "parent_user_id": "U06P6LQTPV", + "blocks": [ + { + "type": "rich_text", + "block_id": "xGKJl", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "What is the pricing of product X" + }, + { + "type": "channel", + "channel_id": "C03CDQTPI65" + }, + { + "type": "text", + "text": " to do this" + } + ] + } + ] + } + ], + "channel": "C03CDQTPI65", + "event_ts": "1709441309.308399", + "channel_type": "channel" + }, + "request_ip": "192.0.2.30", + "receivedAt": "2024-03-03T04:48:29.000Z", + "rudderId": "5540ba39-3df8-4970-8b50-b329182c9bd5", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/team_joined.json b/go/webhook/testcases/testdata/testcases/slack/team_joined.json new file mode 100644 index 0000000000..114872a76a --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/team_joined.json @@ -0,0 +1,89 @@ +{ + "name": "slack", + "description": "Team joined event", + "module": "source", + "version": "v0", + "input": { + "request": { + "body": { + "event": { + "type": "team_join", + "user": { + "id": "W012CDE", + "name": "johnd", + "real_name": "John Doe" + } + }, + "type": "event_callback", + "event_id": "Ev06TJ0NG5", + "event_time": 1709441309, + "token": "REm276ggfh72Lq", + "team_id": "T0GFJL5J7", + "context_team_id": "T0GFJL5J7", + "context_enterprise_id": null, + "api_app_id": "B02SJMHRR", + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T0GFJL5J7", + "user_id": "U04G7H550", + "is_bot": true, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": false, + "event_context": "eJldCI65436EUEpMSFhgfhg76joiQzAxRTRQTEIxMzUifQ" + }, + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + }, + "pathSuffix": "" + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "SLACK" + }, + "externalId": [ + { + "type": "slackUserId", + "id": "W012CDE" + } + ] + }, + "integrations": { + "SLACK": false + }, + "type": "identify", + "event": "Team Join", + "anonymousId": "2bc5ae2825a712d3d154cbdacb86ac16c278", + "originalTimestamp": "2024-03-03T04:48:29.000Z", + "sentAt": "2024-03-03T04:48:29.000Z", + "properties": { + "type": "team_join", + "user": { + "id": "W012CDE", + "name": "johnd", + "real_name": "John Doe" + } + }, + "request_ip": "192.0.2.30", + "receivedAt": "2024-03-03T04:48:29.000Z", + "rudderId": "669b7c62-3e8b-475c-8f0a-356b2a9518e2", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/team_joined_event.json b/go/webhook/testcases/testdata/testcases/slack/team_joined_event.json new file mode 100644 index 0000000000..8b0c547f69 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/team_joined_event.json @@ -0,0 +1,85 @@ +{ + "name": "slack", + "description": "Team joined event", + "input": { + "request": { + "body": { + "event": { + "type": "team_join", + "user": { + "id": "W012CDE", + "name": "johnd", + "real_name": "John Doe" + } + }, + "type": "event_callback", + "event_id": "Ev06TJ0NG5", + "event_time": 1709441309, + "token": "REm276ggfh72Lq", + "team_id": "T0GFJL5J7", + "context_team_id": "T0GFJL5J7", + "context_enterprise_id": null, + "api_app_id": "B02SJMHRR", + "authorizations": [ + { + "enterprise_id": null, + "team_id": "T0GFJL5J7", + "user_id": "U04G7H550", + "is_bot": true, + "is_enterprise_install": false + } + ], + "is_ext_shared_channel": false, + "event_context": "eJldCI65436EUEpMSFhgfhg76joiQzAxRTRQTEIxMzUifQ" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "SLACK" + }, + "externalId": [ + { + "type": "slackUserId", + "id": "W012CDE" + } + ] + }, + "integrations": { + "SLACK": false + }, + "type": "identify", + "event": "Team Join", + "anonymousId": "2bc5ae2825a712d3d154cbdacb86ac16c278", + "originalTimestamp": "2024-03-03T04:48:29.000Z", + "sentAt": "2024-03-03T04:48:29.000Z", + "properties": { + "type": "team_join", + "user": { + "id": "W012CDE", + "name": "johnd", + "real_name": "John Doe" + } + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/verification.json b/go/webhook/testcases/testdata/testcases/slack/verification.json new file mode 100644 index 0000000000..94e072dd8f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/verification.json @@ -0,0 +1,31 @@ +{ + "name": "slack", + "description": "Webhook url verification event", + "module": "source", + "version": "v0", + "input": { + "request": { + "body": { + "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl", + "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ", + "type": "url_verification" + }, + "method": "POST", + "headers": { + "Content-Type": "application/json" + } + }, + "pathSuffix": "" + }, + "output": { + "response": { + "status": 200, + "contentType": "application/json", + "body": { + "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ" + } + }, + "queue": [], + "proc_err": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/webhook_url_verificatin_event.json b/go/webhook/testcases/testdata/testcases/slack/webhook_url_verificatin_event.json new file mode 100644 index 0000000000..0be33d2c58 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/slack/webhook_url_verificatin_event.json @@ -0,0 +1,26 @@ +{ + "name": "slack", + "description": "Webhook url verificatin event", + "input": { + "request": { + "body": { + "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl", + "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ", + "type": "url_verification" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": { + "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ" + } + }, + "queue": [], + "errQueue": [] + } +} diff --git a/test/integrations/sources/adjust/data.ts b/test/integrations/sources/adjust/data.ts index 975543fbec..733a1d6235 100644 --- a/test/integrations/sources/adjust/data.ts +++ b/test/integrations/sources/adjust/data.ts @@ -1,3 +1,4 @@ +import { skip } from 'node:test'; import utils from '../../../../src/v0/util'; const defaultMockFns = () => { @@ -10,6 +11,7 @@ export const data = [ description: 'Simple track call', module: 'source', version: 'v0', + skipGo: 'FIXME', input: { request: { body: [ @@ -85,6 +87,7 @@ export const data = [ description: 'Simple track call with no query parameters', module: 'source', version: 'v0', + skipGo: 'FIXME', input: { request: { body: [ diff --git a/test/integrations/sources/auth0/data.ts b/test/integrations/sources/auth0/data.ts index 44b511cad2..953888920b 100644 --- a/test/integrations/sources/auth0/data.ts +++ b/test/integrations/sources/auth0/data.ts @@ -10,6 +10,7 @@ export const data = [ description: 'successful signup', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [ @@ -532,6 +533,7 @@ export const data = [ description: 'add member to an organization', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [ @@ -671,6 +673,7 @@ export const data = [ description: 'update tenant settings', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [ @@ -1242,6 +1245,7 @@ export const data = [ description: 'missing userId', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [ @@ -1348,6 +1352,7 @@ export const data = [ description: 'missing userId for all the requests in a batch', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [ @@ -1503,6 +1508,7 @@ export const data = [ description: 'empty batch', module: 'source', version: 'v0', + skipGo: 'dynamic anonymousId', input: { request: { body: [], diff --git a/test/integrations/testTypes.ts b/test/integrations/testTypes.ts index 3df732d84f..77635f2198 100644 --- a/test/integrations/testTypes.ts +++ b/test/integrations/testTypes.ts @@ -18,6 +18,8 @@ export interface requestType { export interface responseType { status: number; + statusCode?: number; + error?: any; body?: any; headers?: Record; } @@ -40,6 +42,7 @@ export interface TestCaseData { id?: string; name: string; description: string; + skipGo?: string; scenario?: string; successCriteria?: string; comment?: string; diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index 5e0df874f8..4f5181e41e 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -24,8 +24,10 @@ const generateAlphanumericId = (size = 36) => export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): string[] => { const globPattern = join(dirPath, '**', 'data.ts'); let testFilePaths = globSync(globPattern); - if (opts.destination) { - testFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.destination)); + if (opts.destination || opts.source) { + testFilePaths = testFilePaths.filter((testFile) => + testFile.includes(opts.destination || opts.source), + ); } if (opts.feature) { testFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.feature)); diff --git a/test/scripts/generateJson.ts b/test/scripts/generateJson.ts new file mode 100644 index 0000000000..7e4c3a3c0f --- /dev/null +++ b/test/scripts/generateJson.ts @@ -0,0 +1,141 @@ +import { Command, OptionValues } from 'commander'; +import path from 'path'; +import fs from 'fs'; +import { getTestData, getTestDataFilePaths, produceTestData } from '../integrations/testUtils'; +import { head } from 'lodash'; + +interface TestCaseData { + name: string; + description: string; + skip?: string; + input: Input; + output: Output; +} + +interface Input { + request: { + query: string; + body: any; + headers?: Record; + }; +} + +interface Output { + response: { + status: number; + body: any; + }; + queue: any[]; + errQueue: any[]; +} + +const jsonGenerator = new Command(); +jsonGenerator + .name('json-generator') + .description('CLI to some JavaScript string utilities') + .version('0.8.0'); + +jsonGenerator + .command('sources') + .description('generator JSON test cases for source') + .argument('', 'output path') + .option('-s, --source ', 'source', ',') + .action(generateSources); + +jsonGenerator.parse(); + +function generateSources(outputFolder: string, options: OptionValues) { + const rootDir = __dirname; + const resolvedpath = path.resolve(rootDir, '../integrations/sources'); + + const files = getTestDataFilePaths(resolvedpath, options); + + files.forEach((testDataPath) => { + let testData = getTestData(testDataPath); + testData.forEach((testCase) => { + let statusCode: number = + testCase.output.response?.statusCode || testCase.output.response?.status || 200; + + let responseBody: any = 'OK'; + if (statusCode == 200) { + if (testCase.output.response?.body[0]?.outputToSource?.body) { + responseBody = JSON.parse( + Buffer.from(testCase.output.response?.body[0]?.outputToSource?.body, 'base64').toString( + 'utf-8', + ), + ); + } + } else { + responseBody = testCase.output.response?.error; + } + + testCase.input.request.body.forEach((body) => { + delete body['receivedAt']; + delete body['request_ip']; + }); + + let goTest: TestCaseData = { + name: testCase.name, + description: testCase.description, + input: { + request: { + query: JSON.stringify(testCase.input.request.params), + body: + testCase.input.request.body.length === 1 + ? testCase.input.request.body[0] + : testCase.input.request.body, + headers: testCase.input.request.headers || { + 'Content-Type': 'application/json', + }, + }, + }, + output: { + response: { + status: statusCode, + body: responseBody, + }, + // TODO flatten nested array + queue: + statusCode == 200 + ? testCase.output.response?.body + .filter((i) => i.output) + .map((i) => i.output.batch) + .flat() + : [], + errQueue: statusCode != 200 ? [testCase.output.response?.body] : [], + }, + }; + const dirPath = path.join(outputFolder, goTest.name); + const filePath = path.join(dirPath, `${toSnakeCase(goTest.description)}.json`); + + if (testCase.skipGo) { + goTest.skip = testCase.skipGo; + } + + goTest.output.queue.forEach((queueItem) => { + queueItem['receivedAt'] = '2024-03-03T04:48:29.000Z'; + queueItem['request_ip'] = '192.0.2.30'; + if (!queueItem['messageId']) { + queueItem['messageId'] = '00000000-0000-0000-0000-000000000000'; + } + }); + + fs.mkdirSync(dirPath, { recursive: true }); + + fs.writeFileSync(filePath, JSON.stringify(goTest, null, 2)); + }); + }); +} + +function toSnakeCase(str: string): string { + return ( + str + // Replace spaces with underscores + .replace(/\s+/g, '_') + // Insert underscores before uppercase letters, handle acronyms correctly + .replace(/\.?([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()) + // Remove leading underscores and handle consecutive underscores + .replace(/^_+/, '') + .replace(/_{2,}/g, '_') + ); +} diff --git a/tsconfig.json b/tsconfig.json index 926831b612..2c00e6482e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -102,6 +102,6 @@ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */, }, - "exclude": ["./src/**/*.test.js", "./src/**/*.test.ts", "./test"], + "exclude": ["./src/**/*.test.js", "./src/**/*.test.ts", "./test", "./go"], "include": ["./src", "./src/**/*.json"], } From 68367f5227c96f2700a773018b991b1e87a0774d Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Wed, 24 Jul 2024 11:50:25 +0530 Subject: [PATCH 085/201] fix: update getConversionActionId function for gaoc (#3594) --- .../utils.js | 5 +- .../dataDelivery/oauth.ts | 72 +++++++++++++++++++ .../network.ts | 69 +++++++++++------- 3 files changed, 119 insertions(+), 27 deletions(-) diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index 7c21371ccf..7228bb8da4 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -16,7 +16,6 @@ const { getFieldValueFromMessage, isDefinedAndNotNullAndNotEmpty, isDefinedAndNotNull, - getAuthErrCategoryFromStCode, getAccessToken, getIntegrationsObj, } = require('../../util'); @@ -34,7 +33,7 @@ const { const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); const Cache = require('../../util/cache'); const helper = require('./helper'); -const { finaliseConsent } = require('../../util/googleUtils'); +const { finaliseConsent, getAuthErrCategory } = require('../../util/googleUtils'); const conversionActionIdCache = new Cache(CONVERSION_ACTION_ID_CACHE_TTL); @@ -86,7 +85,7 @@ const getConversionActionId = async ({ headers, params, metadata }) => { )} during google_ads_offline_conversions response transformation`, status, response, - getAuthErrCategoryFromStCode(get(searchStreamResponse, 'status')), + getAuthErrCategory(searchStreamResponse), ); } const conversionAction = get( diff --git a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts index 73fd7c961d..b8e4c78e1d 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts @@ -332,4 +332,76 @@ export const v1oauthScenarios = [ }, }, }, + { + id: 'gaoc_v1_oauth_scenario_4', + name: 'google_adwords_offline_conversions', + description: + "[Proxy v1 API] :: Oauth when the user doesn't enabled 2 factor authentication but the google ads account has it enabled for not store sales conversion", + successCriteria: 'The proxy should return 401 with authErrorCategory as AUTH_STATUS_INACTIVE', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + ...{ ...commonRequestParameters, JSON: { isStoreConversion: false } }, + headers: { + Authorization: 'Bearer invalidabcd1234', + 'Content-Type': 'application/json', + 'developer-token': 'ijkl91011', + 'login-customer-id': 'logincustomerid', + }, + endpoint: + 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + }, + metadataArray, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'AUTH_STATUS_INACTIVE', + message: + '[Google Ads Offline Conversions]:: {"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during google_ads_offline_conversions response transformation', + response: [ + { + error: + '[Google Ads Offline Conversions]:: {"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during google_ads_offline_conversions response transformation', + metadata: { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 1, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + statusCode: 401, + }, + ], + statTags: { + destType: 'GOOGLE_ADWORDS_OFFLINE_CONVERSIONS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', + }, + status: 401, + }, + }, + }, + }, + }, ]; diff --git a/test/integrations/destinations/google_adwords_offline_conversions/network.ts b/test/integrations/destinations/google_adwords_offline_conversions/network.ts index 49f89cec28..f1147162d2 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/network.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/network.ts @@ -1,3 +1,30 @@ +const commonResponse = { + status: 401, + data: { + error: { + code: 401, + details: [ + { + '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', + errors: [ + { + errorCode: { + authenticationError: 'TWO_STEP_VERIFICATION_NOT_ENROLLED', + }, + message: + "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.", + }, + ], + requestId: 'wy4ZYbsjWcgh6uC2Ruc_Zg', + }, + ], + message: + 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', + status: 'UNAUTHENTICATED', + }, + }, +}; + export const networkCallsData = [ { httpReq: { @@ -647,7 +674,7 @@ export const networkCallsData = [ }, { description: - 'Mock response from destination depicting a request with invalid authentication credentials', + 'Mock response from destination depicting a request from user who has not enabled 2 factor authentication', httpReq: { url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', data: { @@ -669,31 +696,25 @@ export const networkCallsData = [ }, method: 'POST', }, - httpRes: { - status: 401, + httpRes: commonResponse, + }, + { + description: + 'Mock response from destination depicting a request from user who has not enabled 2 factor authentication', + httpReq: { + url: 'https://googleads.googleapis.com/v16/customers/1112223333/googleAds:searchStream', data: { - error: { - code: 401, - details: [ - { - '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', - errors: [ - { - errorCode: { - authenticationError: 'TWO_STEP_VERIFICATION_NOT_ENROLLED', - }, - message: - "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.", - }, - ], - requestId: 'wy4ZYbsjWcgh6uC2Ruc_Zg', - }, - ], - message: - 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', - status: 'UNAUTHENTICATED', - }, + query: + "SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Sign-up - click'", + }, + headers: { + Authorization: 'Bearer invalidabcd1234', + 'Content-Type': 'application/json', + 'developer-token': 'ijkl91011', + 'login-customer-id': 'logincustomerid', }, + method: 'POST', }, + httpRes: commonResponse, }, ]; From 3f75b55daf2a0215592df458c1f3e20f8ff40b0c Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Wed, 24 Jul 2024 12:19:35 +0530 Subject: [PATCH 086/201] chore: enable labels for api calls (#3476) * chore: enable labels for api calls * chore: propagate metadata to api call fn in intercom dest * chore: metadata propagation in mautic & optimizely_fullstack Signed-off-by: Sai Sankeerth * chore: metadata propagation in active_campaign Signed-off-by: Sai Sankeerth * chore: metadata propagation in delighted & klaviyo Signed-off-by: Sai Sankeerth * chore: add method doc to getRelativePathFromURL * chore: add test-cases to test firing of stats based on metadata * chore: enable labels for api calls - 2 (#3479) * chore: enable labels for api call - 2 * chore: propagate metadata in following destinations - canny - clickup - custify - freshmarketer - freshsales - wootric * chore: propagate metadata for below destinations - monday - profitwell - sendgrid - sendinblue * chore: fix sfmc transformation test * chore: enable labels for api calls - 3 (#3483) * chore: enable labels for api calls - 3 * chore: propagate metadata for user destination * chore: propagate metadata in braze * chore: propagate metadata for api calls in hubspot * chore: propagate metadata for labels in api calls for - pardot - rakuten - snapchat_custom_audience - the_trade_desk - yahoo_dsp * chore: propagate metadata in zendesk Signed-off-by: Sai Sankeerth * chore: propagate metadata in gainsight --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth * chore: update canny transformation to include await keyword Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> * chore: add async for canny destination - fix eslint error --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> * chore: remove duplicate metadata key in statTags obj klaviyo Signed-off-by: Sai Sankeerth --------- Signed-off-by: Sai Sankeerth Co-authored-by: Sai Sankeerth Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> --- src/adapters/network.js | 18 +- src/adapters/network.test.js | 313 +++++++++++++++++- .../destinations/intercom/procWorkflow.yaml | 20 +- src/cdk/v2/destinations/intercom/utils.js | 12 +- .../v2/destinations/intercom/utils.test.js | 16 +- .../optimizely_fullstack/procWorkflow.yaml | 6 +- .../destinations/active_campaign/transform.js | 45 ++- src/v0/destinations/braze/braze.util.test.js | 10 +- src/v0/destinations/braze/transform.js | 5 +- src/v0/destinations/braze/util.js | 7 +- src/v0/destinations/canny/transform.js | 16 +- src/v0/destinations/canny/util.js | 3 +- src/v0/destinations/clickup/transform.js | 9 +- src/v0/destinations/clickup/util.js | 13 +- src/v0/destinations/custify/transform.js | 10 +- src/v0/destinations/custify/util.js | 7 +- src/v0/destinations/delighted/transform.js | 8 +- src/v0/destinations/delighted/util.js | 3 +- .../destinations/freshmarketer/transform.js | 26 +- src/v0/destinations/freshmarketer/utils.js | 32 +- src/v0/destinations/freshsales/transform.js | 23 +- src/v0/destinations/freshsales/utils.js | 31 +- src/v0/destinations/hs/HSTransform-v1.js | 13 +- src/v0/destinations/hs/HSTransform-v2.js | 10 +- src/v0/destinations/hs/transform.js | 31 +- src/v0/destinations/hs/util.js | 25 +- src/v0/destinations/klaviyo/util.js | 2 +- src/v0/destinations/marketo/transform.js | 54 +-- src/v0/destinations/marketo/util.js | 6 +- .../marketo_static_list/transform.js | 6 +- src/v0/destinations/mautic/transform.js | 20 +- src/v0/destinations/mautic/utils.js | 3 +- src/v0/destinations/monday/transform.js | 10 +- src/v0/destinations/monday/util.js | 3 +- src/v0/destinations/pardot/networkHandler.js | 2 + src/v0/destinations/profitwell/transform.js | 13 +- src/v0/destinations/profitwell/utils.js | 3 +- src/v0/destinations/rakuten/networkHandler.js | 2 + src/v0/destinations/salesforce/transform.js | 40 ++- src/v0/destinations/salesforce/utils.js | 7 +- src/v0/destinations/sendgrid/transform.js | 15 +- src/v0/destinations/sendgrid/util.js | 11 +- src/v0/destinations/sendinblue/transform.js | 15 +- src/v0/destinations/sendinblue/util.js | 3 +- src/v0/destinations/sfmc/transform.js | 13 +- src/v0/destinations/sfmc/transform.test.js | 10 +- .../networkHandler.js | 2 + .../the_trade_desk/networkHandler.js | 2 + src/v0/destinations/user/transform.js | 40 +-- src/v0/destinations/user/utils.js | 35 +- src/v0/destinations/wootric/transform.js | 12 +- src/v0/destinations/wootric/util.js | 6 +- src/v0/destinations/yahoo_dsp/transform.js | 10 +- src/v0/destinations/yahoo_dsp/util.js | 3 +- src/v0/destinations/zendesk/transform.js | 92 +++-- src/v0/util/index.js | 17 + src/v0/util/index.test.js | 21 ++ 57 files changed, 872 insertions(+), 318 deletions(-) diff --git a/src/adapters/network.js b/src/adapters/network.js index 86af19d6a1..aeb1cc128b 100644 --- a/src/adapters/network.js +++ b/src/adapters/network.js @@ -5,9 +5,14 @@ const lodash = require('lodash'); const http = require('http'); const https = require('https'); const axios = require('axios'); -const logger = require('../logger'); +const { isDefinedAndNotNull } = require('@rudderstack/integrations-lib'); const stats = require('../util/stats'); -const { removeUndefinedValues, isDefinedAndNotNullAndNotEmpty } = require('../v0/util'); +const { + removeUndefinedValues, + getErrorStatusCode, + isDefinedAndNotNullAndNotEmpty, +} = require('../v0/util'); +const logger = require('../logger'); const { processAxiosResponse } = require('./utils/networkUtils'); // Only for tests const { setResponsesForMockAxiosAdapter } = require('../../test/testHelper'); @@ -83,7 +88,9 @@ const fireHTTPStats = (clientResponse, startTime, statTags) => { const endpointPath = statTags.endpointPath ? statTags.endpointPath : ''; const requestMethod = statTags.requestMethod ? statTags.requestMethod : ''; const module = statTags.module ? statTags.module : ''; - const statusCode = clientResponse.success ? clientResponse.response.status : ''; + const statusCode = clientResponse.success + ? clientResponse.response.status + : getErrorStatusCode(clientResponse.response); const defArgs = { destType, endpointPath, @@ -94,9 +101,9 @@ const fireHTTPStats = (clientResponse, startTime, statTags) => { startTime, clientResponse, }; - if (statTags?.metadata) { + if (statTags?.metadata && typeof statTags?.metadata === 'object') { const metadata = !Array.isArray(statTags?.metadata) ? [statTags.metadata] : statTags.metadata; - metadata?.forEach((m) => { + metadata?.filter(isDefinedAndNotNull)?.forEach((m) => { fireOutgoingReqStats({ ...defArgs, metadata: m, @@ -448,4 +455,5 @@ module.exports = { getFormData, handleHttpRequest, enhanceRequestOptions, + fireHTTPStats, }; diff --git a/src/adapters/network.test.js b/src/adapters/network.test.js index 5f5ad97437..7894925ccd 100644 --- a/src/adapters/network.test.js +++ b/src/adapters/network.test.js @@ -1,8 +1,17 @@ const mockLoggerInstance = { info: jest.fn(), }; -const { getFormData, httpPOST, httpGET, httpSend } = require('./network'); +const { getFormData, httpPOST, httpGET, httpSend, fireHTTPStats } = require('./network'); const { getFuncTestData } = require('../../test/testHelper'); +jest.mock('../util/stats', () => ({ + timing: jest.fn(), + timingSummary: jest.fn(), + increment: jest.fn(), + counter: jest.fn(), + gauge: jest.fn(), + histogram: jest.fn(), +})); +const stats = require('../util/stats'); jest.mock('@rudderstack/integrations-lib', () => { return { @@ -39,6 +48,308 @@ describe(`${funcName} Tests`, () => { }); }); +describe('fireHTTPStats tests', () => { + beforeEach(() => { + stats.timing.mockClear(); + stats.counter.mockClear(); + }); + it('should not throw error when metadata is sent as correctly defined object', () => { + const clientResponse = { + success: true, + response: { + data: { a: 1, b: 2 }, + status: 200, + headers: { 'Content-Type': 'application/json' }, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + }, + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + expect(stats.timing).toHaveBeenCalledTimes(1); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); + it('should not throw error when metadata is sent as correctly defined object[]', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: [ + { + destType: 'DT', + destinationId: 'd1', + workspaceId: 'w1', + jobId: 1, + sourceId: 's1', + }, + { + destType: 'DT', + jobId: 2, + destinationId: 'd1', + workspaceId: 'w2', + sourceId: 's2', + }, + ], + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(2); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destinationId: 'd1', + workspaceId: 'w1', + sourceId: 's1', + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + expect(stats.timing).toHaveBeenNthCalledWith(2, 'outgoing_request_latency', startTime, { + destinationId: 'd1', + workspaceId: 'w2', + sourceId: 's2', + destType: 'DT', + module: '', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); + it('should not throw error when metadata is not sent', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(1); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); + it('should not throw error when metadata is sent as empty array', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: [], + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(0); + }); + it('should not throw error when metadata is sent as empty object', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: {}, + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(1); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); + it('should not throw error when metadata is sent as [null, null]', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: [null, null], + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(0); + }); + it('should not throw error when metadata is sent as [1, 2]', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: [1, 2], + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(2); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + expect(stats.timing).toHaveBeenNthCalledWith(2, 'outgoing_request_latency', startTime, { + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); + it('should not throw error when metadata is sent as 1', () => { + const clientResponse = { + success: false, + response: { + response: { + data: { errors: [{ e: 'something went bad' }] }, + status: 400, + headers: { 'Content-Type': 'application/json' }, + }, + headers: { 'Content-Type': 'application/json' }, + status: 400, + }, + }; + const startTime = new Date(); + const statTags = { + metadata: 1, + destType: 'DT', + feature: 'feat', + endpointPath: '/some/url', + requestMethod: 'post', + }; + expect(() => { + fireHTTPStats(clientResponse, startTime, statTags); + }).not.toThrow(Error); + + expect(stats.timing).toHaveBeenCalledTimes(1); + expect(stats.timing).toHaveBeenNthCalledWith(1, 'outgoing_request_latency', startTime, { + destType: 'DT', + feature: 'feat', + module: '', + endpointPath: '/some/url', + requestMethod: 'post', + }); + }); +}); + describe('logging in http methods', () => { beforeEach(() => { mockLoggerInstance.info.mockClear(); diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index 008b22ace5..d826716b43 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -52,7 +52,7 @@ steps: - name: searchContact condition: ($.outputs.messageType === {{$.EventType.IDENTIFY}} || $.outputs.messageType === {{$.EventType.GROUP}}) && $.outputs.apiVersion !== "v1" template: | - const contactId = await $.searchContact(.message, .destination); + const contactId = await $.searchContact(.message, .destination, .metadata); contactId; - name: identifyTransformationForLatestVersion @@ -178,7 +178,7 @@ steps: condition: $.isDefinedAndNotNull($.outputs.searchContact) template: | const contactId = $.outputs.searchContact; - const companyId = await $.createOrUpdateCompany($.context.payload, .destination); + const companyId = await $.createOrUpdateCompany($.context.payload, .destination, .metadata); $.assert(companyId, "Unable to create or update company"); $.context.payload = { id: companyId, @@ -186,15 +186,16 @@ steps: $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts" + "/" + contactId + "/" + "companies"; const payload = $.context.payload; const endpoint = $.context.endpoint; - await $.attachContactToCompany(payload, endpoint, .destination); - await $.addOrUpdateTagsToCompany(.message, .destination, companyId); + const eventData = {metadata: .metadata, destination: .destination} + await $.attachContactToCompany(payload, endpoint, eventData); + await $.addOrUpdateTagsToCompany({metadata: .metadata, destination: .destination, message: .message}, companyId); else: name: whenSearchContactNotFound template: | - const companyId = await $.createOrUpdateCompany($.context.payload, .destination); + const companyId = await $.createOrUpdateCompany($.context.payload, .destination, .metadata); $.assert(companyId, "Unable to create or update company"); $.context.endpoint = $.getBaseEndpoint(.destination) + "/" + "companies"; - await $.addOrUpdateTagsToCompany(.message, .destination, companyId); + await $.addOrUpdateTagsToCompany({metadata: .metadata, destination: .destination, message: .message}, companyId); - name: prepareFinalPayload template: | $.context.requestMethod = 'POST'; @@ -218,15 +219,16 @@ steps: response.userId = .message.anonymousId; $.context.response.push(response); payload = response.body.JSON; - const companyId = await $.createOrUpdateCompany(payload, .destination); + const companyId = await $.createOrUpdateCompany(payload, .destination, .metadata); $.assert(companyId, "Unable to create or update company"); const attachUserAndCompanyResponse = $.attachUserAndCompany(.message, .destination.Config); attachUserAndCompanyResponse ? attachUserAndCompanyResponse.userId = .message.anonymousId; attachUserAndCompanyResponse ? $.context.response.push(attachUserAndCompanyResponse); payload = attachUserAndCompanyResponse.body.JSON; let endpoint = attachUserAndCompanyResponse.endpoint; - attachUserAndCompanyResponse ? await $.attachContactToCompany(payload, endpoint, .destination); - await $.addOrUpdateTagsToCompany(.message, .destination, companyId); + const eventData = {metadata: .metadata, destination: .destination} + attachUserAndCompanyResponse ? await $.attachContactToCompany(payload, endpoint, eventData); + await $.addOrUpdateTagsToCompany({metadata: .metadata, destination: .destination, message: .message}, companyId); - name: statusCode condition: $.outputs.messageType === {{$.EventType.GROUP}} diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index baef94e97c..e2d8a36874 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -267,7 +267,7 @@ const filterCustomAttributes = (payload, type, destination) => { * @param {*} destination * @returns */ -const searchContact = async (message, destination) => { +const searchContact = async (message, destination, metadata) => { const lookupField = getLookUpField(message); const lookupFieldValue = getFieldValueFromMessage(message, lookupField); const data = JSON.stringify({ @@ -298,6 +298,7 @@ const searchContact = async (message, destination) => { endpointPath: '/contacts/search', requestMethod: 'POST', module: 'router', + metadata, }, ); const processedUserResponse = processAxiosResponse(response); @@ -324,7 +325,7 @@ const searchContact = async (message, destination) => { * @param {*} destination * @returns */ -const createOrUpdateCompany = async (payload, destination) => { +const createOrUpdateCompany = async (payload, destination, metadata) => { const { apiVersion } = destination.Config; const headers = getHeaders(destination, apiVersion); const finalPayload = JSON.stringify(removeUndefinedAndNullValues(payload)); @@ -337,6 +338,7 @@ const createOrUpdateCompany = async (payload, destination) => { headers, }, { + metadata, destType: 'intercom', feature: 'transformation', endpointPath: '/companies', @@ -418,7 +420,7 @@ const addMetadataToPayload = (payload) => { * @param {*} endpoint * @param {*} destination */ -const attachContactToCompany = async (payload, endpoint, destination) => { +const attachContactToCompany = async (payload, endpoint, { destination, metadata }) => { let { apiVersion } = destination.Config; apiVersion = isDefinedAndNotNull(apiVersion) ? apiVersion : 'v2'; let endpointPath = '/contact/{id}/companies'; @@ -442,6 +444,7 @@ const attachContactToCompany = async (payload, endpoint, destination) => { { ...commonStatTags, endpointPath, + metadata, }, ); @@ -460,7 +463,7 @@ const attachContactToCompany = async (payload, endpoint, destination) => { * @param id * @returns */ -const addOrUpdateTagsToCompany = async (message, destination, id) => { +const addOrUpdateTagsToCompany = async ({ message, destination, metadata }, id) => { const companyTags = message?.context?.traits?.tags; if (!companyTags) return; const { apiVersion } = destination.Config; @@ -473,6 +476,7 @@ const addOrUpdateTagsToCompany = async (message, destination, id) => { endpointPath: '/tags', requestMethod: 'POST', module: 'router', + metadata, }; await Promise.all( companyTags.map(async (tag) => { diff --git a/src/cdk/v2/destinations/intercom/utils.test.js b/src/cdk/v2/destinations/intercom/utils.test.js index bb5ad2b454..c2bf3f8e89 100644 --- a/src/cdk/v2/destinations/intercom/utils.test.js +++ b/src/cdk/v2/destinations/intercom/utils.test.js @@ -785,7 +785,7 @@ describe('attachContactToCompany utility test', () => { }, }); - await attachContactToCompany(payload, endpoint, destination); + await attachContactToCompany(payload, endpoint, { destination }); expect(axios.post).toHaveBeenCalledWith( endpoint, @@ -828,7 +828,7 @@ describe('attachContactToCompany utility test', () => { }, }); - await attachContactToCompany(payload, endpoint, destination); + await attachContactToCompany(payload, endpoint, { destination }); expect(axios.post).toHaveBeenCalledWith( endpoint, @@ -863,7 +863,7 @@ describe('attachContactToCompany utility test', () => { }); try { - await attachContactToCompany(payload, endpoint, destination); + await attachContactToCompany(payload, endpoint, { destination }); } catch (error) { expect(error.message).toEqual( 'Unable to attach Contact or User to Company due to : {"type":"error.list","request_id":"123","errors":[{"code":"company_not_found","message":"Company Not Found"}]}', @@ -893,7 +893,7 @@ describe('attachContactToCompany utility test', () => { }); try { - await attachContactToCompany(payload, endpoint, destination); + await attachContactToCompany(payload, endpoint, { destination }); } catch (error) { expect(error.message).toEqual( 'Unable to attach Contact or User to Company due to : {"type":"error.list","request_id":"123","errors":[{"code":"parameter_not_found","message":"company not specified"}]}', @@ -925,7 +925,7 @@ describe('addOrUpdateTagsToCompany utility test', () => { }); axios.post.mockClear(); - await addOrUpdateTagsToCompany(message, destination, id); + await addOrUpdateTagsToCompany({ message, destination }, id); expect(axios.post).toHaveBeenCalledTimes(2); @@ -973,7 +973,7 @@ describe('addOrUpdateTagsToCompany utility test', () => { try { axios.post.mockClear(); - await addOrUpdateTagsToCompany(message, destination, id); + await addOrUpdateTagsToCompany({ message, destination }, id); } catch (error) { expect(error.message).toEqual( `Unable to Add or Update the Tag to Company due to : {"type":"error.list","request_id":"request_401","errors":[{"code":"unauthorized","message":"Access Token Invalid"}]}`, @@ -1008,7 +1008,7 @@ describe('addOrUpdateTagsToCompany utility test', () => { try { axios.post.mockClear(); - await addOrUpdateTagsToCompany(message, destination, id); + await addOrUpdateTagsToCompany({ message, destination }, id); } catch (error) { expect(error.message).toEqual( `Unable to Add or Update the Tag to Company due to : {"type":"error.list","request_id":"request_429","errors":[{"code":"rate_limit_exceeded","message":"You have exceeded the rate limit. Please try again later."}]}`, @@ -1022,7 +1022,7 @@ describe('addOrUpdateTagsToCompany utility test', () => { const id = 'companyId'; axios.post.mockClear(); - await addOrUpdateTagsToCompany(message, destination, id); + await addOrUpdateTagsToCompany({ message, destination }, id); expect(axios.post).not.toHaveBeenCalled(); }); diff --git a/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml b/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml index 4d90065f7e..0776e7e8a8 100644 --- a/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml +++ b/src/cdk/v2/destinations/optimizely_fullstack/procWorkflow.yaml @@ -17,6 +17,8 @@ bindings: path: ../../../../v0/util - name: generateUUID path: ../../../../v0/util + - name: getRelativePathFromURL + path: ../../../../v0/util - name: handleHttpRequest path: ../../../../adapters/network - path: ./utils @@ -59,7 +61,9 @@ steps: description: Fetch the data file from the data file url template: | const dataFileUrl = .destination.Config.dataFileUrl; - const rawResponse = await $.handleHttpRequest("get", dataFileUrl); + const urlPath = $.getRelativePathFromURL(dataFileUrl) + const reqStats = {metadata:.metadata, module: 'router',feature: "transformation", destType:"optimizely_fullstack",requestMethod:"get",endpointPath: urlPath} + const rawResponse = await $.handleHttpRequest("get", dataFileUrl, reqStats); const processedResponse = rawResponse.processedResponse; $.assertHttpResp(processedResponse, "Data File Lookup Failed due to " + JSON.stringify(processedResponse.response)); processedResponse.response; diff --git a/src/v0/destinations/active_campaign/transform.js b/src/v0/destinations/active_campaign/transform.js index 3978f868b1..f21bb1a70d 100644 --- a/src/v0/destinations/active_campaign/transform.js +++ b/src/v0/destinations/active_campaign/transform.js @@ -49,7 +49,7 @@ const responseBuilderSimple = (payload, category, destination) => { throw new TransformationError('Payload could not be constructed'); }; -const syncContact = async (contactPayload, category, destination) => { +const syncContact = async (contactPayload, category, { destination, metadata }) => { const { endPoint } = category; const endpoint = `${destination.Config.apiUrl}${endPoint}`; const requestData = { @@ -60,6 +60,7 @@ const syncContact = async (contactPayload, category, destination) => { }; const res = await httpPOST(endpoint, requestData, requestOptions, { destType: 'active_campaign', + metadata, feature: 'transformation', endpointPath: endPoint, requestMethod: 'POST', @@ -75,7 +76,7 @@ const syncContact = async (contactPayload, category, destination) => { return createdContact.id; }; -const customTagProcessor = async (message, category, destination, contactId) => { +const customTagProcessor = async ({ message, destination, metadata }, category, contactId) => { const tagsToBeCreated = []; const tagIds = []; let res; @@ -102,6 +103,7 @@ const customTagProcessor = async (message, category, destination, contactId) => destType: 'active_campaign', feature: 'transformation', tagEndPoint, + metadata, }); if (res.success === false) { errorHandler(res, 'Failed to fetch already created tags'); @@ -133,6 +135,7 @@ const customTagProcessor = async (message, category, destination, contactId) => endpointPath: `/api/3/tags`, requestMethod: 'GET', module: 'router', + metadata, }); promises.push(resp); } @@ -174,6 +177,7 @@ const customTagProcessor = async (message, category, destination, contactId) => res = await httpPOST(endpoint, requestData, requestOptions, { destType: 'active_campaign', feature: 'transformation', + metadata, }); if (res.success === false) { errorHandler(res, 'Failed to create new tag'); @@ -202,6 +206,7 @@ const customTagProcessor = async (message, category, destination, contactId) => res = httpPOST(endpoint, requestData, requestOptions, { destType: 'active_campaign', feature: 'transformation', + metadata, }); return res; }), @@ -212,7 +217,7 @@ const customTagProcessor = async (message, category, destination, contactId) => }); }; -const customFieldProcessor = async (message, category, destination) => { +const customFieldProcessor = async ({ message, destination, metadata }, category) => { const responseStaging = []; const { fieldEndPoint } = category; // Step - 1 @@ -235,6 +240,7 @@ const customFieldProcessor = async (message, category, destination) => { }; const res = await httpGET(endpoint, requestOptions, { destType: 'active_campaign', + metadata, feature: 'transformation', fieldEndPoint, }); @@ -258,6 +264,7 @@ const customFieldProcessor = async (message, category, destination) => { feature: 'transformation', endpointPath: `/api/3/fields`, requestMethod: 'GET', + metadata, module: 'router', }); promises.push(resp); @@ -317,7 +324,7 @@ const customFieldProcessor = async (message, category, destination) => { return fieldsArrValues; }; -const customListProcessor = async (message, category, destination, contactId) => { +const customListProcessor = async ({ message, destination, metadata }, category, contactId) => { const { mergeListWithContactUrl } = category; // Here we extract the list info from the message const listInfo = get(message?.context?.traits, 'lists') @@ -359,6 +366,7 @@ const customListProcessor = async (message, category, destination, contactId) => endpointPath: mergeListWithContactUrl, requestMethod: 'POST', module: 'router', + metadata, }); promises.push(res); } @@ -374,18 +382,18 @@ const customListProcessor = async (message, category, destination, contactId) => // This the handler func for identify type of events here before we transform the event // and return to rudder server we process the message by calling specific destination apis // for handling tag information and custom field information. -const identifyRequestHandler = async (message, category, destination) => { +const identifyRequestHandler = async ({ message, destination, metadata }, category) => { // create skeleton contact payload let contactPayload = constructPayload(message, MAPPING_CONFIG[category.name]); contactPayload = removeUndefinedAndNullValues(contactPayload); // sync to Active Campaign - const contactId = await syncContact(contactPayload, category, destination); + const contactId = await syncContact(contactPayload, category, { destination, metadata }); // create, and merge tags - await customTagProcessor(message, category, destination, contactId); + await customTagProcessor({ message, destination, metadata }, category, contactId); // add the contact to lists if applicabale - await customListProcessor(message, category, destination, contactId); + await customListProcessor({ message, destination, metadata }, category, contactId); // extract fieldValues to merge with contact - const fieldValues = await customFieldProcessor(message, category, destination); + const fieldValues = await customFieldProcessor({ message, destination, metadata }, category); contactPayload.fieldValues = fieldValues; contactPayload = removeUndefinedAndNullValues(contactPayload); const payload = { @@ -404,7 +412,7 @@ const pageRequestHandler = (message, category, destination) => { return responseBuilderSimple(payload, category, destination); }; -const screenRequestHandler = async (message, category, destination) => { +const screenRequestHandler = async ({ message, destination, metadata }, category) => { // Need to check if the event with same name already exists if not need to create // Retrieve All events from destination // https://developers.activecampaign.com/reference/list-all-event-types @@ -417,6 +425,7 @@ const screenRequestHandler = async (message, category, destination) => { destType: 'active_campaign', feature: 'transformation', endpointPath: `/api/3/eventTrackingEvents`, + metadata, requestMethod: 'GET', module: 'router', }); @@ -445,6 +454,7 @@ const screenRequestHandler = async (message, category, destination) => { }; res = await httpPOST(endpoint, requestData, requestOpt, { destType: 'active_campaign', + metadata, feature: 'transformation', }); if (res.success === false) { @@ -469,7 +479,7 @@ const screenRequestHandler = async (message, category, destination) => { return responseBuilderSimple(payload, category, destination); }; -const trackRequestHandler = async (message, category, destination) => { +const trackRequestHandler = async ({ message, destination, metadata }, category) => { // Need to check if the event with same name already exists if not need to create // Retrieve All events from destination // https://developers.activecampaign.com/reference/list-all-event-types @@ -480,6 +490,7 @@ const trackRequestHandler = async (message, category, destination) => { }, }; let res = await httpGET(endpoint, requestOptions, { + metadata, destType: 'active_campaign', feature: 'transformation', endpointPath: `/api/3/eventTrackingEvents`, @@ -511,6 +522,7 @@ const trackRequestHandler = async (message, category, destination) => { headers: getHeader(destination), }; res = await httpPOST(endpoint, requestData, requestOpt, { + metadata, destType: 'active_campaign', feature: 'transformation', }); @@ -537,7 +549,8 @@ const trackRequestHandler = async (message, category, destination) => { // The main entry point where the message is processed based on what type of event // each scenario is resolved by using specific handler function which does // subsquent processing and transformations and the response is sent to rudder-server -const processEvent = async (message, destination) => { +const processEvent = async (event) => { + const { message, destination } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -547,7 +560,7 @@ const processEvent = async (message, destination) => { switch (messageType) { case EventType.IDENTIFY: category = CONFIG_CATEGORIES.IDENTIFY; - response = await identifyRequestHandler(message, category, destination); + response = await identifyRequestHandler(event, category); break; case EventType.PAGE: category = CONFIG_CATEGORIES.PAGE; @@ -555,11 +568,11 @@ const processEvent = async (message, destination) => { break; case EventType.SCREEN: category = CONFIG_CATEGORIES.SCREEN; - response = await screenRequestHandler(message, category, destination); + response = await screenRequestHandler(event, category); break; case EventType.TRACK: category = CONFIG_CATEGORIES.TRACK; - response = await trackRequestHandler(message, category, destination); + response = await trackRequestHandler(event, category); break; default: throw new InstrumentationError('Message type not supported'); @@ -568,7 +581,7 @@ const processEvent = async (message, destination) => { }; const process = async (event) => { - const result = await processEvent(event.message, event.destination); + const result = await processEvent(event); return result; }; diff --git a/src/v0/destinations/braze/braze.util.test.js b/src/v0/destinations/braze/braze.util.test.js index 460f1db565..f2726c3283 100644 --- a/src/v0/destinations/braze/braze.util.test.js +++ b/src/v0/destinations/braze/braze.util.test.js @@ -261,7 +261,7 @@ describe('dedup utility tests', () => { }; // Call the function - const users = await BrazeDedupUtility.doApiLookup(identfierChunks, destination); + const users = await BrazeDedupUtility.doApiLookup(identfierChunks, { destination }); // Check the result expect(users).toEqual([ @@ -399,7 +399,9 @@ describe('dedup utility tests', () => { }, })); - const chunkedUserData = await BrazeDedupUtility.doApiLookup(identifierChunks, destination); + const chunkedUserData = await BrazeDedupUtility.doApiLookup(identifierChunks, { + destination, + }); const result = _.flatMap(chunkedUserData); expect(result).toHaveLength(110); expect(handleHttpRequest).toHaveBeenCalledTimes(3); @@ -455,7 +457,7 @@ describe('dedup utility tests', () => { }, })); - const users = await BrazeDedupUtility.doApiLookup(chunks, destination); + const users = await BrazeDedupUtility.doApiLookup(chunks, { destination }); expect(handleHttpRequest).toHaveBeenCalledTimes(2); // Assert that the first chunk was successful and the second failed @@ -522,7 +524,7 @@ describe('dedup utility tests', () => { [{ alias_name: 'alias1', alias_label: 'rudder_id' }], [{ alias_name: 'alias2', alias_label: 'rudder_id' }], ], - { Config: { restApiKey: 'xyz' } }, + { destination: { Config: { restApiKey: 'xyz' } } }, ); // restore the original implementation of the mocked functions diff --git a/src/v0/destinations/braze/transform.js b/src/v0/destinations/braze/transform.js index 3d6a99d424..155f32c145 100644 --- a/src/v0/destinations/braze/transform.js +++ b/src/v0/destinations/braze/transform.js @@ -203,7 +203,7 @@ function getUserAttributesObject(message, mappingJson, destination) { * @param {*} message * @param {*} destination */ -async function processIdentify(message, destination) { +async function processIdentify({ message, destination, metadata }) { const identifyPayload = getIdentifyPayload(message); const identifyEndpoint = getIdentifyEndpoint(getEndpointFromConfig(destination)); const { processedResponse: brazeIdentifyResp } = await handleHttpRequest( @@ -223,6 +223,7 @@ async function processIdentify(message, destination) { requestMethod: 'POST', module: 'router', endpointPath: '/users/identify', + metadata, }, ); @@ -517,7 +518,7 @@ async function process(event, processParams = { userStore: new Map() }, reqMetad const brazeExternalID = getDestinationExternalID(message, 'brazeExternalId') || message.userId; if (message.anonymousId && brazeExternalID) { - await processIdentify(message, destination); + await processIdentify(event); } else { collectStatsForAliasMissConfigurations(destination.ID); } diff --git a/src/v0/destinations/braze/util.js b/src/v0/destinations/braze/util.js index 45063d0ba2..00ef308fe9 100644 --- a/src/v0/destinations/braze/util.js +++ b/src/v0/destinations/braze/util.js @@ -142,7 +142,7 @@ const BrazeDedupUtility = { return identfierChunks; }, - async doApiLookup(identfierChunks, destination) { + async doApiLookup(identfierChunks, { destination, metadata }) { return Promise.all( identfierChunks.map(async (ids) => { const externalIdentifiers = ids.filter((id) => id.external_id); @@ -167,6 +167,7 @@ const BrazeDedupUtility = { requestMethod: 'POST', module: 'router', endpointPath: '/users/export/ids', + metadata, }, ); stats.counter('braze_lookup_failure_count', 1, { @@ -189,10 +190,10 @@ const BrazeDedupUtility = { */ async doLookup(inputs) { const lookupStartTime = new Date(); - const { destination } = inputs[0]; + const { destination, metadata } = inputs[0]; const { externalIdsToQuery, aliasIdsToQuery } = this.prepareInputForDedup(inputs); const identfierChunks = this.prepareChunksForDedup(externalIdsToQuery, aliasIdsToQuery); - const chunkedUserData = await this.doApiLookup(identfierChunks, destination); + const chunkedUserData = await this.doApiLookup(identfierChunks, { destination, metadata }); stats.timing('braze_lookup_time', lookupStartTime, { destination_id: destination.Config.destinationId, }); diff --git a/src/v0/destinations/canny/transform.js b/src/v0/destinations/canny/transform.js index f4364e1fb7..02b4e7633d 100644 --- a/src/v0/destinations/canny/transform.js +++ b/src/v0/destinations/canny/transform.js @@ -55,7 +55,7 @@ const identifyResponseBuilder = (message, { Config }) => { return responseBuilder(responseConfgs); }; -const getTrackResponse = async (apiKey, message, operationType) => { +const getTrackResponse = async (apiKey, message, operationType, metadata) => { let endpoint; let responseBody; let contentType; @@ -70,7 +70,7 @@ const getTrackResponse = async (apiKey, message, operationType) => { } payload.apiKey = apiKey; - const voterID = await retrieveUserId(apiKey, message); + const voterID = await retrieveUserId(apiKey, message, metadata); payload.voterID = voterID; endpoint = ConfigCategory.CREATE_VOTE.endpoint; } else if (operationType === 'createPost') { @@ -82,7 +82,7 @@ const getTrackResponse = async (apiKey, message, operationType) => { validateCreatePostFields(payload); payload.apiKey = apiKey; - payload.authorID = await retrieveUserId(apiKey, message); + payload.authorID = await retrieveUserId(apiKey, message, metadata); endpoint = ConfigCategory.CREATE_POST.endpoint; } @@ -97,7 +97,7 @@ const getTrackResponse = async (apiKey, message, operationType) => { return responseBuilder(responseConfgs); }; -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async (message, { Config }, metadata) => { const { apiKey, eventsToEvents } = Config; const configuredEventsMap = getHashFromArrayWithDuplicate(eventsToEvents); @@ -113,7 +113,7 @@ const trackResponseBuilder = async (message, { Config }) => { // eslint-disable-next-line no-restricted-syntax for (const destinationEvent of destinationEvents) { // eslint-disable-next-line no-await-in-loop - const response = await getTrackResponse(apiKey, message, destinationEvent); + const response = await getTrackResponse(apiKey, message, destinationEvent, metadata); responseArray.push(response); } } @@ -122,7 +122,7 @@ const trackResponseBuilder = async (message, { Config }) => { return responseArray; }; -const processEvent = (message, destination) => { +const processEvent = async (message, destination, metadata) => { if (!destination.Config.apiKey) { throw new ConfigurationError('API Key is not present. Aborting message.'); } @@ -137,7 +137,7 @@ const processEvent = (message, destination) => { response = identifyResponseBuilder(message, destination); break; case EventType.TRACK: - response = trackResponseBuilder(message, destination); + response = await trackResponseBuilder(message, destination, metadata); break; default: throw new InstrumentationError('Message type not supported'); @@ -145,7 +145,7 @@ const processEvent = (message, destination) => { return response; }; -const process = (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event.message, event.destination, event.metadata); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/canny/util.js b/src/v0/destinations/canny/util.js index 1d03eed4b9..eeefc141db 100644 --- a/src/v0/destinations/canny/util.js +++ b/src/v0/destinations/canny/util.js @@ -13,7 +13,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); * @param message * @returns canny userId */ -const retrieveUserId = async (apiKey, message) => { +const retrieveUserId = async (apiKey, message, metadata) => { const cannyId = getDestinationExternalID(message, 'cannyUserId'); if (cannyId) { return cannyId; @@ -43,6 +43,7 @@ const retrieveUserId = async (apiKey, message) => { qs.stringify(requestBody), { headers }, { + metadata, destType: 'canny', feature: 'transformation', endpointPath: `/v1/users/retrieve`, diff --git a/src/v0/destinations/clickup/transform.js b/src/v0/destinations/clickup/transform.js index 0637d65bd4..799fdf7e7b 100644 --- a/src/v0/destinations/clickup/transform.js +++ b/src/v0/destinations/clickup/transform.js @@ -33,7 +33,7 @@ const responseBuilder = async (payload, listId, apiToken) => { throw new TransformationError('Something went wrong while constructing the payload'); }; -const trackResponseBuilder = async (message, destination) => { +const trackResponseBuilder = async (message, destination, metadata) => { const { apiToken, keyToCustomFieldName } = destination.Config; const { properties } = message; const externalListId = getDestinationExternalID(message, 'clickUpListId'); @@ -45,6 +45,7 @@ const trackResponseBuilder = async (message, destination) => { properties, listId, apiToken, + metadata, ); let payload = constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.TRACK.name]); @@ -55,7 +56,7 @@ const trackResponseBuilder = async (message, destination) => { return responseBuilder(payload, listId, apiToken); }; -const processEvent = async (message, destination) => { +const processEvent = async (message, destination, metadata) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -64,13 +65,13 @@ const processEvent = async (message, destination) => { const messageType = message.type.toLowerCase(); if (messageType === EventType.TRACK) { - return trackResponseBuilder(message, destination); + return trackResponseBuilder(message, destination, metadata); } throw new InstrumentationError(`Event type "${messageType}" is not supported`); }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event.message, event.destination, event.metadata); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/clickup/util.js b/src/v0/destinations/clickup/util.js index 74e961906c..5da4192b5b 100644 --- a/src/v0/destinations/clickup/util.js +++ b/src/v0/destinations/clickup/util.js @@ -206,7 +206,7 @@ const getListOfAssignees = (message, type) => { * @param {*} apiToken * @returns */ -const retrieveCustomFields = async (listId, apiToken) => { +const retrieveCustomFields = async (listId, apiToken, metadata) => { const endpoint = getCustomFieldsEndPoint(listId); const requestOptions = { headers: { @@ -220,6 +220,7 @@ const retrieveCustomFields = async (listId, apiToken) => { endpointPath: '/list/listId/field', requestMethod: 'GET', module: 'router', + metadata, }); const processedCustomFieldsResponse = processAxiosResponse(customFieldsResponse); @@ -278,11 +279,17 @@ const extractUIMappedCustomFieldDetails = ( * @param {*} apiToken * @returns [{"id":"b0f40a94-ea2a-4998-a514-8074d0eddcde","value":"https://www.rudderstack.com/"}] */ -const customFieldsBuilder = async (keyToCustomFieldName, properties, listId, apiToken) => { +const customFieldsBuilder = async ( + keyToCustomFieldName, + properties, + listId, + apiToken, + metadata, +) => { const responseArray = []; if (properties && keyToCustomFieldName) { // retrieve available clickup custom field for the given list - const availableCustomFields = await retrieveCustomFields(listId, apiToken); + const availableCustomFields = await retrieveCustomFields(listId, apiToken, metadata); // convert array to hashMap with key as field name and value as custom field object const availableCustomFieldsMap = getHashFromArrayWithValueAsObject( availableCustomFields, diff --git a/src/v0/destinations/custify/transform.js b/src/v0/destinations/custify/transform.js index 6b08be1c56..d13a476a68 100644 --- a/src/v0/destinations/custify/transform.js +++ b/src/v0/destinations/custify/transform.js @@ -19,7 +19,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); * @param {*} destination * @returns */ -const validateAndBuildResponse = async (message, destination) => { +const validateAndBuildResponse = async ({ message, destination, metadata }) => { const messageType = message.type.toLowerCase(); const response = defaultRequestConfig(); let responseBody; @@ -34,7 +34,7 @@ const validateAndBuildResponse = async (message, destination) => { category = ConfigCategory.TRACK; break; case EventType.GROUP: - responseBody = await processGroup(message, destination); + responseBody = await processGroup(message, destination, metadata); category = ConfigCategory.GROUP_USER; break; default: @@ -57,14 +57,14 @@ const validateAndBuildResponse = async (message, destination) => { return response; }; -const processSingleMessage = async (message, destination) => { +const processSingleMessage = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Message Type is not present. Ignoring message.'); } - return validateAndBuildResponse(message, destination); + return validateAndBuildResponse({ message, destination, metadata }); }; -const process = (event) => processSingleMessage(event.message, event.destination); +const process = (event) => processSingleMessage(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/custify/util.js b/src/v0/destinations/custify/util.js index b6f3446503..f35dd4dd23 100644 --- a/src/v0/destinations/custify/util.js +++ b/src/v0/destinations/custify/util.js @@ -27,7 +27,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); * @param {*} Config * @api https://docs.custify.com/#tag/Company/paths/~1company/post */ -const createUpdateCompany = async (companyPayload, Config) => { +const createUpdateCompany = async (companyPayload, Config, metadata) => { const companyResponse = await httpPOST( ConfigCategory.GROUP_COMPANY.endpoint, companyPayload, @@ -43,6 +43,7 @@ const createUpdateCompany = async (companyPayload, Config) => { endpointPath: `/company`, requestMethod: 'POST', module: 'router', + metadata, }, ); const processedCompanyResponse = processAxiosResponse(companyResponse); @@ -187,7 +188,7 @@ const processTrack = (message, { Config }) => { * @api https://docs.custify.com/#tag/People/paths/~1people/post * @api https://docs.custify.com/#tag/Company/paths/~1company/post */ -const processGroup = async (message, { Config }) => { +const processGroup = async (message, { Config }, metadata) => { let companyPayload = constructPayload(message, MappingConfig[ConfigCategory.GROUP_COMPANY.name]); if (!companyPayload.company_id) { throw new InstrumentationError('groupId Id is mandatory'); @@ -205,7 +206,7 @@ const processGroup = async (message, { Config }) => { }); } companyPayload = removeUndefinedAndNullValues(companyPayload); - await createUpdateCompany(companyPayload, Config); + await createUpdateCompany(companyPayload, Config, metadata); const userPayload = constructPayload(message, MappingConfig[ConfigCategory.GROUP_USER.name]); const { sendAnonymousId } = Config; if (sendAnonymousId && !userPayload.user_id) { diff --git a/src/v0/destinations/delighted/transform.js b/src/v0/destinations/delighted/transform.js index cf80dc878d..c560dba03d 100644 --- a/src/v0/destinations/delighted/transform.js +++ b/src/v0/destinations/delighted/transform.js @@ -77,7 +77,7 @@ const identifyResponseBuilder = (message, { Config }) => { return response; }; -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async (message, { Config }, metadata) => { // checks if the event is valid if not throws error else nothing const isValidEvent = eventValidity(Config, message); if (!isValidEvent) { @@ -94,7 +94,7 @@ const trackResponseBuilder = async (message, { Config }) => { const { userIdType, userIdValue } = isValidUserIdOrError(channel, userId); // checking if user already exists or not, throw error if it doesn't - const check = await userValidity(channel, Config, userId); + const check = await userValidity({ channel, Config, userId, metadata }); if (!check) { throw new NetworkInstrumentationError(`user ${userId} doesn't exist`); @@ -167,7 +167,7 @@ const aliasResponseBuilder = (message, { Config }) => { }; const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -184,7 +184,7 @@ const process = async (event) => { response = identifyResponseBuilder(message, destination); break; case EventType.TRACK: - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder(message, destination, metadata); break; case EventType.ALIAS: response = aliasResponseBuilder(message, destination); diff --git a/src/v0/destinations/delighted/util.js b/src/v0/destinations/delighted/util.js index 53f416b48d..99a0923dc9 100644 --- a/src/v0/destinations/delighted/util.js +++ b/src/v0/destinations/delighted/util.js @@ -61,7 +61,7 @@ const getErrorStatus = (status) => { return errStatus; }; -const userValidity = async (channel, Config, userId) => { +const userValidity = async ({ channel, Config, userId, metadata }) => { const paramsdata = {}; if (channel === 'email') { paramsdata.email = userId; @@ -81,6 +81,7 @@ const userValidity = async (channel, Config, userId) => { params: paramsdata, }, { + metadata, destType: 'delighted', feature: 'transformation', requestMethod: 'GET', diff --git a/src/v0/destinations/freshmarketer/transform.js b/src/v0/destinations/freshmarketer/transform.js index aa0e03811d..9cf9757441 100644 --- a/src/v0/destinations/freshmarketer/transform.js +++ b/src/v0/destinations/freshmarketer/transform.js @@ -70,7 +70,7 @@ const identifyResponseBuilder = (message, { Config }) => { * @param {*} Config * @returns */ -const trackResponseBuilder = async (message, { Config }, event) => { +const trackResponseBuilder = async ({ message, destination: { Config }, metadata }, event) => { if (!event) { throw new InstrumentationError('Event name is required for track call.'); } @@ -85,11 +85,12 @@ const trackResponseBuilder = async (message, { Config }, event) => { payload, message, Config, + metadata, ); break; } case 'lifecycle_stage': { - response.body.JSON = await UpdateContactWithLifeCycleStage(message, Config); + response.body.JSON = await UpdateContactWithLifeCycleStage(message, Config, metadata); response.endpoint = `https://${Config.domain}${CONFIG_CATEGORIES.IDENTIFY.baseUrl}`; break; } @@ -111,7 +112,7 @@ const trackResponseBuilder = async (message, { Config }, event) => { * @param {*} Config * @returns */ -const groupResponseBuilder = async (message, { Config }) => { +const groupResponseBuilder = async ({ message, destination: { Config }, metadata }) => { const groupType = get(message, 'traits.groupType'); if (!groupType) { throw new InstrumentationError('groupType is required for Group call'); @@ -130,7 +131,7 @@ const groupResponseBuilder = async (message, { Config }) => { response = updateAccountWOContact(payload, Config); break; } - const accountDetails = await getUserAccountDetails(payload, userEmail, Config); + const accountDetails = await getUserAccountDetails(payload, userEmail, Config, metadata); response = identifyResponseConfig(Config); response.body.JSON.contact = { sales_accounts: accountDetails }; response.body.JSON.unique_identifier = { emails: userEmail }; @@ -143,7 +144,7 @@ const groupResponseBuilder = async (message, { Config }) => { 'email is required for adding in the marketing lists. Aborting!', ); } - const userDetails = await getContactsDetails(userEmail, Config); + const userDetails = await getContactsDetails(userEmail, Config, metadata); const userId = userDetails.response?.contact?.id; if (!userId) { throw new NetworkInstrumentationError('Failed in fetching userId. Aborting!'); @@ -153,7 +154,7 @@ const groupResponseBuilder = async (message, { Config }) => { if (listId) { response = updateContactWithList(userId, listId, Config); } else if (listName) { - listId = await createOrUpdateListDetails(listName, Config); + listId = await createOrUpdateListDetails(listName, Config, metadata); if (!listId) { throw new NetworkInstrumentationError('Failed in fetching listId. Aborting!'); } @@ -198,7 +199,7 @@ function eventMappingHandler(message, destination) { return [...mappedEvents]; } -const processEvent = async (message, destination) => { +const processEvent = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -213,16 +214,19 @@ const processEvent = async (message, destination) => { if (mappedEvents.length > 0) { response = await Promise.all( mappedEvents.map(async (mappedEvent) => - trackResponseBuilder(message, destination, mappedEvent), + trackResponseBuilder({ message, destination, metadata }, mappedEvent), ), ); } else { - response = await trackResponseBuilder(message, destination, get(message, 'event')); + response = await trackResponseBuilder( + { message, destination, metadata }, + get(message, 'event'), + ); } break; } case EventType.GROUP: - response = await groupResponseBuilder(message, destination); + response = await groupResponseBuilder({ message, destination, metadata }); break; default: throw new InstrumentationError(`message type ${messageType} not supported`); @@ -230,7 +234,7 @@ const processEvent = async (message, destination) => { return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/freshmarketer/utils.js b/src/v0/destinations/freshmarketer/utils.js index c80711ff8d..879cd6eace 100644 --- a/src/v0/destinations/freshmarketer/utils.js +++ b/src/v0/destinations/freshmarketer/utils.js @@ -37,7 +37,7 @@ const getHeaders = (apiKey) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_an_account */ -const createUpdateAccount = async (payload, Config) => { +const createUpdateAccount = async (payload, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -52,6 +52,7 @@ const createUpdateAccount = async (payload, Config) => { endpointPath: `/crm/sales/api/sales_accounts/upsert`, requestMethod: 'POST', module: 'router', + metadata, }); accountResponse = processAxiosResponse(accountResponse); if (accountResponse.status !== 200 && accountResponse.status !== 201) { @@ -80,7 +81,7 @@ const createUpdateAccount = async (payload, Config) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_a_contact */ -const getUserAccountDetails = async (payload, userEmail, Config) => { +const getUserAccountDetails = async (payload, userEmail, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -99,6 +100,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { endpointPath: `crm/sales/api/contacts/upsert?include=sales_accounts`, requestMethod: 'POST', module: 'router', + metadata, }); userSalesAccountResponse = processAxiosResponse(userSalesAccountResponse); if (userSalesAccountResponse.status !== 200 && userSalesAccountResponse.status !== 201) { @@ -117,7 +119,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { if (!accountDetails) { throw new NetworkInstrumentationError('Fails in fetching user accountDetails'); } - const accountId = await createUpdateAccount(payload, Config); + const accountId = await createUpdateAccount(payload, Config, metadata); const accountDetail = { id: accountId, is_primary: false, @@ -139,7 +141,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_an_account */ -const createOrUpdateListDetails = async (listName, Config) => { +const createOrUpdateListDetails = async (listName, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -151,6 +153,7 @@ const createOrUpdateListDetails = async (listName, Config) => { endpointPath: `/crm/sales/api/lists`, requestMethod: 'GET', module: 'router', + metadata, }); listResponse = processAxiosResponse(listResponse); if (listResponse.status !== 200) { @@ -173,6 +176,7 @@ const createOrUpdateListDetails = async (listName, Config) => { endpointPath: `/crm/sales/api/lists`, requestMethod: 'POST', module: 'router', + metadata, }); listResponse = processAxiosResponse(listResponse); if (listResponse.status !== 200) { @@ -231,7 +235,7 @@ const updateContactWithList = (userId, listId, Config) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_a_contact */ -const getContactsDetails = async (userEmail, Config) => { +const getContactsDetails = async (userEmail, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -250,6 +254,7 @@ const getContactsDetails = async (userEmail, Config) => { endpointPath: `/crm/sales/api/contacts/upsert`, requestMethod: 'POST', module: 'router', + metadata, }); userResponse = processAxiosResponse(userResponse); if (userResponse.status !== 200 && userResponse.status !== 201) { @@ -276,8 +281,14 @@ const getContactsDetails = async (userEmail, Config) => { * returns */ -const responseBuilderWithContactDetails = async (email, Config, payload, salesActivityTypeId) => { - const userDetails = await getContactsDetails(email, Config); +const responseBuilderWithContactDetails = async ( + email, + Config, + payload, + salesActivityTypeId, + metadata, +) => { + const userDetails = await getContactsDetails(email, Config, metadata); const userId = userDetails.response?.contact?.id; if (!userId) { throw new NetworkInstrumentationError('Failed in fetching userId. Aborting!'); @@ -295,7 +306,7 @@ const responseBuilderWithContactDetails = async (email, Config, payload, salesAc * @param {*} Config - headers, apiKey... * ref: https://developers.freshworks.com/crm/api/#admin_configuration */ -const UpdateContactWithLifeCycleStage = async (message, Config) => { +const UpdateContactWithLifeCycleStage = async (message, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -326,6 +337,7 @@ const UpdateContactWithLifeCycleStage = async (message, Config) => { endpointPath: `/crm/sales/api/selector/lifecycle_stages`, requestMethod: 'GET', module: 'router', + metadata, }); lifeCycleStagesResponse = processAxiosResponse(lifeCycleStagesResponse); if (lifeCycleStagesResponse.status !== 200) { @@ -368,7 +380,7 @@ const UpdateContactWithLifeCycleStage = async (message, Config) => { * @param {*} Config - headers, apiKey... * ref: https://developers.freshworks.com/crm/api/#list_all_sales_activities */ -const UpdateContactWithSalesActivity = async (payload, message, Config) => { +const UpdateContactWithSalesActivity = async (payload, message, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -414,6 +426,7 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { endpointPath: `/crm/sales/api/selector/sales_activity_types`, requestMethod: 'GET', module: 'router', + metadata, }); salesActivityResponse = processAxiosResponse(salesActivityResponse); if (salesActivityResponse.status !== 200) { @@ -452,6 +465,7 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { Config, payload, salesActivityDetails.id, + metadata, ); } diff --git a/src/v0/destinations/freshsales/transform.js b/src/v0/destinations/freshsales/transform.js index 096a2d749c..37c081be49 100644 --- a/src/v0/destinations/freshsales/transform.js +++ b/src/v0/destinations/freshsales/transform.js @@ -66,7 +66,7 @@ const identifyResponseBuilder = (message, { Config }) => { * @param {*} Config * @returns */ -const trackResponseBuilder = async (message, { Config }, event) => { +const trackResponseBuilder = async ({ message, destination: { Config }, metadata }, event) => { let payload; const response = defaultRequestConfig(); @@ -78,11 +78,12 @@ const trackResponseBuilder = async (message, { Config }, event) => { payload, message, Config, + metadata, ); break; } case 'lifecycle_stage': { - response.body.JSON = await UpdateContactWithLifeCycleStage(message, Config); + response.body.JSON = await UpdateContactWithLifeCycleStage(message, Config, metadata); response.endpoint = `https://${Config.domain}${CONFIG_CATEGORIES.IDENTIFY.baseUrl}`; break; } @@ -100,7 +101,7 @@ const trackResponseBuilder = async (message, { Config }, event) => { * @param {*} Config * @returns */ -const groupResponseBuilder = async (message, { Config }) => { +const groupResponseBuilder = async ({ message, destination: { Config }, metadata }) => { const payload = constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.GROUP.name]); if (!payload) { // fail-safety for developer error @@ -114,7 +115,7 @@ const groupResponseBuilder = async (message, { Config }) => { return updateAccountWOContact(payload, Config); } - const accountDetails = await getUserAccountDetails(payload, userEmail, Config); + const accountDetails = await getUserAccountDetails(payload, userEmail, Config, metadata); const responseIdentify = identifyResponseConfig(Config); responseIdentify.body.JSON.contact = { sales_accounts: accountDetails }; responseIdentify.body.JSON.unique_identifier = { emails: userEmail }; @@ -146,7 +147,8 @@ function eventMappingHandler(message, destination) { return [...mappedEvents]; } -const processEvent = async (message, destination) => { +const processEvent = async (event) => { + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -162,25 +164,28 @@ const processEvent = async (message, destination) => { if (mappedEvents.length > 0) { const respList = await Promise.all( mappedEvents.map(async (mappedEvent) => - trackResponseBuilder(message, destination, mappedEvent), + trackResponseBuilder({ message, destination, metadata }, mappedEvent), ), ); response = respList; } else { - response = await trackResponseBuilder(message, destination, get(message, 'event')); + response = await trackResponseBuilder( + { message, destination, metadata }, + get(message, 'event'), + ); } break; } case EventType.GROUP: - response = await groupResponseBuilder(message, destination); + response = await groupResponseBuilder({ message, destination, metadata }); break; default: throw new InstrumentationError(`message type ${messageType} not supported`); } return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/freshsales/utils.js b/src/v0/destinations/freshsales/utils.js index 977bde0abb..14cca0a3d6 100644 --- a/src/v0/destinations/freshsales/utils.js +++ b/src/v0/destinations/freshsales/utils.js @@ -35,7 +35,7 @@ const getHeaders = (apiKey) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_an_account */ -const createUpdateAccount = async (payload, Config) => { +const createUpdateAccount = async (payload, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -50,6 +50,7 @@ const createUpdateAccount = async (payload, Config) => { endpointPath: `/crm/sales/api/sales_accounts/upsert`, requestMethod: 'POST', module: 'router', + metadata, }); accountResponse = processAxiosResponse(accountResponse); if (accountResponse.status !== 200 && accountResponse.status !== 201) { @@ -77,7 +78,7 @@ const createUpdateAccount = async (payload, Config) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_a_contact */ -const getUserAccountDetails = async (payload, userEmail, Config) => { +const getUserAccountDetails = async (payload, userEmail, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -96,6 +97,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { endpointPath: `/crm/sales/api/contacts/upsert?include=sales_accounts`, requestMethod: 'POST', module: 'router', + metadata, }); userSalesAccountResponse = processAxiosResponse(userSalesAccountResponse); if (userSalesAccountResponse.status !== 200 && userSalesAccountResponse.status !== 201) { @@ -114,7 +116,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { if (!accountDetails) { throw new NetworkInstrumentationError('Fails in fetching user accountDetails'); } - const accountId = await createUpdateAccount(payload, Config); + const accountId = await createUpdateAccount(payload, Config, metadata); const accountDetail = { id: accountId, is_primary: false, @@ -135,7 +137,7 @@ const getUserAccountDetails = async (payload, userEmail, Config) => { * @returns * ref: https://developers.freshworks.com/crm/api/#upsert_a_contact */ -const getContactsDetails = async (userEmail, Config) => { +const getContactsDetails = async (userEmail, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -154,6 +156,7 @@ const getContactsDetails = async (userEmail, Config) => { endpointPath: `/crm/sales/api/contacts/upsert`, requestMethod: 'POST', module: 'router', + metadata, }); userResponse = processAxiosResponse(userResponse); if (userResponse.status !== 200 && userResponse.status !== 201) { @@ -180,8 +183,14 @@ const getContactsDetails = async (userEmail, Config) => { * returns */ -const responseBuilderWithContactDetails = async (email, Config, payload, salesActivityTypeId) => { - const userDetails = await getContactsDetails(email, Config); +const responseBuilderWithContactDetails = async ( + email, + Config, + payload, + salesActivityTypeId, + metadata, +) => { + const userDetails = await getContactsDetails(email, Config, metadata); const userId = userDetails.response?.contact?.id; if (!userId) { throw new NetworkInstrumentationError('Failed in fetching userId. Aborting!', userDetails); @@ -201,7 +210,7 @@ const responseBuilderWithContactDetails = async (email, Config, payload, salesAc * @param {*} Config - headers, apiKey... * ref: https://developers.freshworks.com/crm/api/#list_all_sales_activities */ -const UpdateContactWithSalesActivity = async (payload, message, Config) => { +const UpdateContactWithSalesActivity = async (payload, message, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -230,11 +239,12 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { sales_activity_type_id: payload.sales_activity_type_id, }; } else { - responseBody = responseBuilderWithContactDetails( + responseBody = await responseBuilderWithContactDetails( email, Config, payload, payload.sales_activity_type_id, + metadata, ); } return responseBody; @@ -247,6 +257,7 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { endpointPath: `/crm/sales/api/sales_activity_types`, requestMethod: 'GET', module: 'router', + metadata, }); salesActivityResponse = processAxiosResponse(salesActivityResponse); if (salesActivityResponse.status !== 200) { @@ -285,6 +296,7 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { Config, payload, salesActivityDetails.id, + metadata, ); } @@ -298,7 +310,7 @@ const UpdateContactWithSalesActivity = async (payload, message, Config) => { * @param {*} Config - headers, apiKey... * ref: https://developers.freshworks.com/crm/api/#admin_configuration */ -const UpdateContactWithLifeCycleStage = async (message, Config) => { +const UpdateContactWithLifeCycleStage = async (message, Config, metadata) => { const requestOptions = { headers: getHeaders(Config.apiKey), }; @@ -329,6 +341,7 @@ const UpdateContactWithLifeCycleStage = async (message, Config) => { endpointPath: `/crm/sales/api/lifecycle_stages`, requestMethod: 'GET', module: 'router', + metadata, }); lifeCycleStagesResponse = processAxiosResponse(lifeCycleStagesResponse); if (lifeCycleStagesResponse.status !== 200) { diff --git a/src/v0/destinations/hs/HSTransform-v1.js b/src/v0/destinations/hs/HSTransform-v1.js index 51feebea74..ed94bd7c17 100644 --- a/src/v0/destinations/hs/HSTransform-v1.js +++ b/src/v0/destinations/hs/HSTransform-v1.js @@ -51,7 +51,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); * @param {*} propertyMap * @returns */ -const processLegacyIdentify = async (message, destination, propertyMap) => { +const processLegacyIdentify = async ({ message, destination, metadata }, propertyMap) => { const { Config } = destination; let traits = getFieldValueFromMessage(message, 'traits'); const mappedToDestination = get(message, MappedToDestinationKey); @@ -82,7 +82,7 @@ const processLegacyIdentify = async (message, destination, propertyMap) => { response.method = defaultPatchRequestConfig.requestMethod; } - traits = await populateTraits(propertyMap, traits, destination); + traits = await populateTraits(propertyMap, traits, destination, metadata); response.body.JSON = removeUndefinedAndNullValues({ properties: traits }); response.source = 'rETL'; response.operation = operation; @@ -92,7 +92,10 @@ const processLegacyIdentify = async (message, destination, propertyMap) => { } const { email } = traits; - const userProperties = await getTransformedJSON(message, destination, propertyMap); + const userProperties = await getTransformedJSON( + { message, destination, metadata }, + propertyMap, + ); const payload = { properties: formatPropertyValueForIdentify(userProperties), @@ -134,7 +137,7 @@ const processLegacyIdentify = async (message, destination, propertyMap) => { * @param {*} propertyMap * @returns */ -const processLegacyTrack = async (message, destination, propertyMap) => { +const processLegacyTrack = async ({ message, destination, metadata }, propertyMap) => { const { Config } = destination; if (!Config.hubID) { @@ -151,7 +154,7 @@ const processLegacyTrack = async (message, destination, propertyMap) => { id: getDestinationExternalID(message, 'hubspotId'), }; - const userProperties = await getTransformedJSON(message, destination, propertyMap); + const userProperties = await getTransformedJSON({ message, destination, metadata }, propertyMap); const payload = { ...parameters, ...userProperties }; const params = removeUndefinedAndNullValues(payload); diff --git a/src/v0/destinations/hs/HSTransform-v2.js b/src/v0/destinations/hs/HSTransform-v2.js index 71f080205a..3dd9f87ea4 100644 --- a/src/v0/destinations/hs/HSTransform-v2.js +++ b/src/v0/destinations/hs/HSTransform-v2.js @@ -69,7 +69,7 @@ const addHsAuthentication = (response, Config) => { * @param {*} propertyMap * @returns */ -const processIdentify = async (message, destination, propertyMap) => { +const processIdentify = async ({ message, destination, metadata }, propertyMap) => { const { Config } = destination; let traits = getFieldValueFromMessage(message, 'traits'); const mappedToDestination = get(message, MappedToDestinationKey); @@ -126,7 +126,7 @@ const processIdentify = async (message, destination, propertyMap) => { response.method = defaultPatchRequestConfig.requestMethod; } - traits = await populateTraits(propertyMap, traits, destination); + traits = await populateTraits(propertyMap, traits, destination, metadata); response.body.JSON = removeUndefinedAndNullValues({ properties: traits }); response.source = 'rETL'; response.operation = operation; @@ -139,10 +139,10 @@ const processIdentify = async (message, destination, propertyMap) => { // if contactId is not provided then search if (!contactId) { - contactId = await searchContacts(message, destination); + contactId = await searchContacts(message, destination, metadata); } - const properties = await getTransformedJSON(message, destination, propertyMap); + const properties = await getTransformedJSON({ message, destination, metadata }, propertyMap); const payload = { properties, @@ -188,7 +188,7 @@ const processIdentify = async (message, destination, propertyMap) => { * @param {*} destination * @returns */ -const processTrack = async (message, destination) => { +const processTrack = async ({ message, destination }) => { const { Config } = destination; let payload = constructPayload(message, mappingConfig[ConfigCategory.TRACK.name]); diff --git a/src/v0/destinations/hs/transform.js b/src/v0/destinations/hs/transform.js index fe05d45fbb..6cf69e3c3b 100644 --- a/src/v0/destinations/hs/transform.js +++ b/src/v0/destinations/hs/transform.js @@ -21,7 +21,7 @@ const { validateDestinationConfig, } = require('./util'); -const processSingleMessage = async (message, destination, propertyMap) => { +const processSingleMessage = async ({ message, destination, metadata }, propertyMap) => { if (!message.type) { throw new InstrumentationError('Message type is not present. Aborting message.'); } @@ -34,18 +34,18 @@ const processSingleMessage = async (message, destination, propertyMap) => { case EventType.IDENTIFY: { response = []; if (destination.Config.apiVersion === API_VERSION.v3) { - response.push(await processIdentify(message, destination, propertyMap)); + response.push(await processIdentify({ message, destination, metadata }, propertyMap)); } else { // Legacy API - response.push(await processLegacyIdentify(message, destination, propertyMap)); + response.push(await processLegacyIdentify({ message, destination, metadata }, propertyMap)); } break; } case EventType.TRACK: if (destination.Config.apiVersion === API_VERSION.v3) { - response = await processTrack(message, destination, propertyMap); + response = await processTrack({ message, destination }, propertyMap); } else { - response = await processLegacyTrack(message, destination, propertyMap); + response = await processLegacyTrack({ message, destination, metadata }, propertyMap); } break; default: @@ -57,20 +57,24 @@ const processSingleMessage = async (message, destination, propertyMap) => { // has been deprecated - using routerTransform for both the versions const process = async (event) => { - const { destination, message } = event; + const { destination, message, metadata } = event; const mappedToDestination = get(message, MappedToDestinationKey); let events = []; events = [event]; if (mappedToDestination && GENERIC_TRUE_VALUES.includes(mappedToDestination?.toString())) { // get info about existing objects and splitting accordingly. - events = await splitEventsForCreateUpdate([event], destination); + events = await splitEventsForCreateUpdate([event], destination, metadata); } - return processSingleMessage(events[0].message, events[0].destination); + return processSingleMessage({ + message: events[0].message, + destination: events[0].destination, + metadata: events[0].metadata || metadata, + }); }; const processBatchRouter = async (inputs, reqMetadata) => { let tempInputs = inputs; // using the first destination config for transforming the batch - const { destination } = tempInputs[0]; + const { destination, metadata } = tempInputs[0]; let propertyMap; const mappedToDestination = get(tempInputs[0].message, MappedToDestinationKey); const { objectType } = getDestinationExternalIDInfoForRetl(tempInputs[0].message, 'HS'); @@ -82,9 +86,9 @@ const processBatchRouter = async (inputs, reqMetadata) => { if (mappedToDestination && GENERIC_TRUE_VALUES.includes(mappedToDestination?.toString())) { // skip splitting the batches to inserts and updates if object it is an association if (objectType.toLowerCase() !== 'association') { - propertyMap = await getProperties(destination); + propertyMap = await getProperties(destination, metadata); // get info about existing objects and splitting accordingly. - tempInputs = await splitEventsForCreateUpdate(tempInputs, destination); + tempInputs = await splitEventsForCreateUpdate(tempInputs, destination, metadata); } } else { // reduce the no. of calls for properties endpoint @@ -92,7 +96,7 @@ const processBatchRouter = async (inputs, reqMetadata) => { (input) => fetchFinalSetOfTraits(input.message) !== undefined, ); if (traitsFound) { - propertyMap = await getProperties(destination); + propertyMap = await getProperties(destination, metadata); } } } catch (error) { @@ -118,8 +122,7 @@ const processBatchRouter = async (inputs, reqMetadata) => { } else { // event is not transformed let receivedResponse = await processSingleMessage( - input.message, - destination, + { message: input.message, destination, metadata: input.metadata }, propertyMap, ); diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js index b30207fe15..38b2e636b9 100644 --- a/src/v0/destinations/hs/util.js +++ b/src/v0/destinations/hs/util.js @@ -90,7 +90,7 @@ const fetchFinalSetOfTraits = (message) => { * @param {*} destination * @returns */ -const getProperties = async (destination) => { +const getProperties = async (destination, metadata) => { let hubspotPropertyMap = {}; let hubspotPropertyMapResponse; const { Config } = destination; @@ -110,6 +110,7 @@ const getProperties = async (destination) => { endpointPath: `/properties/v1/contacts/properties`, requestMethod: 'GET', module: 'router', + metadata, }); hubspotPropertyMapResponse = processAxiosResponse(hubspotPropertyMapResponse); } else { @@ -124,6 +125,7 @@ const getProperties = async (destination) => { endpointPath: `/properties/v1/contacts/properties?hapikey`, requestMethod: 'GET', module: 'router', + metadata, }, ); hubspotPropertyMapResponse = processAxiosResponse(hubspotPropertyMapResponse); @@ -208,7 +210,7 @@ const getUTCMidnightTimeStampValue = (propValue) => { * @param {*} propertyMap * @returns */ -const getTransformedJSON = async (message, destination, propertyMap) => { +const getTransformedJSON = async ({ message, destination, metadata }, propertyMap) => { let rawPayload = {}; const traits = fetchFinalSetOfTraits(message); @@ -217,7 +219,7 @@ const getTransformedJSON = async (message, destination, propertyMap) => { if (!propertyMap) { // fetch HS properties // eslint-disable-next-line no-param-reassign - propertyMap = await getProperties(destination); + propertyMap = await getProperties(destination, metadata); } rawPayload = constructPayload(message, hsCommonConfigJson); @@ -325,7 +327,7 @@ const getLookupFieldValue = (message, lookupField) => { * @param {*} destination * @returns */ -const searchContacts = async (message, destination) => { +const searchContacts = async (message, destination, metadata) => { const { Config } = destination; let searchContactsResponse; let contactId; @@ -377,6 +379,7 @@ const searchContacts = async (message, destination) => { endpointPath, requestMethod: 'POST', module: 'router', + metadata, }, ); searchContactsResponse = processAxiosResponse(searchContactsResponse); @@ -389,6 +392,7 @@ const searchContacts = async (message, destination) => { endpointPath, requestMethod: 'POST', module: 'router', + metadata, }); searchContactsResponse = processAxiosResponse(searchContactsResponse); } @@ -528,6 +532,7 @@ const performHubSpotSearch = async ( objectType, identifierType, destination, + metadata, ) => { let checkAfter = 1; const searchResults = []; @@ -556,6 +561,7 @@ const performHubSpotSearch = async ( endpointPath, requestMethod: 'POST', module: 'router', + metadata, }); const processedResponse = processAxiosResponse(searchResponse); @@ -655,7 +661,7 @@ const getRequestData = (identifierType, chunk) => { * @param {*} inputs * @param {*} destination */ -const getExistingContactsData = async (inputs, destination) => { +const getExistingContactsData = async (inputs, destination, metadata) => { const { Config } = destination; const hsIdsToBeUpdated = []; const firstMessage = inputs[0].message; @@ -683,6 +689,7 @@ const getExistingContactsData = async (inputs, destination) => { objectType, identifierType, destination, + metadata, ); if (searchResults.length > 0) { hsIdsToBeUpdated.push(...searchResults); @@ -728,9 +735,9 @@ const setHsSearchId = (input, id, useSecondaryProp = false) => { * For email as primary key we use `hs_additional_emails` as well property to search existing contacts * */ -const splitEventsForCreateUpdate = async (inputs, destination) => { +const splitEventsForCreateUpdate = async (inputs, destination, metadata) => { // get all the id and properties of already existing objects needed for update. - const hsIdsToBeUpdated = await getExistingContactsData(inputs, destination); + const hsIdsToBeUpdated = await getExistingContactsData(inputs, destination, metadata); const resultInput = inputs.map((input) => { const { message } = input; @@ -805,12 +812,12 @@ const getHsSearchId = (message) => { * @param {*} traits * @param {*} destination */ -const populateTraits = async (propertyMap, traits, destination) => { +const populateTraits = async (propertyMap, traits, destination, metadata) => { const populatedTraits = traits; let propertyToTypeMap = propertyMap; if (!propertyToTypeMap) { // fetch HS properties - propertyToTypeMap = await getProperties(destination); + propertyToTypeMap = await getProperties(destination, metadata); } const keys = Object.keys(populatedTraits); diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 4e61d65982..53d82158c5 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -46,12 +46,12 @@ const getIdFromNewOrExistingProfile = async ({ endpoint, payload, requestOptions payload, requestOptions, { + metadata, destType: 'klaviyo', feature: 'transformation', endpointPath, requestMethod: 'POST', module: 'router', - metadata, }, ); diff --git a/src/v0/destinations/marketo/transform.js b/src/v0/destinations/marketo/transform.js index b811596f95..accca1d449 100644 --- a/src/v0/destinations/marketo/transform.js +++ b/src/v0/destinations/marketo/transform.js @@ -55,7 +55,7 @@ const authCache = new Cache(AUTH_CACHE_TTL); // 1 hr // fails the transformer if auth fails // ------------------------ // Ref: https://developers.marketo.com/rest-api/authentication/#creating_an_access_token -const getAuthToken = async (formattedDestination) => +const getAuthToken = async (formattedDestination, metadata) => authCache.get(formattedDestination.ID, async () => { const { accountId, clientId, clientSecret } = formattedDestination; const clientResponse = await sendGetRequest( @@ -67,6 +67,7 @@ const getAuthToken = async (formattedDestination) => grant_type: 'client_credentials', }, }, + metadata, ); const data = marketoResponseHandler(clientResponse, 'During fetching auth token'); if (data) { @@ -92,7 +93,7 @@ const getAuthToken = async (formattedDestination) => // If lookupField is omitted, the default key is email. // ------------------------ // Thus we'll always be using createOrUpdate -const createOrUpdateLead = async (formattedDestination, token, userId, anonymousId) => +const createOrUpdateLead = async (formattedDestination, token, userId, anonymousId, metadata) => userIdLeadCache.get(userId || anonymousId, async () => { const attribute = userId ? { userId } : { anonymousId }; stats.increment(LEAD_LOOKUP_METRIC, { @@ -114,6 +115,7 @@ const createOrUpdateLead = async (formattedDestination, token, userId, anonymous 'Content-type': JSON_MIME_TYPE, }, }, + metadata, ); const data = getResponseHandlerData( clientResponse, @@ -135,7 +137,7 @@ const createOrUpdateLead = async (formattedDestination, token, userId, anonymous // ------------------------ // Ref: https://developers.marketo.com/rest-api/lead-database/leads/#create_and_update // ------------------------ -const lookupLeadUsingEmail = async (formattedDestination, token, email) => +const lookupLeadUsingEmail = async (formattedDestination, token, email, metadata) => emailLeadCache.get(email, async () => { stats.increment(LEAD_LOOKUP_METRIC, { type: 'email', action: 'fetch' }); const clientResponse = await sendGetRequest( @@ -145,6 +147,7 @@ const lookupLeadUsingEmail = async (formattedDestination, token, email) => params: { filterValues: email, filterType: 'email' }, headers: { Authorization: `Bearer ${token}` }, }, + metadata, ); const data = getResponseHandlerData( clientResponse, @@ -167,7 +170,7 @@ const lookupLeadUsingEmail = async (formattedDestination, token, email) => // ------------------------ // Ref: https://developers.marketo.com/rest-api/lead-database/leads/#create_and_update // ------------------------ -const lookupLeadUsingId = async (formattedDestination, token, userId, anonymousId) => +const lookupLeadUsingId = async (formattedDestination, token, userId, anonymousId, metadata) => userIdLeadCache.get(userId || anonymousId, async () => { stats.increment(LEAD_LOOKUP_METRIC, { type: 'userId', action: 'fetch' }); const clientResponse = await sendGetRequest( @@ -179,6 +182,7 @@ const lookupLeadUsingId = async (formattedDestination, token, userId, anonymousI }, headers: { Authorization: `Bearer ${token}` }, }, + metadata, ); const data = getResponseHandlerData( clientResponse, @@ -195,7 +199,7 @@ const lookupLeadUsingId = async (formattedDestination, token, userId, anonymousI return null; }); -const getLeadId = async (message, formattedDestination, token) => { +const getLeadId = async (message, formattedDestination, token, metadata) => { // precedence ->> // -> externalId (context.externalId[0].type == marketoLeadId) // -> lookup lead using email @@ -225,10 +229,16 @@ const getLeadId = async (message, formattedDestination, token) => { if (!leadId) { // search for lead using email if (email) { - leadId = await lookupLeadUsingEmail(formattedDestination, token, email); + leadId = await lookupLeadUsingEmail(formattedDestination, token, email, metadata); } else { // search lead using userId or anonymousId - leadId = await lookupLeadUsingId(formattedDestination, token, userId, message.anonymousId); + leadId = await lookupLeadUsingId( + formattedDestination, + token, + userId, + message.anonymousId, + metadata, + ); } } @@ -236,7 +246,13 @@ const getLeadId = async (message, formattedDestination, token) => { if (!leadId) { // check we have permission to create lead on marketo if (formattedDestination.createIfNotExist) { - leadId = await createOrUpdateLead(formattedDestination, token, userId, message.anonymousId); + leadId = await createOrUpdateLead( + formattedDestination, + token, + userId, + message.anonymousId, + metadata, + ); } else { throw new ConfigurationError('Lead creation is turned off on the dashboard'); } @@ -264,7 +280,7 @@ const getLeadId = async (message, formattedDestination, token) => { // ------------------------ // Almost same as leadId lookup. Noticable difference from lookup is we'll using // `id` i.e. leadId as lookupField at the end of it -const processIdentify = async (message, formattedDestination, token) => { +const processIdentify = async (message, formattedDestination, token, metadata) => { // If mapped to destination, Add externalId to traits if (get(message, MappedToDestinationKey)) { addExternalIdToTraits(message); @@ -277,7 +293,7 @@ const processIdentify = async (message, formattedDestination, token) => { throw new InstrumentationError('Invalid traits value for Marketo'); } - const leadId = await getLeadId(message, formattedDestination, token); + const leadId = await getLeadId(message, formattedDestination, token, metadata); let attribute = constructPayload(traits, identifyConfig); // leadTraitMapping will not be used if mapping is done through VDM in rETL @@ -338,7 +354,7 @@ const processIdentify = async (message, formattedDestination, token) => { // process track events - only mapped events // ------------------------ // Ref: https://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Activities/addCustomActivityUsingPOST -const processTrack = async (message, formattedDestination, token) => { +const processTrack = async (message, formattedDestination, token, metadata) => { // check if trackAnonymousEvent is turned off and userId is not present - fail // check if the event is mapped in customActivityEventMap. if not - fail // get primaryKey name for the event @@ -373,7 +389,7 @@ const processTrack = async (message, formattedDestination, token) => { } // get leadId - const leadId = await getLeadId(message, formattedDestination, token); + const leadId = await getLeadId(message, formattedDestination, token, metadata); // handle addition of custom activity attributes // Reference: https://developers.marketo.com/rest-api/lead-database/activities/#add_custom_activities @@ -420,7 +436,7 @@ const responseWrapper = (response) => { return resp; }; -const processEvent = async (message, destination, token) => { +const processEvent = async ({ message, destination, metadata }, token) => { if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -430,10 +446,10 @@ const processEvent = async (message, destination, token) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await processIdentify(message, formattedDestination, token); + response = await processIdentify(message, formattedDestination, token, metadata); break; case EventType.TRACK: - response = await processTrack(message, formattedDestination, token); + response = await processTrack(message, formattedDestination, token, metadata); break; default: throw new InstrumentationError('Message type not supported'); @@ -444,11 +460,11 @@ const processEvent = async (message, destination, token) => { }; const process = async (event) => { - const token = await getAuthToken(formatConfig(event.destination)); + const token = await getAuthToken(formatConfig(event.destination), event.metadata); if (!token) { throw new UnauthorizedError('Authorization failed'); } - const response = await processEvent(event.message, event.destination, token); + const response = await processEvent(event, token); return response; }; @@ -457,7 +473,7 @@ const processRouterDest = async (inputs, reqMetadata) => { // If destination information is not present Error should be thrown let token; try { - token = await getAuthToken(formatConfig(inputs[0].destination)); + token = await getAuthToken(formatConfig(inputs[0].destination), inputs[0].metadata); // If token is null track/identify calls cannot be executed. if (!token) { @@ -483,7 +499,7 @@ const processRouterDest = async (inputs, reqMetadata) => { inputs.map(async (input) => { try { return getSuccessRespEvents( - await processEvent(input.message, input.destination, token), + await processEvent(input, token), [input.metadata], input.destination, ); diff --git a/src/v0/destinations/marketo/util.js b/src/v0/destinations/marketo/util.js index b3a24fb411..aee872efac 100644 --- a/src/v0/destinations/marketo/util.js +++ b/src/v0/destinations/marketo/util.js @@ -243,13 +243,14 @@ const marketoResponseHandler = ( * @param {*} options * @returns { response, status } */ -const sendGetRequest = async (url, options) => { +const sendGetRequest = async (url, options, metadata) => { const clientResponse = await httpGET(url, options, { destType: 'marketo', feature: 'transformation', endpointPath: `/v1/leads`, requestMethod: 'GET', module: 'router', + metadata, }); const processedResponse = processAxiosResponse(clientResponse); return processedResponse; @@ -261,13 +262,14 @@ const sendGetRequest = async (url, options) => { * @param {*} options * @returns { response, status } */ -const sendPostRequest = async (url, data, options) => { +const sendPostRequest = async (url, data, options, metadata) => { const clientResponse = await httpPOST(url, data, options, { destType: 'marketo', feature: 'transformation', endpointPath: `/v1/leads`, requestMethod: 'POST', module: 'router', + metadata, }); const processedResponse = processAxiosResponse(clientResponse); return processedResponse; diff --git a/src/v0/destinations/marketo_static_list/transform.js b/src/v0/destinations/marketo_static_list/transform.js index 92c137c614..810b528bbf 100644 --- a/src/v0/destinations/marketo_static_list/transform.js +++ b/src/v0/destinations/marketo_static_list/transform.js @@ -93,7 +93,7 @@ const processEvent = (event) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const process = async (event, _processParams) => { - const token = await getAuthToken(formatConfig(event.destination)); + const token = await getAuthToken(formatConfig(event.destination), event.metadata); if (!token) { throw new UnauthorizedError('Authorization failed'); } @@ -106,9 +106,9 @@ const processRouterDest = async (inputs, reqMetadata) => { // Token needs to be generated for marketo which will be done on input level. // If destination information is not present Error should be thrown - const { destination } = inputs[0]; + const { destination, metadata } = inputs[0]; try { - const token = await getAuthToken(formatConfig(destination)); + const token = await getAuthToken(formatConfig(destination), metadata); if (!token) { throw new UnauthorizedError('Could not retrieve authorisation token'); } diff --git a/src/v0/destinations/mautic/transform.js b/src/v0/destinations/mautic/transform.js index 13808f6e3c..56cfceb371 100644 --- a/src/v0/destinations/mautic/transform.js +++ b/src/v0/destinations/mautic/transform.js @@ -56,7 +56,7 @@ const responseBuilder = async (payload, endpoint, method, messageType, Config) = * @param {*} endPoint * @returns build response for group call */ -const groupResponseBuilder = async (message, Config, endPoint) => { +const groupResponseBuilder = async ({ message, Config, metadata }, endPoint) => { let groupClass; validateGroupCall(message); switch (message.traits?.type?.toLowerCase()) { @@ -76,7 +76,7 @@ const groupResponseBuilder = async (message, Config, endPoint) => { } let contactId = getDestinationExternalID(message, 'mauticContactId'); if (!contactId) { - const contacts = await searchContactIds(message, Config, endPoint); + const contacts = await searchContactIds({ message, Config, metadata }, endPoint); if (!contacts || contacts.length === 0) { throw new ConfigurationError('Could not find any contact ID on lookup'); } @@ -117,7 +117,7 @@ const groupResponseBuilder = async (message, Config, endPoint) => { * @param {*} endPoint * @returns build response for identify call */ -const identifyResponseBuilder = async (message, Config, endpoint) => { +const identifyResponseBuilder = async ({ message, Config, metadata }, endpoint) => { let method; let endPoint; // constructing payload from mapping JSONs @@ -135,7 +135,7 @@ const identifyResponseBuilder = async (message, Config, endpoint) => { let contactId = getDestinationExternalID(message, 'mauticContactId'); if (!contactId) { - const contacts = await searchContactIds(message, Config, endpoint); + const contacts = await searchContactIds({ message, Config, metadata }, endpoint); if (contacts?.length === 1) { const [first] = contacts; contactId = first; @@ -154,7 +154,7 @@ const identifyResponseBuilder = async (message, Config, endpoint) => { }; const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; const { password, userName } = destination.Config; if (!password) { throw new ConfigurationError( @@ -178,10 +178,16 @@ const process = async (event) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination.Config, endpoint); + response = await identifyResponseBuilder( + { message, Config: destination.Config, metadata }, + endpoint, + ); break; case EventType.GROUP: - response = await groupResponseBuilder(message, destination.Config, endpoint); + response = await groupResponseBuilder( + { message, Config: destination.Config, metadata }, + endpoint, + ); break; default: throw new InstrumentationError(`Event type "${messageType}" is not supported`); diff --git a/src/v0/destinations/mautic/utils.js b/src/v0/destinations/mautic/utils.js index 7a1827e769..fc9654d2e3 100644 --- a/src/v0/destinations/mautic/utils.js +++ b/src/v0/destinations/mautic/utils.js @@ -154,7 +154,7 @@ const validateGroupCall = (message) => { * It checks for lookUpfield Validation and make axios call ,if Valid, and returns the contactIDs received. * It Gets the contact Id using Lookup field and then email, otherwise returns null */ -const searchContactIds = async (message, Config, baseUrl) => { +const searchContactIds = async ({ message, Config, metadata }, baseUrl) => { const { lookUpField, userName, password } = Config; const traits = getFieldValueFromMessage(message, 'traits'); @@ -186,6 +186,7 @@ const searchContactIds = async (message, Config, baseUrl) => { endpointPath: '/contacts', requestMethod: 'GET', module: 'router', + metadata, }, ); searchContactsResponse = processAxiosResponse(searchContactsResponse); diff --git a/src/v0/destinations/monday/transform.js b/src/v0/destinations/monday/transform.js index 152b42f8d0..de34fa0521 100644 --- a/src/v0/destinations/monday/transform.js +++ b/src/v0/destinations/monday/transform.js @@ -38,7 +38,7 @@ const responseBuilder = (payload, endpoint, apiToken) => { * @param {*} param1 * @returns */ -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async ({ message, destination: { Config }, metadata }) => { const { apiToken } = Config; let boardId = getDestinationExternalID(message, 'boardId'); const event = get(message, 'event'); @@ -54,14 +54,14 @@ const trackResponseBuilder = async (message, { Config }) => { } const endpoint = ENDPOINT; - const processedResponse = await getBoardDetails(endpoint, boardId, apiToken); + const processedResponse = await getBoardDetails(endpoint, boardId, apiToken, metadata); const payload = populatePayload(message, Config, processedResponse); return responseBuilder(payload, endpoint, apiToken); }; -const processEvent = async (message, destination) => { +const processEvent = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -71,14 +71,14 @@ const processEvent = async (message, destination) => { const messageType = message.type.toLowerCase(); let response; if (messageType === EventType.TRACK) { - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder({ message, destination, metadata }); } else { throw new InstrumentationError(`Event type ${messageType} is not supported`); } return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/monday/util.js b/src/v0/destinations/monday/util.js index 0694028eb2..07e084c158 100644 --- a/src/v0/destinations/monday/util.js +++ b/src/v0/destinations/monday/util.js @@ -179,7 +179,7 @@ const mapColumnValues = (properties, columnToPropertyMapping, board) => { * @param {*} apiToken * @returns */ -const getBoardDetails = async (url, boardID, apiToken) => { +const getBoardDetails = async (url, boardID, apiToken, metadata) => { const clientResponse = await httpPOST( url, { @@ -197,6 +197,7 @@ const getBoardDetails = async (url, boardID, apiToken) => { endpointPath: '/v2', requestMethod: 'POST', module: 'router', + metadata, }, ); const boardDetailsResponse = processAxiosResponse(clientResponse); diff --git a/src/v0/destinations/pardot/networkHandler.js b/src/v0/destinations/pardot/networkHandler.js index 60d2f7ee23..6344301d39 100644 --- a/src/v0/destinations/pardot/networkHandler.js +++ b/src/v0/destinations/pardot/networkHandler.js @@ -118,6 +118,7 @@ const prepareProxyReq = (request) => { * @returns */ const pardotProxyRequest = async (request) => { + const { metadata } = request; const { endpoint, data, method, params, headers } = prepareProxyReq(request); const requestOptions = { @@ -130,6 +131,7 @@ const pardotProxyRequest = async (request) => { const response = await httpSend(requestOptions, { feature: 'proxy', destType: 'pardot', + metadata, }); return response; }; diff --git a/src/v0/destinations/profitwell/transform.js b/src/v0/destinations/profitwell/transform.js index 58449fd9c1..e88718771e 100644 --- a/src/v0/destinations/profitwell/transform.js +++ b/src/v0/destinations/profitwell/transform.js @@ -24,18 +24,19 @@ const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); -const identifyResponseBuilder = async (message, { Config }) => { +const identifyResponseBuilder = async ({ message, destination: { Config }, metadata }) => { const { userId, userAlias, subscriptionId, subscriptionAlias } = validatePayloadAndRetunImpIds(message); let finalSubscriptionId = subscriptionId; let finalSubscriptionAlias = subscriptionAlias; - - const targetUrl = `${BASE_ENDPOINT}/v2/users/${userId || userAlias}/`; - const res = await getSubscriptionHistory(targetUrl, { + const options = { headers: { Authorization: Config.privateApiKey, }, - }); + }; + + const targetUrl = `${BASE_ENDPOINT}/v2/users/${userId || userAlias}/`; + const res = await getSubscriptionHistory(targetUrl, options, metadata); let payload; const response = defaultRequestConfig(); @@ -159,7 +160,7 @@ const process = async (event) => { let response; if (messageType === EventType.IDENTIFY) { - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(event); } else { throw new InstrumentationError(`Event type ${messageType} is not supported`); } diff --git a/src/v0/destinations/profitwell/utils.js b/src/v0/destinations/profitwell/utils.js index 1b23561721..cdc4f8a47d 100644 --- a/src/v0/destinations/profitwell/utils.js +++ b/src/v0/destinations/profitwell/utils.js @@ -179,7 +179,7 @@ const CURRENCY_CODES = [ 'zwl', ]; -const getSubscriptionHistory = async (endpoint, options) => { +const getSubscriptionHistory = async (endpoint, options, metadata) => { const requestOptions = { method: 'get', ...options, @@ -191,6 +191,7 @@ const getSubscriptionHistory = async (endpoint, options) => { endpointPath: '/users/userId', requestMethod: 'GET', module: 'router', + metadata, }); return res; }; diff --git a/src/v0/destinations/rakuten/networkHandler.js b/src/v0/destinations/rakuten/networkHandler.js index 4c97a23e51..95189cab62 100644 --- a/src/v0/destinations/rakuten/networkHandler.js +++ b/src/v0/destinations/rakuten/networkHandler.js @@ -10,6 +10,7 @@ const { HTTP_STATUS_CODES } = require('../../util/constant'); const DESTINATION = 'RAKUTEN'; const prepareProxyRequest = (request) => request; const proxyRequest = async (request, destType) => { + const { metadata } = request; const { endpoint, data, method, params, headers } = prepareProxyRequest(request); const requestOptions = { url: endpoint, @@ -21,6 +22,7 @@ const proxyRequest = async (request, destType) => { const response = await httpSend(requestOptions, { feature: 'proxy', destType, + metadata, endpointPath: '/ep', requestMethod: 'GET', module: 'dataDelivery', diff --git a/src/v0/destinations/salesforce/transform.js b/src/v0/destinations/salesforce/transform.js index b8f032c5bf..9b7123c207 100644 --- a/src/v0/destinations/salesforce/transform.js +++ b/src/v0/destinations/salesforce/transform.js @@ -106,7 +106,7 @@ async function getSaleforceIdForRecord( objectType, identifierType, identifierValue, - destination, + { destination, metadata }, authorizationFlow, ) { const objSearchUrl = `${authorizationData.instanceUrl}/services/data/v${SF_API_VERSION}/parameterizedSearch/?q=${identifierValue}&sobject=${objectType}&in=${identifierType}&${objectType}.fields=id,${identifierType}`; @@ -117,6 +117,7 @@ async function getSaleforceIdForRecord( headers: getAuthHeader({ authorizationFlow, authorizationData }), }, { + metadata, destType: 'salesforce', feature: 'transformation', endpointPath: '/parameterizedSearch', @@ -156,9 +157,8 @@ async function getSaleforceIdForRecord( // // Default Object type will be "Lead" for backward compatibility async function getSalesforceIdFromPayload( - message, + { message, destination, metadata }, authorizationData, - destination, authorizationFlow, ) { // define default map @@ -201,7 +201,7 @@ async function getSalesforceIdFromPayload( objectType, identifierType, id, - destination, + { destination, metadata }, authorizationFlow, ); } @@ -233,6 +233,7 @@ async function getSalesforceIdFromPayload( headers: getAuthHeader({ authorizationFlow, authorizationData }), }, { + metadata, destType: 'salesforce', feature: 'transformation', endpointPath: '/parameterizedSearch', @@ -283,7 +284,11 @@ async function getSalesforceIdFromPayload( } // Function for handling identify events -async function processIdentify(message, authorizationData, destination, authorizationFlow) { +async function processIdentify( + { message, destination, metadata }, + authorizationData, + authorizationFlow, +) { const mapProperty = destination.Config.mapProperty === undefined ? true : destination.Config.mapProperty; // check the traits before hand @@ -305,9 +310,8 @@ async function processIdentify(message, authorizationData, destination, authoriz // get salesforce object map const salesforceMaps = await getSalesforceIdFromPayload( - message, + { message, destination, metadata }, authorizationData, - destination, authorizationFlow, ); @@ -331,10 +335,18 @@ async function processIdentify(message, authorizationData, destination, authoriz // Generic process function which invokes specific handler functions depending on message type // and event type where applicable -async function processSingleMessage(message, authorizationData, destination, authorizationFlow) { +async function processSingleMessage( + { message, destination, metadata }, + authorizationData, + authorizationFlow, +) { let response; if (message.type === EventType.IDENTIFY) { - response = await processIdentify(message, authorizationData, destination, authorizationFlow); + response = await processIdentify( + { message, destination, metadata }, + authorizationData, + authorizationFlow, + ); } else { throw new InstrumentationError(`message type ${message.type} is not supported`); } @@ -344,9 +356,8 @@ async function processSingleMessage(message, authorizationData, destination, aut async function process(event) { const authInfo = await collectAuthorizationInfo(event); const response = await processSingleMessage( - event.message, + event, authInfo.authorizationData, - event.destination, authInfo.authorizationFlow, ); return response; @@ -377,12 +388,7 @@ const processRouterDest = async (inputs, reqMetadata) => { // unprocessed payload return getSuccessRespEvents( - await processSingleMessage( - input.message, - authInfo.authorizationData, - input.destination, - authInfo.authorizationFlow, - ), + await processSingleMessage(input, authInfo.authorizationData, authInfo.authorizationFlow), [input.metadata], input.destination, ); diff --git a/src/v0/destinations/salesforce/utils.js b/src/v0/destinations/salesforce/utils.js index bb1236d290..9a4effc502 100644 --- a/src/v0/destinations/salesforce/utils.js +++ b/src/v0/destinations/salesforce/utils.js @@ -101,7 +101,7 @@ const salesforceResponseHandler = (destResponse, sourceMessage, authKey, authori * Utility method to construct the header to be used for SFDC API calls * The "Authorization: Bearer " header element needs to be passed * for authentication for all SFDC REST API calls - * @param {*} destination + * @param {destination: Record, metadata: Record} * @returns */ const getAccessTokenOauth = (metadata) => ({ @@ -109,7 +109,7 @@ const getAccessTokenOauth = (metadata) => ({ instanceUrl: metadata.secret?.instance_url, }); -const getAccessToken = async (destination) => { +const getAccessToken = async ({ destination, metadata }) => { const accessTokenKey = destination.ID; return ACCESS_TOKEN_CACHE.get(accessTokenKey, async () => { @@ -137,6 +137,7 @@ const getAccessToken = async (destination) => { endpointPath: '/services/oauth2/token', requestMethod: 'POST', module: 'router', + metadata, }, ); // If the request fails, throwing error. @@ -173,7 +174,7 @@ const collectAuthorizationInfo = async (event) => { authorizationData = getAccessTokenOauth(event.metadata); } else { authorizationFlow = LEGACY; - authorizationData = await getAccessToken(event.destination); + authorizationData = await getAccessToken(event); } return { authorizationFlow, authorizationData }; }; diff --git a/src/v0/destinations/sendgrid/transform.js b/src/v0/destinations/sendgrid/transform.js index c32e34c489..a3516687db 100644 --- a/src/v0/destinations/sendgrid/transform.js +++ b/src/v0/destinations/sendgrid/transform.js @@ -57,15 +57,15 @@ const responseBuilder = (payload, method, endpoint, apiKey) => { throw new TransformationError(ErrorMessage.FailedToConstructPayload); }; -const identifyResponseBuilder = async (message, destination) => { +const identifyResponseBuilder = async ({ message, destination, metadata }) => { validateIdentifyPayload(message); - const builder = await createOrUpdateContactPayloadBuilder(message, destination); + const builder = await createOrUpdateContactPayloadBuilder({ message, destination, metadata }); const { payload, method, endpoint } = builder; const { apiKey } = destination.Config; return responseBuilder(payload, method, endpoint, apiKey); }; -const trackResponseBuilder = async (message, { Config }) => { +const trackResponseBuilder = async ({ message, destination: { Config } }) => { validateTrackPayload(message, Config); let payload = {}; payload = constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.TRACK.name]); @@ -123,7 +123,8 @@ const trackResponseBuilder = async (message, { Config }) => { return responseBuilder(payload, method, endpoint, apiKey); }; -const processEvent = async (message, destination) => { +const processEvent = async (event) => { + const { message, destination } = event; // Validating if message type is even given or not if (!message.type) { throw new InstrumentationError('Event type is required'); @@ -137,10 +138,10 @@ const processEvent = async (message, destination) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(event); break; case EventType.TRACK: - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder(event); break; default: throw new InstrumentationError(`Event type ${messageType} is not supported`); @@ -148,7 +149,7 @@ const processEvent = async (message, destination) => { return response; }; -const process = (event) => processEvent(event.message, event.destination); +const process = (event) => processEvent(event); const generateBatchedPaylaodForArray = (events, combination) => { let batchEventResponse = defaultBatchRequestConfig(); diff --git a/src/v0/destinations/sendgrid/util.js b/src/v0/destinations/sendgrid/util.js index 7105c5cda5..1edb480516 100644 --- a/src/v0/destinations/sendgrid/util.js +++ b/src/v0/destinations/sendgrid/util.js @@ -431,7 +431,7 @@ const getContactListIds = (message, destination) => { * @param {*} destination * @returns */ -const fetchCustomFields = async (destination) => { +const fetchCustomFields = async ({ destination, metadata }) => { const { apiKey } = destination.Config; return customFieldsCache.get(destination.ID, async () => { const requestOptions = { @@ -448,6 +448,7 @@ const fetchCustomFields = async (destination) => { endpointPath: '/marketing/field_definitions', requestMethod: 'GET', module: 'router', + metadata, }); const processedResponse = processAxiosResponse(resonse); if (isHttpStatusSuccess(processedResponse.status)) { @@ -475,14 +476,14 @@ const fetchCustomFields = async (destination) => { * @param {*} contactDetails * @returns */ -const getCustomFields = async (message, destination) => { +const getCustomFields = async ({ message, destination, metadata }) => { const customFields = {}; const payload = get(message, 'context.traits'); const { customFieldsMapping } = destination.Config; const fieldsMapping = getHashFromArray(customFieldsMapping, 'from', 'to', false); const fields = Object.keys(fieldsMapping); if (fields.length > 0) { - const destinationCustomFields = await fetchCustomFields(destination); + const destinationCustomFields = await fetchCustomFields({ destination, metadata }); const customFieldNameToIdMapping = {}; const customFieldNamesArray = destinationCustomFields.map((destinationCustomField) => { const { id, name } = destinationCustomField; @@ -511,13 +512,13 @@ const getCustomFields = async (message, destination) => { * @param {*} destination * @returns */ -const createOrUpdateContactPayloadBuilder = async (message, destination) => { +const createOrUpdateContactPayloadBuilder = async ({ message, destination, metadata }) => { const contactDetails = constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.IDENTIFY.name]); if (contactDetails.address_line_1) { contactDetails.address_line_1 = flattenAddress(contactDetails.address_line_1); } const contactListIds = getContactListIds(message, destination); - contactDetails.custom_fields = await getCustomFields(message, destination); + contactDetails.custom_fields = await getCustomFields({ message, destination, metadata }); const payload = { contactDetails, contactListIds }; const { endpoint } = CONFIG_CATEGORIES.IDENTIFY; const method = defaultPutRequestConfig.requestMethod; diff --git a/src/v0/destinations/sendinblue/transform.js b/src/v0/destinations/sendinblue/transform.js index 9514359d02..4e22200ee5 100644 --- a/src/v0/destinations/sendinblue/transform.js +++ b/src/v0/destinations/sendinblue/transform.js @@ -176,7 +176,7 @@ const updateDOIContactResponseBuilder = (message, destination, identifier) => { ); }; -const createOrUpdateDOIContactResponseBuilder = async (message, destination) => { +const createOrUpdateDOIContactResponseBuilder = async ({ message, destination, metadata }) => { let email = getFieldValueFromMessage(message, 'emailOnly'); const phone = getFieldValueFromMessage(message, 'phone'); @@ -196,7 +196,7 @@ const createOrUpdateDOIContactResponseBuilder = async (message, destination) => } const { apiKey } = destination.Config; - const contactExists = await checkIfContactExists(identifier, apiKey); + const contactExists = await checkIfContactExists(identifier, apiKey, metadata); if (contactExists) { return updateDOIContactResponseBuilder(message, destination, identifier); @@ -205,7 +205,7 @@ const createOrUpdateDOIContactResponseBuilder = async (message, destination) => return createDOIContactResponseBuilder(message, destination); }; -const identifyResponseBuilder = async (message, destination) => { +const identifyResponseBuilder = async ({ message, destination, metadata }) => { const { doi } = destination.Config; if (!doi) { const unlinkListIds = getListIds(message, 'sendinblueUnlinkListIds'); @@ -215,7 +215,7 @@ const identifyResponseBuilder = async (message, destination) => { return createOrUpdateContactResponseBuilder(message, destination); } - return createOrUpdateDOIContactResponseBuilder(message, destination); + return createOrUpdateDOIContactResponseBuilder({ message, destination, metadata }); }; // ref:- https://tracker-doc.sendinblue.com/reference/trackevent-3 @@ -305,7 +305,8 @@ const pageResponseBuilder = (message, destination) => { return responseBuilder(payload, endpoint, destination, true); }; -const processEvent = async (message, destination) => { +const processEvent = async (event) => { + const { message, destination } = event; if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -314,7 +315,7 @@ const processEvent = async (message, destination) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(event); break; case EventType.TRACK: response = trackResponseBuilder(message, destination); @@ -328,7 +329,7 @@ const processEvent = async (message, destination) => { return response; }; -const process = (event) => processEvent(event.message, event.destination); +const process = (event) => processEvent(event); const processRouterDest = async (inputs) => { const respList = await simpleProcessRouterDest(inputs, process, process); diff --git a/src/v0/destinations/sendinblue/util.js b/src/v0/destinations/sendinblue/util.js index e4862ccc39..3af35cd7b9 100644 --- a/src/v0/destinations/sendinblue/util.js +++ b/src/v0/destinations/sendinblue/util.js @@ -52,7 +52,7 @@ const validateEmailAndPhone = (email, phone = null) => { */ const prepareEmailFromPhone = (phone) => `${phone.replace('+', '')}${EMAIL_SUFFIX}`; -const checkIfContactExists = async (identifier, apiKey) => { +const checkIfContactExists = async (identifier, apiKey, metadata) => { const endpoint = getContactDetailsEndpoint(identifier); const requestOptions = { headers: prepareHeader(apiKey), @@ -63,6 +63,7 @@ const checkIfContactExists = async (identifier, apiKey) => { endpointPath: '/contacts', requestMethod: 'GET', module: 'router', + metadata, }); const processedContactDetailsResponse = processAxiosResponse(contactDetailsResponse); diff --git a/src/v0/destinations/sfmc/transform.js b/src/v0/destinations/sfmc/transform.js index bf474ff3f0..a433179f9c 100644 --- a/src/v0/destinations/sfmc/transform.js +++ b/src/v0/destinations/sfmc/transform.js @@ -31,7 +31,7 @@ const CONTACT_KEY_KEY = 'Contact Key'; // DOC: https://developer.salesforce.com/docs/atlas.en-us.mc-app-development.meta/mc-app-development/access-token-s2s.htm -const getToken = async (clientId, clientSecret, subdomain) => { +const getToken = async (clientId, clientSecret, subdomain, metadata) => { const { processedResponse: processedResponseSfmc } = await handleHttpRequest( 'post', `https://${subdomain}.${ENDPOINTS.GET_TOKEN}`, @@ -49,6 +49,7 @@ const getToken = async (clientId, clientSecret, subdomain) => { endpointPath: '/token', requestMethod: 'POST', module: 'router', + metadata, }, ); @@ -194,7 +195,7 @@ const responseBuilderForMessageEvent = (message, subDomain, authToken, hashMapEv return response; }; -const responseBuilderSimple = async (message, category, destination) => { +const responseBuilderSimple = async ({ message, destination, metadata }, category) => { const { clientId, clientSecret, @@ -213,7 +214,7 @@ const responseBuilderSimple = async (message, category, destination) => { // map from an event name to uuid as true or false to determine to send uuid as primary key or not. const hashMapUUID = getHashFromArray(eventToUUID, 'event', 'uuid'); // token needed for authorization for subsequent calls - const authToken = await getToken(clientId, clientSecret, subDomain); + const authToken = await getToken(clientId, clientSecret, subDomain, metadata); // map from an event name to an event definition key. const hashMapEventDefinition = getHashFromArray(eventToDefinitionMapping, 'from', 'to'); // if createOrUpdateContacts is true identify calls for create and update of contacts will not occur. @@ -270,7 +271,7 @@ const responseBuilderSimple = async (message, category, destination) => { throw new ConfigurationError(`Event type '${category.type}' not supported`); }; -const processEvent = async (message, destination) => { +const processEvent = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -290,12 +291,12 @@ const processEvent = async (message, destination) => { } // build the response - const response = await responseBuilderSimple(message, category, destination); + const response = await responseBuilderSimple({ message, destination, metadata }, category); return response; }; const process = async (event) => { - const response = await processEvent(event.message, event.destination); + const response = await processEvent(event); return response; }; diff --git a/src/v0/destinations/sfmc/transform.test.js b/src/v0/destinations/sfmc/transform.test.js index 8d382ef649..e182fb0d78 100644 --- a/src/v0/destinations/sfmc/transform.test.js +++ b/src/v0/destinations/sfmc/transform.test.js @@ -33,7 +33,7 @@ describe('responseBuilderSimple', () => { name: 'Identify', }; - const response = await responseBuilderSimple(message, category, destination); + const response = await responseBuilderSimple({ message, destination }, category); expect(response).toHaveLength(2); expect(response[0]).toHaveProperty('endpoint'); @@ -58,7 +58,7 @@ describe('responseBuilderSimple', () => { }; try { - await responseBuilderSimple(message, category, destination); + await responseBuilderSimple({ message, destination }, category); } catch (e) { expect(e).toBeInstanceOf(ConfigurationError); expect(e.message).toBe('Event name is required for track events'); @@ -77,7 +77,7 @@ describe('responseBuilderSimple', () => { name: 'Track', }; try { - await responseBuilderSimple(message, category, destination); + await responseBuilderSimple({ message, destination }, category); } catch (e) { expect(e).toBeInstanceOf(ConfigurationError); expect(e.message).toBe('Event not mapped for this track call'); @@ -96,7 +96,7 @@ describe('responseBuilderSimple', () => { }; try { - await responseBuilderSimple(message, category, destination); + await responseBuilderSimple({ message, destination }, category); } catch (e) { expect(e).toBeInstanceOf(ConfigurationError); expect(e.message).toBe("Event type 'unsupported' not supported"); @@ -116,7 +116,7 @@ describe('responseBuilderSimple', () => { name: 'Track', }; - const response = await responseBuilderSimple(message, category, destination); + const response = await responseBuilderSimple({ message, destination }, category); expect(response).toHaveProperty('endpoint'); expect(response).toHaveProperty('method'); expect(response).toHaveProperty('body.JSON'); diff --git a/src/v0/destinations/snapchat_custom_audience/networkHandler.js b/src/v0/destinations/snapchat_custom_audience/networkHandler.js index 6044216293..da2a021345 100644 --- a/src/v0/destinations/snapchat_custom_audience/networkHandler.js +++ b/src/v0/destinations/snapchat_custom_audience/networkHandler.js @@ -31,6 +31,7 @@ const prepareProxyReq = (request) => { }; const scAudienceProxyRequest = async (request) => { + const { metadata } = request; const { endpoint, data, method, params, headers } = prepareProxyReq(request); const requestOptions = { @@ -46,6 +47,7 @@ const scAudienceProxyRequest = async (request) => { endpointPath: '/segments/segmentId/users', requestMethod: requestOptions?.method, module: 'dataDelivery', + metadata, }); return response; }; diff --git a/src/v0/destinations/the_trade_desk/networkHandler.js b/src/v0/destinations/the_trade_desk/networkHandler.js index aebbfc0785..d04b5216b0 100644 --- a/src/v0/destinations/the_trade_desk/networkHandler.js +++ b/src/v0/destinations/the_trade_desk/networkHandler.js @@ -10,6 +10,7 @@ const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); const proxyRequest = async (request) => { + const { metadata } = request; const { endpoint, data, method, params, headers, config } = prepareProxyRequest(request); if (!config?.advertiserSecretKey) { @@ -43,6 +44,7 @@ const proxyRequest = async (request) => { endpointPath: '/track/realtimeconversion', requestMethod: 'POST', module: 'dataDelivery', + metadata, }); return response; }; diff --git a/src/v0/destinations/user/transform.js b/src/v0/destinations/user/transform.js index ed04f5ccd4..24baadd200 100644 --- a/src/v0/destinations/user/transform.js +++ b/src/v0/destinations/user/transform.js @@ -43,23 +43,24 @@ const responseBuilder = async (payload, endpoint, method, apiKey) => { throw new TransformationError('Something went wrong while constructing the payload'); }; -const identifyResponseBuilder = async (message, destination) => { +const identifyResponseBuilder = async (event) => { + const { destination } = event; let builder; - const user = await retrieveUserFromLookup(message, destination); + const user = await retrieveUserFromLookup(event); const { Config } = destination; const { apiKey } = Config; // If user already exist we will update it else creates a new user if (!user) { - builder = createOrUpdateUserPayloadBuilder(message, destination); + builder = createOrUpdateUserPayloadBuilder(event); } else { const { id } = user; - builder = createOrUpdateUserPayloadBuilder(message, destination, id); + builder = createOrUpdateUserPayloadBuilder(event, id); } const { payload, endpoint, method } = builder; return responseBuilder(payload, endpoint, method, apiKey); }; -const trackResponseBuilder = async (message, destination) => { +const trackResponseBuilder = async ({ message, destination, metadata }) => { if (!message.event) { throw new InstrumentationError('Parameter event is required'); } @@ -68,7 +69,7 @@ const trackResponseBuilder = async (message, destination) => { let endpoint; let method; let builder; - const user = await retrieveUserFromLookup(message, destination); + const user = await retrieveUserFromLookup({ message, destination, metadata }); const { Config } = destination; const { apiKey, appSubdomain } = Config; if (user) { @@ -85,12 +86,12 @@ const trackResponseBuilder = async (message, destination) => { ); }; -const pageResponseBuilder = async (message, destination) => { +const pageResponseBuilder = async ({ message, destination, metadata }) => { let payload; let endpoint; let method; let builder; - const user = await retrieveUserFromLookup(message, destination); + const user = await retrieveUserFromLookup({ message, destination, metadata }); const { Config } = destination; const { apiKey, appSubdomain } = Config; if (user) { @@ -106,14 +107,14 @@ const pageResponseBuilder = async (message, destination) => { ); }; -const groupResponseBuilder = async (message, destination) => { +const groupResponseBuilder = async ({ message, destination, metadata }) => { validateGroupPayload(message); let payload; let endpoint; let method; let builder; - const user = await getUserByCustomId(message, destination); + const user = await getUserByCustomId(message, destination, metadata); const { Config } = destination; const { apiKey, appSubdomain } = Config; /* @@ -121,11 +122,11 @@ const groupResponseBuilder = async (message, destination) => { * user does not exist -> throw an error */ if (user) { - let company = await getCompanyByCustomId(message, destination); + let company = await getCompanyByCustomId(message, destination, metadata); if (!company) { - company = await createCompany(message, destination); + company = await createCompany(message, destination, metadata); } else { - company = await updateCompany(message, destination, company); + company = await updateCompany(message, destination, company, metadata); } builder = addUserToCompanyPayloadBuilder(user, company); payload = builder.payload; @@ -137,7 +138,8 @@ const groupResponseBuilder = async (message, destination) => { throw new NetworkInstrumentationError('No user found with given userId'); }; -const processEvent = async (message, destination) => { +const processEvent = async (event) => { + const { message } = event; // Validating if message type is even given or not if (!message.type) { throw new InstrumentationError('Event type is required'); @@ -146,16 +148,16 @@ const processEvent = async (message, destination) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(event); break; case EventType.GROUP: - response = await groupResponseBuilder(message, destination); + response = await groupResponseBuilder(event); break; case EventType.TRACK: - response = await trackResponseBuilder(message, destination); + response = await trackResponseBuilder(event); break; case EventType.PAGE: - response = await pageResponseBuilder(message, destination); + response = await pageResponseBuilder(event); break; default: throw new InstrumentationError(`Event type ${messageType} is not supported`); @@ -163,7 +165,7 @@ const processEvent = async (message, destination) => { return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/user/utils.js b/src/v0/destinations/user/utils.js index f332d7a4a7..f469d123d8 100644 --- a/src/v0/destinations/user/utils.js +++ b/src/v0/destinations/user/utils.js @@ -211,7 +211,7 @@ const validateGroupPayload = (message) => { * @param {*} destination * @returns */ -const createCompany = async (message, destination) => { +const createCompany = async (message, destination, metadata) => { const commonCompanyPropertiesPayload = constructPayload( message, MAPPING_CONFIG[CONFIG_CATEGORIES.CREATE_COMPANY.name], @@ -240,6 +240,7 @@ const createCompany = async (message, destination) => { endpointPath: `/companies/`, requestMethod: 'POST', module: 'router', + metadata, }); const data = processAxiosResponse(response); return data.response; @@ -253,7 +254,7 @@ const createCompany = async (message, destination) => { * @param {*} company * @returns */ -const updateCompany = async (message, destination, company) => { +const updateCompany = async (message, destination, company, metadata) => { const commonCompanyPropertiesPayload = constructPayload( message, MAPPING_CONFIG[CONFIG_CATEGORIES.UPDATE_COMPANY.name], @@ -283,6 +284,7 @@ const updateCompany = async (message, destination, company) => { endpointPath: `/companies/`, requestMethod: 'PUT', module: 'router', + metadata, }); const data = processAxiosResponse(response); return data.response; @@ -296,7 +298,7 @@ const updateCompany = async (message, destination, company) => { * @param {*} appSubdomain * @returns */ -const getUserByUserKey = async (apiKey, userKey, appSubdomain) => { +const getUserByUserKey = async (apiKey, userKey, appSubdomain, metadata) => { const endpoint = prepareUrl(`${BASE_ENDPOINT}/users/search/?key=${userKey}`, appSubdomain); const requestOptions = { headers: { @@ -312,6 +314,7 @@ const getUserByUserKey = async (apiKey, userKey, appSubdomain) => { endpointPath: `/users/search`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(userResponse); if (processedUserResponse.status === 200) { @@ -328,7 +331,7 @@ const getUserByUserKey = async (apiKey, userKey, appSubdomain) => { * @param {*} appSubdomain * @returns */ -const getUserByEmail = async (apiKey, email, appSubdomain) => { +const getUserByEmail = async (apiKey, email, appSubdomain, metadata) => { if (!email) { throw new InstrumentationError('Lookup field : email value is not present'); } @@ -348,6 +351,7 @@ const getUserByEmail = async (apiKey, email, appSubdomain) => { endpointPath: `/users/search/?email`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(userResponse); @@ -366,7 +370,7 @@ const getUserByEmail = async (apiKey, email, appSubdomain) => { * @param {*} appSubdomain * @returns */ -const getUserByPhoneNumber = async (apiKey, phoneNumber, appSubdomain) => { +const getUserByPhoneNumber = async (apiKey, phoneNumber, appSubdomain, metadata) => { if (!phoneNumber) { throw new InstrumentationError('Lookup field : phone value is not present'); } @@ -389,6 +393,7 @@ const getUserByPhoneNumber = async (apiKey, phoneNumber, appSubdomain) => { endpointPath: `/users/search/?phone_number`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(userResponse); @@ -415,7 +420,7 @@ const getUserByPhoneNumber = async (apiKey, phoneNumber, appSubdomain) => { * @param {*} destination * @returns */ -const getUserByCustomId = async (message, destination) => { +const getUserByCustomId = async (message, destination, metadata) => { const { Config } = destination; const { appSubdomain, apiKey } = Config; const userCustomId = getFieldValueFromMessage(message, 'userId'); @@ -436,6 +441,7 @@ const getUserByCustomId = async (message, destination) => { endpointPath: `/users-by-id/`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(userResponse); @@ -453,7 +459,7 @@ const getUserByCustomId = async (message, destination) => { * @param {*} destination * @returns */ -const getCompanyByCustomId = async (message, destination) => { +const getCompanyByCustomId = async (message, destination, metadata) => { const { Config } = destination; const { appSubdomain, apiKey } = Config; const companyCustomId = getFieldValueFromMessage(message, 'groupId'); @@ -474,6 +480,7 @@ const getCompanyByCustomId = async (message, destination) => { endpointPath: `/companies-by-id/`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(response); if (processedUserResponse.status === 200) { @@ -490,12 +497,12 @@ const getCompanyByCustomId = async (message, destination) => { * @param {*} destination * @returns */ -const retrieveUserFromLookup = async (message, destination) => { +const retrieveUserFromLookup = async ({ message, destination, metadata }) => { const { Config } = destination; const { appSubdomain, apiKey } = Config; const userKey = getDestinationExternalID(message, 'userKey'); if (isDefinedAndNotNullAndNotEmpty(userKey)) { - return getUserByUserKey(apiKey, userKey, appSubdomain); + return getUserByUserKey(apiKey, userKey, appSubdomain, metadata); } const integrationsObj = getIntegrationsObj(message, 'user'); @@ -504,11 +511,11 @@ const retrieveUserFromLookup = async (message, destination) => { const lookupFieldValue = getFieldValueFromMessage(message, lookupField); if (lookupField === 'email') { - return getUserByEmail(apiKey, lookupFieldValue, appSubdomain); + return getUserByEmail(apiKey, lookupFieldValue, appSubdomain, metadata); } if (lookupField === 'phone') { - return getUserByPhoneNumber(apiKey, lookupFieldValue, appSubdomain); + return getUserByPhoneNumber(apiKey, lookupFieldValue, appSubdomain, metadata); } throw new InstrumentationError( @@ -517,11 +524,11 @@ const retrieveUserFromLookup = async (message, destination) => { } else { const userId = getValueFromMessage(message, 'userId'); if (userId) { - return getUserByCustomId(message, destination); + return getUserByCustomId(message, destination, metadata); } const email = getFieldValueFromMessage(message, 'email'); if (isDefinedAndNotNullAndNotEmpty(email)) { - return getUserByEmail(apiKey, email, appSubdomain); + return getUserByEmail(apiKey, email, appSubdomain, metadata); } throw new InstrumentationError('Default lookup field : email value is empty'); @@ -535,7 +542,7 @@ const retrieveUserFromLookup = async (message, destination) => { * @param {*} id * @returns */ -const createOrUpdateUserPayloadBuilder = (message, destination, id = null) => { +const createOrUpdateUserPayloadBuilder = ({ message, destination }, id = null) => { const { appSubdomain } = destination.Config; const commonUserPropertiesPayload = constructPayload( message, diff --git a/src/v0/destinations/wootric/transform.js b/src/v0/destinations/wootric/transform.js index f8b4274af7..940d6e9e5d 100644 --- a/src/v0/destinations/wootric/transform.js +++ b/src/v0/destinations/wootric/transform.js @@ -37,17 +37,17 @@ const responseBuilder = async (payload, endpoint, method, accessToken) => { throw new TransformationError('Something went wrong while constructing the payload'); }; -const identifyResponseBuilder = async (message, destination) => { +const identifyResponseBuilder = async ({ message, destination, metadata }) => { let payload; let endpoint; let method; let builder; - const accessToken = await getAccessToken(destination); + const accessToken = await getAccessToken(destination, metadata); const rawEndUserId = getDestinationExternalID(message, 'wootricEndUserId'); const userId = getFieldValueFromMessage(message, 'userIdOnly'); - const userDetails = await retrieveUserDetails(rawEndUserId, userId, accessToken); + const userDetails = await retrieveUserDetails(rawEndUserId, userId, accessToken, metadata); const wootricEndUserId = userDetails?.id; // If user already exist we will update it else creates a new user @@ -132,7 +132,7 @@ const trackResponseBuilder = async (message, destination) => { return responseBuilder(payload, endpoint, method, accessToken); }; -const processEvent = async (message, destination) => { +const processEvent = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -140,7 +140,7 @@ const processEvent = async (message, destination) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder({ message, destination, metadata }); break; case EventType.TRACK: response = await trackResponseBuilder(message, destination); @@ -151,7 +151,7 @@ const processEvent = async (message, destination) => { return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/wootric/util.js b/src/v0/destinations/wootric/util.js index c2505c635b..398fe94c7d 100644 --- a/src/v0/destinations/wootric/util.js +++ b/src/v0/destinations/wootric/util.js @@ -20,7 +20,7 @@ const ACCESS_TOKEN_CACHE = new Cache(ACCESS_TOKEN_CACHE_TTL_SECONDS); * @param {*} destination * @returns */ -const getAccessToken = async (destination) => { +const getAccessToken = async (destination, metadata) => { const { username, password, accountToken } = destination.Config; const accessTokenKey = destination.ID; @@ -49,6 +49,7 @@ const getAccessToken = async (destination) => { endpointPath: `/oauth/token`, requestMethod: 'POST', module: 'router', + metadata, }); const processedAuthResponse = processAxiosResponse(wootricAuthResponse); // If the request fails, throwing error. @@ -79,7 +80,7 @@ const getAccessToken = async (destination) => { * @returns */ -const retrieveUserDetails = async (endUserId, externalId, accessToken) => { +const retrieveUserDetails = async (endUserId, externalId, accessToken, metadata) => { let endpoint; if (isDefinedAndNotNullAndNotEmpty(endUserId)) { endpoint = `${BASE_ENDPOINT}/${VERSION}/end_users/${endUserId}`; @@ -104,6 +105,7 @@ const retrieveUserDetails = async (endUserId, externalId, accessToken) => { endpointPath: `/v1/end_users/`, requestMethod: 'GET', module: 'router', + metadata, }); const processedUserResponse = processAxiosResponse(userResponse); diff --git a/src/v0/destinations/yahoo_dsp/transform.js b/src/v0/destinations/yahoo_dsp/transform.js index 4cd1eee73d..f11f1629a8 100644 --- a/src/v0/destinations/yahoo_dsp/transform.js +++ b/src/v0/destinations/yahoo_dsp/transform.js @@ -21,7 +21,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); * @param {*} destination * @returns */ -const responseBuilder = async (message, destination) => { +const responseBuilder = async (message, destination, metadata) => { let dspListPayload = {}; const { Config } = destination; const { listData } = message.properties; @@ -72,7 +72,7 @@ const responseBuilder = async (message, destination) => { response.endpoint = `${BASE_ENDPOINT}/traffic/audiences/${ENDPOINTS[audienceType]}/${audienceId}`; response.body.JSON = removeUndefinedAndNullValues(dspListPayload); response.method = defaultPutRequestConfig.requestMethod; - const accessToken = await getAccessToken(destination); + const accessToken = await getAccessToken(destination, metadata); response.headers = { 'X-Auth-Token': accessToken, 'X-Auth-Method': 'OAuth2', @@ -81,7 +81,7 @@ const responseBuilder = async (message, destination) => { return response; }; -const processEvent = async (message, destination) => { +const processEvent = async ({ message, destination, metadata }) => { let response; if (!message.type) { throw new InstrumentationError('Event type is required'); @@ -93,14 +93,14 @@ const processEvent = async (message, destination) => { throw new InstrumentationError('listData is not present inside properties. Aborting message'); } if (message.type.toLowerCase() === 'audiencelist') { - response = await responseBuilder(message, destination); + response = await responseBuilder(message, destination, metadata); } else { throw new InstrumentationError(`Event type ${message.type} is not supported`, 400); } return response; }; -const process = async (event) => processEvent(event.message, event.destination); +const process = async (event) => processEvent(event); const processRouterDest = async (inputs, reqMetadata) => { const respList = await simpleProcessRouterDest(inputs, process, reqMetadata); diff --git a/src/v0/destinations/yahoo_dsp/util.js b/src/v0/destinations/yahoo_dsp/util.js index 54002a3bce..ba19ac7725 100644 --- a/src/v0/destinations/yahoo_dsp/util.js +++ b/src/v0/destinations/yahoo_dsp/util.js @@ -95,7 +95,7 @@ const createPayload = (audienceList, Config) => { * @param {*} destination * @returns */ -const getAccessToken = async (destination) => { +const getAccessToken = async (destination, metadata) => { const { clientId, clientSecret } = destination.Config; const accessTokenKey = destination.ID; @@ -140,6 +140,7 @@ const getAccessToken = async (destination) => { endpointPath: '/identity/oauth2/access_token', requestMethod: 'POST', module: 'router', + metadata, }); // If the request fails, throwing error. if (dspAuthorisationData.success === false) { diff --git a/src/v0/destinations/zendesk/transform.js b/src/v0/destinations/zendesk/transform.js index cadb1d3964..792e8df350 100644 --- a/src/v0/destinations/zendesk/transform.js +++ b/src/v0/destinations/zendesk/transform.js @@ -95,7 +95,13 @@ const responseBuilderToUpdatePrimaryAccount = ( * @param {*} headers -> Authorizations for API's call * @returns it return payloadbuilder for updating email */ -const payloadBuilderforUpdatingEmail = async (userId, headers, userEmail, baseEndpoint) => { +const payloadBuilderforUpdatingEmail = async ( + userId, + headers, + userEmail, + baseEndpoint, + metadata, +) => { // url for list all identities of user const url = `${baseEndpoint}users/${userId}/identities`; const config = { headers }; @@ -106,6 +112,7 @@ const payloadBuilderforUpdatingEmail = async (userId, headers, userEmail, baseEn endpointPath: 'users/userId/identities', requestMethod: 'POST', module: 'router', + metadata, }); if (res?.response?.data?.count > 0) { const { identities } = res.response.data; @@ -131,7 +138,7 @@ const payloadBuilderforUpdatingEmail = async (userId, headers, userEmail, baseEn return {}; }; -async function createUserFields(url, config, newFields, fieldJson) { +async function createUserFields(url, config, newFields, fieldJson, metadata) { let fieldData; // removing trailing 's' from fieldJson const fieldJsonSliced = fieldJson.slice(0, -1); @@ -154,6 +161,7 @@ async function createUserFields(url, config, newFields, fieldJson) { endpointPath: '/users/userId/identities', requestMethod: 'POST', module: 'router', + metadata, }); if (response.status !== 201) { logger.debug(`${NAME}:: Failed to create User Field : `, field); @@ -173,6 +181,7 @@ async function checkAndCreateUserFields( fieldJson, headers, baseEndpoint, + metadata, ) { let newFields = []; @@ -185,6 +194,7 @@ async function checkAndCreateUserFields( feature: 'transformation', requestMethod: 'POST', module: 'router', + metadata, }); const fields = get(response.data, fieldJson); if (response.data && fields) { @@ -199,7 +209,7 @@ async function checkAndCreateUserFields( ); if (newFields.length > 0) { - await createUserFields(url, config, newFields, fieldJson); + await createUserFields(url, config, newFields, fieldJson, metadata); } } } catch (error) { @@ -249,7 +259,7 @@ function getIdentifyPayload(message, category, destinationConfig, type) { * @param {*} headers headers for authorizations * @returns */ -const getUserIdByExternalId = async (message, headers, baseEndpoint) => { +const getUserIdByExternalId = async (message, headers, baseEndpoint, metadata) => { const externalId = getFieldValueFromMessage(message, 'userIdOnly'); if (!externalId) { logger.debug(`${NAME}:: externalId is required for getting zenuserId`); @@ -265,6 +275,7 @@ const getUserIdByExternalId = async (message, headers, baseEndpoint) => { endpointPath, requestMethod: 'GET', module: 'router', + metadata, }); if (resp?.response?.data?.count > 0) { @@ -278,7 +289,7 @@ const getUserIdByExternalId = async (message, headers, baseEndpoint) => { return undefined; }; -async function getUserId(message, headers, baseEndpoint, type) { +async function getUserId(message, headers, baseEndpoint, type, metadata) { const traits = type === 'group' ? get(message, CONTEXT_TRAITS_KEY_PATH) @@ -298,6 +309,7 @@ async function getUserId(message, headers, baseEndpoint, type) { endpointPath, requestMethod: 'GET', module: 'router', + metadata, }); if (!resp || !resp.data || resp.data.count === 0) { logger.debug(`${NAME}:: User not found`); @@ -315,7 +327,7 @@ async function getUserId(message, headers, baseEndpoint, type) { } } -async function isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint) { +async function isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint, metadata) { const url = `${baseEndpoint}/users/${userId}/organization_memberships.json`; const config = { headers }; try { @@ -325,6 +337,7 @@ async function isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint) { endpointPath: '/users/userId/organization_memberships.json', requestMethod: 'GET', module: 'router', + metadata, }); if (response?.data?.organization_memberships?.[0]?.organization_id === orgId) { return true; @@ -336,7 +349,7 @@ async function isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint) { return false; } -async function createUser(message, headers, destinationConfig, baseEndpoint, type) { +async function createUser(message, headers, destinationConfig, baseEndpoint, type, metadata) { const traits = type === 'group' ? get(message, CONTEXT_TRAITS_KEY_PATH) @@ -360,6 +373,7 @@ async function createUser(message, headers, destinationConfig, baseEndpoint, typ endpointPath: '/users/create_or_update.json', requestMethod: 'POST', module: 'router', + metadata, }); if (!resp.data || !resp.data.user || !resp.data.user.id) { @@ -377,9 +391,16 @@ async function createUser(message, headers, destinationConfig, baseEndpoint, typ } } -async function getUserMembershipPayload(message, headers, orgId, destinationConfig, baseEndpoint) { +async function getUserMembershipPayload( + message, + headers, + orgId, + destinationConfig, + baseEndpoint, + metadata, +) { // let zendeskUserID = await getUserId(message.userId, headers); - let zendeskUserID = await getUserId(message, headers, baseEndpoint, 'group'); + let zendeskUserID = await getUserId(message, headers, baseEndpoint, 'group', metadata); const traits = get(message, CONTEXT_TRAITS_KEY_PATH); if (!zendeskUserID) { if (traits && traits.name && traits.email) { @@ -389,6 +410,7 @@ async function getUserMembershipPayload(message, headers, orgId, destinationConf destinationConfig, baseEndpoint, 'group', + metadata, ); zendeskUserID = zendeskUserId; } else { @@ -405,7 +427,14 @@ async function getUserMembershipPayload(message, headers, orgId, destinationConf return payload; } -async function createOrganization(message, category, headers, destinationConfig, baseEndpoint) { +async function createOrganization( + message, + category, + headers, + destinationConfig, + baseEndpoint, + metadata, +) { if (!isDefinedAndNotNull(message.traits)) { throw new InstrumentationError('Organisation Traits are missing. Aborting.'); } @@ -415,6 +444,7 @@ async function createOrganization(message, category, headers, destinationConfig, category.organizationFieldsJson, headers, baseEndpoint, + metadata, ); const mappingJson = mappingConfig[category.name]; const payload = constructPayload(message, mappingJson); @@ -447,6 +477,7 @@ async function createOrganization(message, category, headers, destinationConfig, endpointPath: '/organizations/create_or_update.json', requestMethod: 'POST', module: 'router', + metadata, }); if (!resp.data || !resp.data.organization) { @@ -468,7 +499,7 @@ function validateUserId(message) { } } -async function processIdentify(message, destinationConfig, headers, baseEndpoint) { +async function processIdentify(message, destinationConfig, headers, baseEndpoint, metadata) { validateUserId(message); const category = ConfigCategory.IDENTIFY; const traits = getFieldValueFromMessage(message, 'traits'); @@ -480,6 +511,7 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint category.userFieldsJson, headers, baseEndpoint, + metadata, ); const payload = getIdentifyPayload(message, category, destinationConfig, 'identify'); @@ -487,7 +519,12 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint const returnList = []; if (destinationConfig.searchByExternalId) { - const userIdByExternalId = await getUserIdByExternalId(message, headers, baseEndpoint); + const userIdByExternalId = await getUserIdByExternalId( + message, + headers, + baseEndpoint, + metadata, + ); const userEmail = traits?.email; if (userIdByExternalId && userEmail) { const payloadForUpdatingEmail = await payloadBuilderforUpdatingEmail( @@ -495,6 +532,7 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint headers, userEmail, baseEndpoint, + metadata, ); if (!isEmptyObject(payloadForUpdatingEmail)) returnList.push(payloadForUpdatingEmail); } @@ -507,7 +545,7 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint traits.company.id ) { const orgId = traits.company.id; - const userId = await getUserId(message, headers, baseEndpoint); + const userId = await getUserId(message, headers, baseEndpoint, metadata); if (userId) { const membershipUrl = `${baseEndpoint}users/${userId}/organization_memberships.json`; try { @@ -518,6 +556,7 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint endpointPath: '/users/userId/organization_memberships.json', requestMethod: 'GET', module: 'router', + metadata, }); if ( response.data && @@ -547,7 +586,7 @@ async function processIdentify(message, destinationConfig, headers, baseEndpoint return returnList; } -async function processTrack(message, destinationConfig, headers, baseEndpoint) { +async function processTrack(message, destinationConfig, headers, baseEndpoint, metadata) { validateUserId(message); const traits = getFieldValueFromMessage(message, 'traits'); let userEmail; @@ -568,6 +607,7 @@ async function processTrack(message, destinationConfig, headers, baseEndpoint) { endpointPath, requestMethod: 'GET', module: 'router', + metadata, }); if (!get(userResponse, 'data.users.0.id') || userResponse.data.count === 0) { const { zendeskUserId, email } = await createUser( @@ -575,6 +615,7 @@ async function processTrack(message, destinationConfig, headers, baseEndpoint) { headers, destinationConfig, baseEndpoint, + metadata, ); if (!zendeskUserId) { throw new NetworkInstrumentationError('User not found'); @@ -618,13 +659,20 @@ async function processTrack(message, destinationConfig, headers, baseEndpoint) { return response; } -async function processGroup(message, destinationConfig, headers, baseEndpoint) { +async function processGroup(message, destinationConfig, headers, baseEndpoint, metadata) { const category = ConfigCategory.GROUP; let payload; let url; if (destinationConfig.sendGroupCallsWithoutUserId && !message.userId) { - payload = await createOrganization(message, category, headers, destinationConfig, baseEndpoint); + payload = await createOrganization( + message, + category, + headers, + destinationConfig, + baseEndpoint, + metadata, + ); url = baseEndpoint + category.createEndpoint; } else { validateUserId(message); @@ -634,6 +682,7 @@ async function processGroup(message, destinationConfig, headers, baseEndpoint) { headers, destinationConfig, baseEndpoint, + metadata, ); if (!orgId) { throw new NetworkInstrumentationError( @@ -648,11 +697,12 @@ async function processGroup(message, destinationConfig, headers, baseEndpoint) { orgId, destinationConfig, baseEndpoint, + metadata, ); url = baseEndpoint + category.userMembershipEndpoint; const userId = payload.organization_membership.user_id; - if (await isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint)) { + if (await isUserAlreadyAssociated(userId, orgId, headers, baseEndpoint, metadata)) { throw new InstrumentationError('User is already associated with organization'); } } @@ -678,15 +728,15 @@ async function processSingleMessage(event) { 'Content-Type': JSON_MIME_TYPE, }; - const { message } = event; + const { message, metadata } = event; const evType = getEventType(message); switch (evType) { case EventType.IDENTIFY: - return processIdentify(message, destinationConfig, headers, baseEndpoint); + return processIdentify(message, destinationConfig, headers, baseEndpoint, metadata); case EventType.GROUP: - return processGroup(message, destinationConfig, headers, baseEndpoint); + return processGroup(message, destinationConfig, headers, baseEndpoint, metadata); case EventType.TRACK: - return processTrack(message, destinationConfig, headers, baseEndpoint); + return processTrack(message, destinationConfig, headers, baseEndpoint, metadata); default: throw new InstrumentationError(`Event type ${evType} is not supported`); } diff --git a/src/v0/util/index.js b/src/v0/util/index.js index dc06bcc43a..fa6cc34b70 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -2270,6 +2270,22 @@ const validateEventAndLowerCaseConversion = (event, isMandatory, convertToLowerC const applyCustomMappings = (message, mappings) => JsonTemplateEngine.createAsSync(mappings, { defaultPathType: PathType.JSON }).evaluate(message); +/** + * Gets url path omitting the hostname & protocol + * + * **Note**: + * - This should only be used when there are no dynamic paths in URL + * @param {*} inputUrl + * @returns + */ +const getRelativePathFromURL = (inputUrl) => { + if (isValidUrl(inputUrl)) { + const url = new URL(inputUrl); + return url.pathname; + } + return inputUrl; +}; + // ======================================================================== // EXPORTS // ======================================================================== @@ -2390,5 +2406,6 @@ module.exports = { removeDuplicateMetadata, combineBatchRequestsWithSameJobIds, validateEventAndLowerCaseConversion, + getRelativePathFromURL, removeEmptyKey, }; diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js index c34d513325..31ea490b25 100644 --- a/src/v0/util/index.test.js +++ b/src/v0/util/index.test.js @@ -690,3 +690,24 @@ describe('extractCustomFields', () => { }); }); }); + +describe('get relative path from url', () => { + test('valid url', () => { + expect(utilities.getRelativePathFromURL('https://google.com/a/b/c')).toEqual('/a/b/c'); + }); + test('valid url with query parameters', () => { + expect(utilities.getRelativePathFromURL('https://google.com/a/b/c?q=1&n=2')).toEqual('/a/b/c'); + }); + test('normal string', () => { + expect(utilities.getRelativePathFromURL('s=1&n=2')).toEqual('s=1&n=2'); + }); + test('undefined', () => { + expect(utilities.getRelativePathFromURL(undefined)).toEqual(undefined); + }); + test('number', () => { + expect(utilities.getRelativePathFromURL(1)).toEqual(1); + }); + test('null', () => { + expect(utilities.getRelativePathFromURL(null)).toEqual(null); + }); +}); From b7860a5b2b87fb61aaff8c68a904ac996d63efd3 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Wed, 24 Jul 2024 12:36:46 +0530 Subject: [PATCH 087/201] fix: add validation for cordial destination (#3599) * fix: add validation for cordial destination * chore: fix linting --- .../v2/destinations/cordial/procWorkflow.yaml | 15 +++++-- .../cordial/processor/validation.ts | 43 ++++++++++++++++++- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/cdk/v2/destinations/cordial/procWorkflow.yaml b/src/cdk/v2/destinations/cordial/procWorkflow.yaml index 2c765afeb5..641cf28b06 100644 --- a/src/cdk/v2/destinations/cordial/procWorkflow.yaml +++ b/src/cdk/v2/destinations/cordial/procWorkflow.yaml @@ -35,13 +35,16 @@ steps: template: | $.context.messageType = .message.type.toLowerCase(); - - name: validateInput + - name: validateConfig + template: | + $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting"); + $.assertConfig(.destination.Config.apiBaseUrl, "API Base URl is not present. Aborting"); + + - name: validateMessageType template: | let messageType = $.context.messageType; $.assert(messageType, "message Type is not present. Aborting"); $.assert(messageType in {{$.EventType.([.TRACK, .IDENTIFY])}}, "message type " + messageType + " is not supported"); - $.assertConfig(.destination.Config.apiKey, "API Key is not present. Aborting"); - $.assertConfig(.destination.Config.apiBaseUrl, "API Base URl is not present. Aborting"); - name: getContactId template: | @@ -49,7 +52,11 @@ steps: - name: getContactEmail template: | - .message.().({{{{$.getGenericPaths("email")}}}};); + .message.().({{{{$.getGenericPaths("emailOnly")}}}}); + + - name: validateEventPayload + template: | + $.assert($.outputs.getContactId || $.outputs.getContactEmail, "Either one of cordial contact id or email is required. Aborting"); - name: buildIdentifyPayload condition: $.context.messageType in [{{$.EventType.IDENTIFY}}] diff --git a/test/integrations/destinations/cordial/processor/validation.ts b/test/integrations/destinations/cordial/processor/validation.ts index a764b79443..61f2e1cbed 100644 --- a/test/integrations/destinations/cordial/processor/validation.ts +++ b/test/integrations/destinations/cordial/processor/validation.ts @@ -3,6 +3,47 @@ import { generateMetadata } from '../../../testUtils'; import { destType, destination, processorInstrumentationErrorStatTags } from '../common'; export const validation: ProcessorTestData[] = [ + { + id: 'cordial-validation-test-1', + name: destType, + description: 'All of the required fields — cordial contact id, email — are missing.', + scenario: 'Framework', + successCriteria: 'Instrumentation Error', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + integrations: { + All: true, + }, + originalTimestamp: '2024-03-04T15:32:56.409Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Either one of cordial contact id or email is required. Aborting: Workflow: procWorkflow, Step: validateEventPayload, ChildStep: undefined, OriginalError: Either one of cordial contact id or email is required. Aborting', + metadata: generateMetadata(1), + statTags: processorInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, { id: 'cordial-validation-test-2', name: destType, @@ -38,7 +79,7 @@ export const validation: ProcessorTestData[] = [ body: [ { error: - 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + 'message type group is not supported: Workflow: procWorkflow, Step: validateMessageType, ChildStep: undefined, OriginalError: message type group is not supported', metadata: generateMetadata(1), statTags: processorInstrumentationErrorStatTags, statusCode: 400, From 895b327340a4eb14de884f386812135c9a8527c2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 24 Jul 2024 07:10:33 +0000 Subject: [PATCH 088/201] chore(release): 1.72.3 --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39548ce37c..2223b8aa2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.72.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.2...v1.72.3) (2024-07-24) + + +### Bug Fixes + +* add validation for cordial destination ([#3599](https://github.com/rudderlabs/rudder-transformer/issues/3599)) ([b7860a5](https://github.com/rudderlabs/rudder-transformer/commit/b7860a5b2b87fb61aaff8c68a904ac996d63efd3)) +* update getConversionActionId function for gaoc ([#3594](https://github.com/rudderlabs/rudder-transformer/issues/3594)) ([68367f5](https://github.com/rudderlabs/rudder-transformer/commit/68367f5227c96f2700a773018b991b1e87a0774d)) + ### [1.72.2](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.1...v1.72.2) (2024-07-23) ### [1.72.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.0...v1.72.1) (2024-07-23) diff --git a/package-lock.json b/package-lock.json index c4619cc586..7987a1a1ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.72.2", + "version": "1.72.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.72.2", + "version": "1.72.3", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 94cf607c50..f47b1eb124 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.72.2", + "version": "1.72.3", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 3ddf9e208702f27cbba80b032c3ed681a70c518f Mon Sep 17 00:00:00 2001 From: kanishkkatara <58228944+kanishkkatara@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:59:39 +0530 Subject: [PATCH 089/201] fix: codeowners file (#3601) --- CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 274166f613..702a461d92 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -7,5 +7,5 @@ src/features.json @rudderlabs/integrations constants/ @rudderlabs/integrations warehouse/ @rudderlabs/warehouse src/util/ @rudderlabs/integrations @rudderlabs/data-management -*/trackingPlan.ts @rudderlabs/data-management -*/userTransform.ts @rudderlabs/data-management +**/trackingPlan.ts @rudderlabs/data-management +**/userTransform.ts @rudderlabs/data-management From ef1c4f9401b6bec05cca170e644355db96a5a32c Mon Sep 17 00:00:00 2001 From: kanishkkatara <58228944+kanishkkatara@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:07:04 +0530 Subject: [PATCH 090/201] chore: capturing user_transform_test_errors stat (#3543) * chore: capturing user_transform_test_errors stat * fix: error code * fix: lint error * chore: changed error stat to total request stat --- src/services/userTransform.ts | 8 ++++++++ src/util/prometheus.js | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/services/userTransform.ts b/src/services/userTransform.ts index 9ad92e8ca3..2afad88c56 100644 --- a/src/services/userTransform.ts +++ b/src/services/userTransform.ts @@ -196,6 +196,7 @@ export class UserTransformService { public static async testTransformRoutine(events, trRevCode, libraryVersionIDs, credentials) { const response: FixMe = {}; + let errorCode: number | undefined; try { if (!trRevCode || !trRevCode.code || !trRevCode.codeVersion) { throw new Error('Invalid Request. Missing parameters in transformation code block'); @@ -231,6 +232,13 @@ export class UserTransformService { response.body = { error: extractStackTraceUptoLastSubstringMatch(error.stack, SUPPORTED_FUNC_NAMES), }; + errorCode = error.statusCode; + } finally { + const metaTags = getTransformationMetadata(events[0]?.metadata); + stats.counter('user_transform_test_count_total', events.length, { + status: errorCode || response.status, + ...metaTags, + }); } return response; } diff --git a/src/util/prometheus.js b/src/util/prometheus.js index 49f1fdcd8b..cddeb80f31 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -841,6 +841,12 @@ class Prometheus { 'k8_namespace', ], }, + { + name: 'user_transform_test_count_total', + help: 'user_transform_test_count_total', + type: 'counter', + labelNames: ['workspaceId', 'transformationId', 'status'], + }, { name: 'user_transform_requests', help: 'user_transform_requests', From d74178f81911f029d897eed6d33939a0115829ae Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Wed, 24 Jul 2024 14:48:42 +0530 Subject: [PATCH 091/201] fix: update response handler for array type response --- .../networkHandler.js | 2 +- src/v0/util/googleUtils/index.js | 11 ++--- .../dataDelivery/oauth.ts | 4 +- .../network.ts | 44 ++++++++++--------- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js index f260abeca5..df69a95299 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_offline_conversions/networkHandler.js @@ -43,7 +43,7 @@ const createJob = async ({ endpoint, headers, payload, metadata }) => { const { response, status } = createJobResponse; if (!isHttpStatusSuccess(status)) { throw new AbortedError( - `[Google Ads Offline Conversions]:: ${response?.error?.message} during google_ads_offline_store_conversions Job Creation`, + `[Google Ads Offline Conversions]:: ${response?.error?.message || response?.[0]?.error?.message} during google_ads_offline_store_conversions Job Creation`, status, response, getAuthErrCategory(createJobResponse), diff --git a/src/v0/util/googleUtils/index.js b/src/v0/util/googleUtils/index.js index 183f327fa4..3bb02d1b83 100644 --- a/src/v0/util/googleUtils/index.js +++ b/src/v0/util/googleUtils/index.js @@ -114,11 +114,12 @@ const finaliseAnalyticsConsents = (consentConfigMap, eventLevelConsent = {}) => const getAuthErrCategory = ({ response, status }) => { if (status === 401) { - const authenticationError = get( - response, - 'error.details.0.errors.0.errorCode.authenticationError', - ); - if (authenticationError === 'TWO_STEP_VERIFICATION_NOT_ENROLLED') { + let respArr = response; + if (!Array.isArray(response)) { + respArr = [response]; + } + const authenticationError = respArr.map((resp) => get(resp, 'error.details.0.errors.0.errorCode.authenticationError')); + if (authenticationError.includes('TWO_STEP_VERIFICATION_NOT_ENROLLED')) { // https://developers.google.com/google-ads/api/docs/oauth/2sv return AUTH_STATUS_INACTIVE; } diff --git a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts index b8e4c78e1d..4437ebb912 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/dataDelivery/oauth.ts @@ -368,11 +368,11 @@ export const v1oauthScenarios = [ output: { authErrorCategory: 'AUTH_STATUS_INACTIVE', message: - '[Google Ads Offline Conversions]:: {"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during google_ads_offline_conversions response transformation', + '[Google Ads Offline Conversions]:: [{"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}}] during google_ads_offline_conversions response transformation', response: [ { error: - '[Google Ads Offline Conversions]:: {"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during google_ads_offline_conversions response transformation', + '[Google Ads Offline Conversions]:: [{"error":{"code":401,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"TWO_STEP_VERIFICATION_NOT_ENROLLED"},"message":"An account administrator changed this account\'s authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step."}],"requestId":"wy4ZYbsjWcgh6uC2Ruc_Zg"}],"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}}] during google_ads_offline_conversions response transformation', metadata: { attemptNum: 1, destinationId: 'default-destinationId', diff --git a/test/integrations/destinations/google_adwords_offline_conversions/network.ts b/test/integrations/destinations/google_adwords_offline_conversions/network.ts index f1147162d2..0ab6bef1db 100644 --- a/test/integrations/destinations/google_adwords_offline_conversions/network.ts +++ b/test/integrations/destinations/google_adwords_offline_conversions/network.ts @@ -1,28 +1,30 @@ const commonResponse = { status: 401, - data: { - error: { - code: 401, - details: [ - { - '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', - errors: [ - { - errorCode: { - authenticationError: 'TWO_STEP_VERIFICATION_NOT_ENROLLED', + data: [ + { + error: { + code: 401, + details: [ + { + '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', + errors: [ + { + errorCode: { + authenticationError: 'TWO_STEP_VERIFICATION_NOT_ENROLLED', + }, + message: + "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.", }, - message: - "An account administrator changed this account's authentication settings. To access this Google Ads account, enable 2-Step Verification in your Google account at https://www.google.com/landing/2step.", - }, - ], - requestId: 'wy4ZYbsjWcgh6uC2Ruc_Zg', - }, - ], - message: - 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', - status: 'UNAUTHENTICATED', + ], + requestId: 'wy4ZYbsjWcgh6uC2Ruc_Zg', + }, + ], + message: + 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', + status: 'UNAUTHENTICATED', + }, }, - }, + ], }; export const networkCallsData = [ From 1f9b83ff6cc24a604c2373f10a1fedb5f879ea3c Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Wed, 24 Jul 2024 14:53:41 +0530 Subject: [PATCH 092/201] fix: lint error --- src/v0/util/googleUtils/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/v0/util/googleUtils/index.js b/src/v0/util/googleUtils/index.js index 3bb02d1b83..406afa1a49 100644 --- a/src/v0/util/googleUtils/index.js +++ b/src/v0/util/googleUtils/index.js @@ -118,7 +118,9 @@ const getAuthErrCategory = ({ response, status }) => { if (!Array.isArray(response)) { respArr = [response]; } - const authenticationError = respArr.map((resp) => get(resp, 'error.details.0.errors.0.errorCode.authenticationError')); + const authenticationError = respArr.map((resp) => + get(resp, 'error.details.0.errors.0.errorCode.authenticationError'), + ); if (authenticationError.includes('TWO_STEP_VERIFICATION_NOT_ENROLLED')) { // https://developers.google.com/google-ads/api/docs/oauth/2sv return AUTH_STATUS_INACTIVE; From ebf9e3fa785a2372e680cec65a9a27187d7f0415 Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Wed, 24 Jul 2024 19:08:22 +0530 Subject: [PATCH 093/201] fix: queryID aloglia discrepancy (#3597) --- .../v2/destinations/algolia/procWorkflow.yaml | 2 +- .../destinations/algolia/processor/data.ts | 141 ++++++++++++++++++ 2 files changed, 142 insertions(+), 1 deletion(-) diff --git a/src/cdk/v2/destinations/algolia/procWorkflow.yaml b/src/cdk/v2/destinations/algolia/procWorkflow.yaml index 402b48dabd..44741b5f60 100644 --- a/src/cdk/v2/destinations/algolia/procWorkflow.yaml +++ b/src/cdk/v2/destinations/algolia/procWorkflow.yaml @@ -52,7 +52,7 @@ steps: template: | const products = ^.message.properties.products products.($.removeUndefinedAndNullValues({ - "queryID" : $.isDefinedAndNotNull(.queryID) ? String(.queryID) : null, + "queryID" : $.isDefinedAndNotNull(.queryID || .queryId) ? String(.queryID || .queryId) : null, "price": $.isDefinedAndNotNull(.price) && $.isDefinedAndNotNull(^.message.properties.currency) ? String(.price) : null, "quantity": $.isDefinedAndNotNull(.quantity)? Number(.quantity) : null, "discount": $.isDefinedAndNotNull(.discount) ? String(.discount) : null diff --git a/test/integrations/destinations/algolia/processor/data.ts b/test/integrations/destinations/algolia/processor/data.ts index d239c8de70..b37b6e4246 100644 --- a/test/integrations/destinations/algolia/processor/data.ts +++ b/test/integrations/destinations/algolia/processor/data.ts @@ -2429,4 +2429,145 @@ export const data = [ }, }, }, + { + name: 'algolia', + description: 'queryID and queryId inconsistency test', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: { + email: 'testone@gmail.com', + firstName: 'test', + lastName: 'one', + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + name: '', + version: '', + }, + screen: { + density: 2, + }, + page: { + path: '/destinations/ometria', + referrer: '', + search: '', + title: '', + url: 'https://docs.rudderstack.com/destinations/ometria', + category: 'destination', + initial_referrer: 'https://docs.rudderstack.com', + initial_referring_domain: 'docs.rudderstack.com', + }, + }, + type: 'track', + messageId: '84e26acc-56a5-4835-8233-591137fca468', + session_id: '3049dc4c-5a95-4ccd-a3e7-d74a7e411f22', + originalTimestamp: '2019-10-14T09:03:17.562Z', + anonymousId: '123456', + event: 'product list viewed', + userId: 'testuserId1', + properties: { + index: 'products', + eventSubtype: 'purchase', + filters: ['field1:hello', 'val1:val2'], + queryId: '43b15df305339e827f0ac0bdc5ebcaa7', + }, + integrations: { + All: true, + }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + excludeKeys: [], + includeKeys: [], + }, + }, + Config: { + apiKey: 'dummyApiKey', + applicationId: 'O2YARRI15I', + eventTypeSettings: [ + { + from: 'product list viewed', + to: 'conversion', + }, + ], + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + JSON: { + events: [ + { + index: 'products', + queryID: '43b15df305339e827f0ac0bdc5ebcaa7', + filters: ['field1:hello', 'val1:val2'], + userToken: 'testuserId1', + eventName: 'product list viewed', + eventType: 'conversion', + eventSubtype: 'purchase', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://insights.algolia.io/1/events', + headers: { + 'X-Algolia-Application-Id': 'O2YARRI15I', + 'X-Algolia-API-Key': 'dummyApiKey', + }, + params: {}, + files: {}, + userId: '', + }, + statusCode: 200, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + }, ]; From dedca0796ee12478d57e020ef3c254afabc6e105 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Thu, 25 Jul 2024 10:44:01 +0530 Subject: [PATCH 094/201] fix: added support for ga4 v2 hybrid mode (#3586) --- src/constants/destinationCanonicalNames.js | 8 ++ src/v0/destinations/ga4/transform.js | 21 +-- src/v0/destinations/ga4/utils.js | 23 ++- .../ga4_v2/customMappingsHandler.js | 14 +- src/v0/destinations/ga4_v2/transform.ts | 4 +- .../ga4_v2/processor/customMappings.ts | 134 +++++++++++++++++- test/integrations/testUtils.ts | 4 +- 7 files changed, 181 insertions(+), 27 deletions(-) diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index 58bf35539a..1f10f45a38 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -101,6 +101,14 @@ const DestCanonicalNames = { awin: ['awin', 'Awin', 'AWIN'], sendinblue: ['sendinblue', 'SENDINBLUE', 'Sendinblue', 'SendinBlue'], ga4: ['GA4', 'ga4', 'Ga4', 'Google Analytics 4', 'googleAnalytics4', 'Google Analytics 4 (GA4)'], + ga4_v2: [ + 'GA4_V2', + 'ga4_v2', + 'Ga4_v2', + 'Google Analytics 4 V2', + 'googleAnalytics4V2', + 'Google Analytics 4 (GA4) V2', + ], pipedream: ['Pipedream', 'PipeDream', 'pipedream', 'PIPEDREAM'], pagerduty: ['pagerduty', 'PAGERDUTY', 'PagerDuty', 'Pagerduty', 'pagerDuty'], adobe_analytics: [ diff --git a/src/v0/destinations/ga4/transform.js b/src/v0/destinations/ga4/transform.js index e4dad80564..feafc4c45f 100644 --- a/src/v0/destinations/ga4/transform.js +++ b/src/v0/destinations/ga4/transform.js @@ -39,7 +39,7 @@ require('../../util/constant'); * @param {*} Config * @returns */ -const responseBuilder = (message, { Config }) => { +const responseBuilder = (message, { Config }, destType) => { let event = get(message, 'event'); basicValidation(event); @@ -54,7 +54,7 @@ const responseBuilder = (message, { Config }) => { // get common top level rawPayload let rawPayload = constructPayload(message, trackCommonConfig); - rawPayload = addClientDetails(rawPayload, message, Config); + rawPayload = addClientDetails(rawPayload, message, Config, destType); let payload = {}; const eventConfig = ConfigCategory[`${event.toUpperCase()}`]; @@ -162,7 +162,7 @@ const responseBuilder = (message, { Config }) => { } removeReservedParameterPrefixNames(payload.params); - const integrationsObj = getIntegrationsObj(message, 'ga4'); + const integrationsObj = getIntegrationsObj(message, destType); if (isHybridModeEnabled(Config) && integrationsObj && integrationsObj.sessionId) { payload.params.session_id = integrationsObj.sessionId; } @@ -186,7 +186,7 @@ const responseBuilder = (message, { Config }) => { } // Prepare GA4 consents - const consents = prepareUserConsents(message); + const consents = prepareUserConsents(message, destType); if (!isEmptyObject(consents)) { rawPayload.consent = consents; } @@ -197,7 +197,7 @@ const responseBuilder = (message, { Config }) => { return buildDeliverablePayload(rawPayload, Config); }; -const process = (event) => { +const processEvents = ({ event, destType = 'ga4' }) => { const { message, destination } = event; const { Config } = destination; @@ -212,13 +212,13 @@ const process = (event) => { let response; switch (messageType) { case EventType.TRACK: - response = responseBuilder(message, destination); + response = responseBuilder(message, destination, destType); break; case EventType.PAGE: // GA4 custom event 'page_view' is fired for page if (!isHybridModeEnabled(Config)) { message.event = 'page_view'; - response = responseBuilder(message, destination); + response = responseBuilder(message, destination, destType); } else { throw new UnsupportedEventError( 'GA4 Hybrid mode is enabled, page calls will be sent through device mode', @@ -228,7 +228,7 @@ const process = (event) => { case EventType.GROUP: // GA4 standard event 'join_group' is fired for group message.event = 'join_group'; - response = responseBuilder(message, destination); + response = responseBuilder(message, destination, destType); break; default: throw new InstrumentationError(`Message type ${messageType} not supported`); @@ -236,4 +236,7 @@ const process = (event) => { return response; }; -module.exports = { process }; +// Keeping this for other params which comes as part of process args +const process = (event) => processEvents({ event }); + +module.exports = { process, processEvents }; diff --git a/src/v0/destinations/ga4/utils.js b/src/v0/destinations/ga4/utils.js index 18994efd7f..7b9528143c 100644 --- a/src/v0/destinations/ga4/utils.js +++ b/src/v0/destinations/ga4/utils.js @@ -448,8 +448,8 @@ const prepareUserProperties = (message, piiPropertiesToIgnore = []) => { * @param {*} message * @returns */ -const prepareUserConsents = (message) => { - const integrationObj = getIntegrationsObj(message, 'ga4') || {}; +const prepareUserConsents = (message, destType = 'ga4') => { + const integrationObj = getIntegrationsObj(message, destType) || {}; const eventLevelConsentsData = integrationObj?.consents || {}; const consentConfigMap = { analyticsPersonalizationConsent: 'ad_user_data', @@ -474,11 +474,11 @@ const basicValidation = (event) => { * @param {*} message * @returns */ -const getGA4ClientId = (message, Config) => { +const getGA4ClientId = (message, Config, destType) => { let clientId; if (isHybridModeEnabled(Config)) { - const integrationsObj = getIntegrationsObj(message, 'ga4'); + const integrationsObj = getIntegrationsObj(message, destType); if (integrationsObj?.clientId) { clientId = integrationsObj.clientId; } @@ -494,14 +494,14 @@ const getGA4ClientId = (message, Config) => { return clientId; }; -const addClientDetails = (payload, message, Config) => { +const addClientDetails = (payload, message, Config, destType = 'ga4') => { const { typesOfClient } = Config; const rawPayload = cloneDeep(payload); switch (typesOfClient) { case 'gtag': // gtag.js uses client_id // GA4 uses it as an identifier to distinguish site visitors. - rawPayload.client_id = getGA4ClientId(message, Config); + rawPayload.client_id = getGA4ClientId(message, Config, destType); if (!isDefinedAndNotNull(rawPayload.client_id)) { throw new ConfigurationError('ga4ClientId, anonymousId or messageId must be provided'); } @@ -581,6 +581,16 @@ const basicConfigvalidaiton = (Config) => { } }; +const addSessionDetailsForHybridMode = (ga4Payload, message, Config, destType = 'ga4') => { + const integrationsObj = getIntegrationsObj(message, destType); + if (isHybridModeEnabled(Config) && integrationsObj?.sessionId) { + ga4Payload.events[0].params.session_id = `${integrationsObj.sessionId}`; + } + if (integrationsObj?.sessionNumber) { + ga4Payload.events[0].params.session_number = integrationsObj.sessionNumber; + } +}; + module.exports = { addClientDetails, basicValidation, @@ -603,4 +613,5 @@ module.exports = { GA4_RESERVED_PARAMETER_EXCLUSION, removeReservedParameterPrefixNames, GA4_RESERVED_USER_PROPERTY_EXCLUSION, + addSessionDetailsForHybridMode, }; diff --git a/src/v0/destinations/ga4_v2/customMappingsHandler.js b/src/v0/destinations/ga4_v2/customMappingsHandler.js index 9e82788150..b5818d6fff 100644 --- a/src/v0/destinations/ga4_v2/customMappingsHandler.js +++ b/src/v0/destinations/ga4_v2/customMappingsHandler.js @@ -13,6 +13,7 @@ const { GA4_PARAMETERS_EXCLUSION, prepareUserProperties, sanitizeUserProperties, + addSessionDetailsForHybridMode, } = require('../ga4/utils'); const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib'); const { @@ -71,6 +72,7 @@ const handleCustomMappings = (message, Config) => { // Default mapping let rawPayload = constructPayload(message, trackCommonConfig); + rawPayload = addClientDetails(rawPayload, message, Config, 'ga4_v2'); const ga4EventPayload = {}; @@ -113,7 +115,7 @@ const handleCustomMappings = (message, Config) => { // Add common top level payload let ga4BasicPayload = constructPayload(message, trackCommonConfig); - ga4BasicPayload = addClientDetails(ga4BasicPayload, message, Config); + ga4BasicPayload = addClientDetails(ga4BasicPayload, message, Config, 'ga4_v2'); const eventPropertiesMappings = mapping.eventProperties || []; @@ -143,11 +145,7 @@ const handleCustomMappings = (message, Config) => { const boilerplateOperations = (ga4Payload, message, Config, eventName) => { removeReservedParameterPrefixNames(ga4Payload.events[0].params); ga4Payload.events[0].name = eventName; - const integrationsObj = getIntegrationsObj(message, 'ga4'); - - if (isHybridModeEnabled(Config) && integrationsObj?.sessionId) { - ga4Payload.events[0].params.session_id = integrationsObj.sessionId; - } + const integrationsObj = getIntegrationsObj(message, 'ga4_v2'); if (ga4Payload.events[0].params) { ga4Payload.events[0].params = removeInvalidParams( @@ -160,7 +158,7 @@ const boilerplateOperations = (ga4Payload, message, Config, eventName) => { } // Prepare GA4 consents - const consents = prepareUserConsents(message); + const consents = prepareUserConsents(message, 'ga4_v2'); if (!isEmptyObject(consents)) { ga4Payload.consent = consents; } @@ -169,6 +167,8 @@ const boilerplateOperations = (ga4Payload, message, Config, eventName) => { if (isDefinedAndNotNull(ga4Payload.user_properties)) { ga4Payload.user_properties = sanitizeUserProperties(ga4Payload.user_properties); } + + addSessionDetailsForHybridMode(ga4Payload, message, Config, 'ga4_v2'); }; module.exports = { diff --git a/src/v0/destinations/ga4_v2/transform.ts b/src/v0/destinations/ga4_v2/transform.ts index 79892d791e..06d4bd9023 100644 --- a/src/v0/destinations/ga4_v2/transform.ts +++ b/src/v0/destinations/ga4_v2/transform.ts @@ -5,7 +5,7 @@ import { } from '@rudderstack/integrations-lib'; import { ProcessorTransformationRequest } from '../../../types'; import { handleCustomMappings } from './customMappingsHandler'; -import { process as ga4Process } from '../ga4/transform'; +import { processEvents as ga4Process } from '../ga4/transform'; import { basicConfigvalidaiton } from '../ga4/utils'; export function process(event: ProcessorTransformationRequest) { @@ -30,7 +30,7 @@ export function process(event: ProcessorTransformationRequest) { } if (eventPayload.type !== 'track') { - return ga4Process(event); + return ga4Process({ event, destType: 'ga4_v2' }); } basicConfigvalidaiton(Config); diff --git a/test/integrations/destinations/ga4_v2/processor/customMappings.ts b/test/integrations/destinations/ga4_v2/processor/customMappings.ts index b1db2121ea..28e8c5a5b4 100644 --- a/test/integrations/destinations/ga4_v2/processor/customMappings.ts +++ b/test/integrations/destinations/ga4_v2/processor/customMappings.ts @@ -1,3 +1,5 @@ +import { Destination } from '../../../../../src/types'; +import { overrideDestination } from '../../../testUtils'; import { defaultMockFns } from '../mocks'; const traits = { @@ -65,7 +67,10 @@ const properties = { }; const integrations = { - GA4: { + 'Google Analytics 4 (GA4) V2': { + clientId: '6d374e5d-78d3-4169-991d-2573ec0d1c67', + sessionId: '123', + sessionNumber: 3, consents: { ad_personalization: 'GRANTED', ad_user_data: 'DENIED', @@ -212,7 +217,7 @@ const eventsMapping = [ }, ]; -const destination = { +const destination: Destination = { Config: { apiSecret: 'dummyApiSecret', measurementId: 'G-T40PE6KET4', @@ -224,6 +229,19 @@ const destination = { eventFilteringOption: 'disable', eventsMapping, }, + ID: 'ga4_v2', + Name: 'Google Analytics 4', + Enabled: true, + WorkspaceID: '123', + DestinationDefinition: { + ID: '123', + Name: 'Google Analytics 4', + DisplayName: 'Google Analytics 4', + Config: {}, + }, + IsProcessorEnabled: true, + Transformations: [], + IsConnectionEnabled: true, }; export const customMappingTestCases = [ { @@ -297,6 +315,7 @@ export const customMappingTestCases = [ }, ], prices: 456, + session_number: 3, }, }, ], @@ -398,6 +417,7 @@ export const customMappingTestCases = [ }, ], prices: 456, + session_number: 3, }, }, ], @@ -461,6 +481,7 @@ export const customMappingTestCases = [ }, ], prices: 456, + session_number: 3, }, }, ], @@ -540,6 +561,7 @@ export const customMappingTestCases = [ }, body: { JSON: { + client_id: 'root_anonId', user_id: 'root_user', timestamp_micros: 1651105389000000, non_personalized_ads: false, @@ -594,6 +616,7 @@ export const customMappingTestCases = [ products_1_item_category2: 'regulars', products_1_item_category3: 'grocery', products_1_some_data: 'someValue', + session_number: 3, }, }, ], @@ -668,6 +691,111 @@ export const customMappingTestCases = [ timestamp_micros: 1651105389000000, non_personalized_ads: false, client_id: 'root_anonId', + events: [ + { + name: 'join_group', + params: { + city: 'London', + engagement_time_msec: 1, + firstName: 'John', + group: 'test group', + lastName: 'Gomes', + session_number: 3, + state: 'UK', + streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', + }, + }, + ], + user_properties: { + firstName: { + value: 'John', + }, + lastName: { + value: 'Gomes', + }, + city: { + value: 'London', + }, + state: { + value: 'UK', + }, + group: { + value: 'test group', + }, + }, + consent: { + ad_user_data: 'DENIED', + ad_personalization: 'GRANTED', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + mockFns: defaultMockFns, + }, + { + name: 'ga4_v2', + id: 'ga4_custom_mapping_test_4', + description: 'Custom Mapping Test For Hybrid mode', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'group', + userId: 'root_user', + anonymousId: 'root_anonId', + context: { + device, + traits, + }, + properties, + originalTimestamp: '2022-04-28T00:23:09.544Z', + integrations, + }, + destination: overrideDestination(destination, { + connectionMode: 'hybrid', + }), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://www.google-analytics.com/mp/collect', + headers: { + HOST: 'www.google-analytics.com', + 'Content-Type': 'application/json', + }, + params: { + api_secret: 'dummyApiSecret', + measurement_id: 'G-T40PE6KET4', + }, + body: { + JSON: { + user_id: 'root_user', + timestamp_micros: 1651105389000000, + non_personalized_ads: false, + client_id: '6d374e5d-78d3-4169-991d-2573ec0d1c67', events: [ { name: 'join_group', @@ -679,6 +807,8 @@ export const customMappingTestCases = [ lastName: 'Gomes', state: 'UK', streetAddress: '71 Cherry Court SOUTHAMPTON SO53 5PD UK', + session_id: '123', + session_number: 3, }, }, ], diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index 5e0df874f8..8fd077ba7b 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -25,7 +25,9 @@ export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): strin const globPattern = join(dirPath, '**', 'data.ts'); let testFilePaths = globSync(globPattern); if (opts.destination) { - testFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.destination)); + testFilePaths = testFilePaths.filter((testFile) => + testFile.includes(`/destinations/${opts.destination}/`), + ); } if (opts.feature) { testFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.feature)); From be496eed05304dea5b31d945fa5b8028fea7b36f Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 25 Jul 2024 05:55:06 +0000 Subject: [PATCH 095/201] chore(release): 1.72.4 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2223b8aa2d..6bdbe97920 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.72.4](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.3...v1.72.4) (2024-07-25) + + +### Bug Fixes + +* added support for ga4 v2 hybrid mode ([#3586](https://github.com/rudderlabs/rudder-transformer/issues/3586)) ([dedca07](https://github.com/rudderlabs/rudder-transformer/commit/dedca0796ee12478d57e020ef3c254afabc6e105)) + ### [1.72.3](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.2...v1.72.3) (2024-07-24) diff --git a/package-lock.json b/package-lock.json index 7987a1a1ad..5d5d004837 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.72.3", + "version": "1.72.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.72.3", + "version": "1.72.4", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index f47b1eb124..7244147d32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.72.3", + "version": "1.72.4", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From bd8b021248e2e3a615dbbed46804249c0679e88c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 12:11:29 +0530 Subject: [PATCH 096/201] chore(deps): bump docker/build-push-action from 5.1.0 to 6.4.1 (#3583) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5.1.0 to 6.4.1. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v5.1.0...v6.4.1) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-push-docker-image.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 0d3494e8d1..57e5fdb3aa 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -51,7 +51,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v5.1.0 + uses: docker/build-push-action@v6.4.1 with: context: . file: ${{ inputs.dockerfile }} @@ -67,7 +67,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v5.1.0 + uses: docker/build-push-action@v6.4.1 with: context: . file: ${{ inputs.dockerfile }} @@ -102,7 +102,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v5.1.0 + uses: docker/build-push-action@v6.4.1 with: context: . file: ${{ inputs.dockerfile }} @@ -118,7 +118,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v5.1.0 + uses: docker/build-push-action@v6.4.1 with: context: . file: ${{ inputs.dockerfile }} From de28dd9ad29ccb4635a3e5d0b131a4b1b33995fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 12:14:58 +0530 Subject: [PATCH 097/201] chore(deps): bump docker/login-action from 2.1.0 to 3.2.0 (#3518) Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 3.2.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2.1.0...v3.2.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- .github/workflows/build-push-docker-image.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 57e5fdb3aa..a9844c5c9d 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -45,7 +45,7 @@ jobs: uses: docker/setup-buildx-action@v3.0.0 - name: Login to DockerHub - uses: docker/login-action@v2.1.0 + uses: docker/login-action@v3.2.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} @@ -96,7 +96,7 @@ jobs: uses: docker/setup-buildx-action@v3.0.0 - name: Login to DockerHub - uses: docker/login-action@v2.1.0 + uses: docker/login-action@v3.2.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} @@ -143,7 +143,7 @@ jobs: uses: docker/setup-buildx-action@v3.0.0 - name: Login to DockerHub - uses: docker/login-action@v2.1.0 + uses: docker/login-action@v3.2.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} From 0bc67ad5680ba71fe72fd99833501cf6b72cc69b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 09:21:49 +0200 Subject: [PATCH 098/201] chore(deps): bump actions/setup-go from 5.0.0 to 5.0.2 (#3559) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5.0.0 to 5.0.2. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v5.0.0...v5.0.2) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sai Sankeerth Co-authored-by: Sankeerth --- .github/workflows/ut-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ut-tests.yml b/.github/workflows/ut-tests.yml index 0a2ef8a390..20c20abe24 100644 --- a/.github/workflows/ut-tests.yml +++ b/.github/workflows/ut-tests.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Go - uses: actions/setup-go@v5.0.0 + uses: actions/setup-go@v5.0.2 with: go-version: 1.17 From ec4db8ddd89b2d7b4fd878966380ad02149ec04d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 09:22:16 +0200 Subject: [PATCH 099/201] chore(deps): bump docker/setup-buildx-action from 3.0.0 to 3.4.0 (#3558) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.0.0 to 3.4.0. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3.0.0...v3.4.0) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- .github/workflows/build-push-docker-image.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index a9844c5c9d..885ecf4fd6 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -42,7 +42,7 @@ jobs: fetch-depth: 1 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3.0.0 + uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub uses: docker/login-action@v3.2.0 @@ -93,7 +93,7 @@ jobs: fetch-depth: 1 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3.0.0 + uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub uses: docker/login-action@v3.2.0 @@ -140,7 +140,7 @@ jobs: steps: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.0.0 + uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub uses: docker/login-action@v3.2.0 From 99123f14a46a0da95b315ab91282c1c321f90006 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 09:22:49 +0200 Subject: [PATCH 100/201] chore(deps): bump actions/setup-node from 3.7.0 to 4.0.3 (#3557) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3.7.0 to 4.0.3. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v3.7.0...v4.0.3) --- updated-dependencies: - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- .github/workflows/commitlint.yml | 2 +- .github/workflows/component-test-report.yml | 2 +- .github/workflows/draft-new-release.yml | 2 +- .github/workflows/dt-test-and-report-code-coverage.yml | 2 +- .github/workflows/publish-new-release.yml | 2 +- .github/workflows/ut-tests.yml | 2 +- .github/workflows/verify-server-start.yml | 2 +- .github/workflows/verify.yml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index a8ff39eee0..1e8889c011 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -12,7 +12,7 @@ jobs: fetch-depth: 0 - name: Setup Node - uses: actions/setup-node@v4.0.1 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/component-test-report.yml b/.github/workflows/component-test-report.yml index 3d457df9ff..936ec53742 100644 --- a/.github/workflows/component-test-report.yml +++ b/.github/workflows/component-test-report.yml @@ -28,7 +28,7 @@ jobs: fetch-depth: 1 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/draft-new-release.yml b/.github/workflows/draft-new-release.yml index 95431fef8e..82174d1d72 100644 --- a/.github/workflows/draft-new-release.yml +++ b/.github/workflows/draft-new-release.yml @@ -16,7 +16,7 @@ jobs: fetch-depth: 0 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/dt-test-and-report-code-coverage.yml b/.github/workflows/dt-test-and-report-code-coverage.yml index 4375b3383e..c3fc6150a6 100644 --- a/.github/workflows/dt-test-and-report-code-coverage.yml +++ b/.github/workflows/dt-test-and-report-code-coverage.yml @@ -20,7 +20,7 @@ jobs: fetch-depth: 1 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/publish-new-release.yml b/.github/workflows/publish-new-release.yml index 15d7b20fd1..9897190575 100644 --- a/.github/workflows/publish-new-release.yml +++ b/.github/workflows/publish-new-release.yml @@ -30,7 +30,7 @@ jobs: fetch-depth: 0 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/ut-tests.yml b/.github/workflows/ut-tests.yml index 20c20abe24..87e7d1fde8 100644 --- a/.github/workflows/ut-tests.yml +++ b/.github/workflows/ut-tests.yml @@ -26,7 +26,7 @@ jobs: fetch-depth: 1 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/verify-server-start.yml b/.github/workflows/verify-server-start.yml index 6ac5b7be05..332434c817 100644 --- a/.github/workflows/verify-server-start.yml +++ b/.github/workflows/verify-server-start.yml @@ -15,7 +15,7 @@ jobs: fetch-depth: 1 - name: Setup Node - uses: actions/setup-node@v4.0.2 + uses: actions/setup-node@v4.0.3 with: node-version-file: '.nvmrc' cache: 'npm' diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 4caef8dd91..1ae1caee23 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -16,7 +16,7 @@ jobs: ref: ${{ github.head_ref }} - name: Setup Node - uses: actions/setup-node@v3.7.0 + uses: actions/setup-node@v4.0.3 with: node-version-file: .nvmrc cache: 'npm' From cdea69c1ad368c236c5a6fba5f475e491e692280 Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti <110057617+aanshi07@users.noreply.github.com> Date: Fri, 26 Jul 2024 12:42:58 +0530 Subject: [PATCH 101/201] feat: onboard cordial source (#3593) * feat: onboard cordial source * chore: test cases added * chore: minor fix * chore: changed v0 to v1 * chore: updated test case with batched payload * chore: updated test case * chore: removed cart object * chore: test cases updated and few minor fixes * chore: test cases updated for d and _id --- src/v1/sources/cordial/config.js | 6 + src/v1/sources/cordial/mapping.json | 22 + src/v1/sources/cordial/transform.js | 51 ++ test/integrations/sources/cordial/data.ts | 628 ++++++++++++++++++++++ 4 files changed, 707 insertions(+) create mode 100644 src/v1/sources/cordial/config.js create mode 100644 src/v1/sources/cordial/mapping.json create mode 100644 src/v1/sources/cordial/transform.js create mode 100644 test/integrations/sources/cordial/data.ts diff --git a/src/v1/sources/cordial/config.js b/src/v1/sources/cordial/config.js new file mode 100644 index 0000000000..764c734870 --- /dev/null +++ b/src/v1/sources/cordial/config.js @@ -0,0 +1,6 @@ +const eventsMapping = { + crdl_app_install: 'Application Installed', + crdl_app_open: 'Application Opened', +}; + +module.exports = { eventsMapping }; diff --git a/src/v1/sources/cordial/mapping.json b/src/v1/sources/cordial/mapping.json new file mode 100644 index 0000000000..1ce066e07c --- /dev/null +++ b/src/v1/sources/cordial/mapping.json @@ -0,0 +1,22 @@ +[ + { + "sourceKeys": "event._id", + "destKeys": "properties.event_id" + }, + { + "sourceKeys": "contact._id", + "destKeys": ["context.traits.userId", "userId"] + }, + { + "sourceKeys": ["event.ts", "event.ats"], + "destKeys": ["timestamp", "sentAt", "originalTimestamp"] + }, + { + "sourceKeys": "event.d", + "destKeys": "context.device" + }, + { + "sourceKeys": "contact.channels.email.address", + "destKeys": ["context.traits.email"] + } +] diff --git a/src/v1/sources/cordial/transform.js b/src/v1/sources/cordial/transform.js new file mode 100644 index 0000000000..5548efee70 --- /dev/null +++ b/src/v1/sources/cordial/transform.js @@ -0,0 +1,51 @@ +const Message = require('../../../v0/sources/message'); +const { CommonUtils } = require('../../../util/common'); +const { generateUUID, isDefinedAndNotNull } = require('../../../v0/util'); +const { eventsMapping } = require('./config'); + +const mapping = require('./mapping.json'); + +const processEvent = (inputPaylaod) => { + const message = new Message(`Cordial`); + let eventName = inputPaylaod.event?.a || inputPaylaod.event?.action; + if (eventName in eventsMapping) { + eventName = eventsMapping[eventName]; + } + message.setEventType('track'); + message.setEventName(eventName); + message.setPropertiesV2(inputPaylaod, mapping); + + const externalId = []; + // setting up cordial contact_id to externalId + if (inputPaylaod.contact.cID) { + externalId.push({ + type: 'cordialContactId', + id: inputPaylaod.contact.cID, + }); + } + message.context.externalId = externalId; + + if (!isDefinedAndNotNull(message.userId)) { + message.anonymousId = generateUUID(); + } + // Due to multiple mappings to the same destination path object some are not showing up due to which we are doing the following + message.context.traits = { ...message.context.traits, ...inputPaylaod.contact }; + message.properties = { + ...message.properties, + ...inputPaylaod.event.properties, + ...inputPaylaod.event, + }; + delete message.properties.properties; + delete message.properties.d; + // eslint-disable-next-line no-underscore-dangle + delete message.properties._id; + return message; +}; + +const process = (inputEvent) => { + const { event: events } = inputEvent; + const eventsArray = CommonUtils.toArray(events); + return eventsArray.map(processEvent); +}; + +exports.process = process; diff --git a/test/integrations/sources/cordial/data.ts b/test/integrations/sources/cordial/data.ts new file mode 100644 index 0000000000..acb02e9fbf --- /dev/null +++ b/test/integrations/sources/cordial/data.ts @@ -0,0 +1,628 @@ +import utils from '../../../../src/v0/util'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data = [ + { + name: 'cordial', + description: 'Simple Single object Input event with normal channel and action', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + contact: { + _id: '6690fe3655e334xx028xxx', + channels: { + email: { + address: 'jondoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + cID: '6690fe3655e334xx028xxx', + }, + event: { + _id: '669141857b8cxxx1ba0da2xx', + cID: '6690fe3655e334xx028xxx', + ts: '2024-07-12T14:45:25+00:00', + ats: '2024-07-12T14:45:25+0000', + a: 'browse', + tzo: -7, + rl: 'a', + UID: '4934ee07118197xx3f74d5xxxx7b0076', + time: '2024-07-12T14:45:25+0000', + action: 'browse', + bmID: '', + first: 0, + properties: { + category: 'Shirts', + url: 'http://example.com/shirts', + description: 'A really cool khaki shirt.', + price: 9.99, + title: 'Khaki Shirt', + test_key: 'value', + }, + }, + }, + source: {}, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { + name: 'unknown', + version: 'unknown', + }, + integration: { + name: 'Cordial', + }, + traits: { + userId: '6690fe3655e334xx028xxx', + email: 'jondoe@example.com', + _id: '6690fe3655e334xx028xxx', + channels: { + email: { + address: 'jondoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + cID: '6690fe3655e334xx028xxx', + }, + externalId: [{ id: '6690fe3655e334xx028xxx', type: 'cordialContactId' }], + }, + integrations: { + Cordial: false, + }, + type: 'track', + event: 'browse', + originalTimestamp: '2024-07-12T14:45:25+00:00', + properties: { + event_id: '669141857b8cxxx1ba0da2xx', + category: 'Shirts', + url: 'http://example.com/shirts', + description: 'A really cool khaki shirt.', + price: 9.99, + title: 'Khaki Shirt', + test_key: 'value', + cID: '6690fe3655e334xx028xxx', + ts: '2024-07-12T14:45:25+00:00', + ats: '2024-07-12T14:45:25+0000', + a: 'browse', + tzo: -7, + rl: 'a', + UID: '4934ee07118197xx3f74d5xxxx7b0076', + time: '2024-07-12T14:45:25+0000', + action: 'browse', + bmID: '', + first: 0, + }, + userId: '6690fe3655e334xx028xxx', + timestamp: '2024-07-12T14:45:25+00:00', + sentAt: '2024-07-12T14:45:25+00:00', + }, + ], + }, + }, + ], + }, + }, + mockFns: () => { + defaultMockFns(); + }, + }, + { + name: 'cordial', + description: 'Multiple object Input event with batched payload', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: [ + { + contact: { + _id: '633b2fd70a12be027e0b0xxx', + lang_locale: 'EN-US', + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'none', + }, + }, + createdAt: '2022-10-03T18:54:15+0000', + email_sha256_hash: + 'f959bdf883831ebb96612eb9xxxx1e0c9481780adf5f70xxx862155531bf61df', + first_name: 'john', + last_name: 'doe', + lastUpdateSource: 'cordial', + lastModified: '2024-07-24T07:52:46+0000', + cID: '633b2fd70a12be027e0b0xxx', + }, + event: { + _id: '66a0b2ce5344b55fxxxc5a64', + cID: '633b2fd70a12be027e0b0xxx', + ts: '2024-07-24T07:52:46+00:00', + ats: '2024-07-24T07:52:39+0000', + g: { + countryISO: 'PL', + country: 'Poland', + state: 'MZ', + city: 'Warszawa', + postalCode: '00-686', + geoLoc: { + lat: 52.22744369506836, + lon: 21.009017944335938, + }, + tz: 'Europe/Warsaw', + }, + d: { + type: 'computer', + device: 'Macintosh', + platform: 'OS X', + browser: 'Chrome', + robot: false, + }, + a: 'browse', + UID: '471af949fffe749c2ebfxxx950ea73c', + sp: { + bid: 'cf6de7f1-cce5-40xx-ac9c-7c82a2xxc09e', + }, + tzo: -7, + rl: '6', + time: '2024-07-24T07:52:39+0000', + action: 'browse', + bmID: '', + first: 0, + properties: { + url: 'https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart', + product_item_group_id: ['1094269'], + product_category: ['allproducts'], + product_name: ['wtp ab'], + product_group: ['women'], + }, + }, + }, + { + contact: { + _id: '633b2fd12312be027e0b0xxx', + lang_locale: 'EN-US', + channels: { + email: { + address: 'johndoe1@example.com', + subscribeStatus: 'none', + }, + }, + createdAt: '2022-10-03T18:54:15+0000', + email_sha256_hash: + 'f95912b883831eab11612eb9xxxx1e0c9481780ad45770xxx862155531bf61df', + first_name: 'john', + last_name: 'doe', + lastUpdateSource: 'cordial', + lastModified: '2024-07-24T07:52:46+0000', + cID: '633b2fd12312be027e0b0xxx', + }, + event: { + _id: '66aku0b2ce527b55fx1xc5a64', + cID: '633b2fd12312be027e0b0xxx', + ts: '2024-07-24T07:52:46+00:00', + ats: '2024-07-24T07:52:39+0000', + g: { + countryISO: 'PL', + country: 'Poland', + state: 'MZ', + city: 'Warszawa', + postalCode: '00-686', + geoLoc: { + lat: 52.22744369506836, + lon: 21.009017944335938, + }, + tz: 'Europe/Warsaw', + }, + d: { + type: 'computer', + device: 'Macintosh', + platform: 'OS X', + browser: 'Chrome', + robot: false, + }, + a: 'browse', + UID: '471af949fffe74sdh382ebfxxx950ea73c', + sp: { + bid: 'cf6de7f1-123ce5-20xx-ac9c-7c82a2xxc09e', + }, + tzo: -7, + rl: '6', + time: '2024-07-24T07:52:39+0000', + action: 'browse', + bmID: '', + first: 0, + properties: { + url: 'https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart', + product_item_group_id: ['1094269'], + product_category: ['allproducts'], + product_name: ['wtp ab'], + product_group: ['women'], + }, + }, + }, + ], + source: {}, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { + name: 'unknown', + version: 'unknown', + }, + integration: { + name: 'Cordial', + }, + traits: { + userId: '633b2fd70a12be027e0b0xxx', + email: 'johndoe@example.com', + _id: '633b2fd70a12be027e0b0xxx', + lang_locale: 'EN-US', + channels: { + email: { + address: 'johndoe@example.com', + subscribeStatus: 'none', + }, + }, + createdAt: '2022-10-03T18:54:15+0000', + email_sha256_hash: + 'f959bdf883831ebb96612eb9xxxx1e0c9481780adf5f70xxx862155531bf61df', + first_name: 'john', + last_name: 'doe', + lastUpdateSource: 'cordial', + lastModified: '2024-07-24T07:52:46+0000', + cID: '633b2fd70a12be027e0b0xxx', + }, + device: { + type: 'computer', + device: 'Macintosh', + platform: 'OS X', + browser: 'Chrome', + robot: false, + }, + externalId: [{ id: '633b2fd70a12be027e0b0xxx', type: 'cordialContactId' }], + }, + integrations: { + Cordial: false, + }, + type: 'track', + event: 'browse', + properties: { + event_id: '66a0b2ce5344b55fxxxc5a64', + url: 'https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart', + product_item_group_id: ['1094269'], + product_category: ['allproducts'], + product_name: ['wtp ab'], + product_group: ['women'], + cID: '633b2fd70a12be027e0b0xxx', + ts: '2024-07-24T07:52:46+00:00', + ats: '2024-07-24T07:52:39+0000', + g: { + countryISO: 'PL', + country: 'Poland', + state: 'MZ', + city: 'Warszawa', + postalCode: '00-686', + geoLoc: { + lat: 52.22744369506836, + lon: 21.009017944335938, + }, + tz: 'Europe/Warsaw', + }, + a: 'browse', + UID: '471af949fffe749c2ebfxxx950ea73c', + sp: { + bid: 'cf6de7f1-cce5-40xx-ac9c-7c82a2xxc09e', + }, + tzo: -7, + rl: '6', + time: '2024-07-24T07:52:39+0000', + action: 'browse', + bmID: '', + first: 0, + }, + userId: '633b2fd70a12be027e0b0xxx', + timestamp: '2024-07-24T07:52:46+00:00', + sentAt: '2024-07-24T07:52:46+00:00', + originalTimestamp: '2024-07-24T07:52:46+00:00', + }, + { + context: { + library: { + name: 'unknown', + version: 'unknown', + }, + integration: { + name: 'Cordial', + }, + traits: { + userId: '633b2fd12312be027e0b0xxx', + email: 'johndoe1@example.com', + _id: '633b2fd12312be027e0b0xxx', + lang_locale: 'EN-US', + channels: { + email: { + address: 'johndoe1@example.com', + subscribeStatus: 'none', + }, + }, + createdAt: '2022-10-03T18:54:15+0000', + email_sha256_hash: + 'f95912b883831eab11612eb9xxxx1e0c9481780ad45770xxx862155531bf61df', + first_name: 'john', + last_name: 'doe', + lastUpdateSource: 'cordial', + lastModified: '2024-07-24T07:52:46+0000', + cID: '633b2fd12312be027e0b0xxx', + }, + device: { + type: 'computer', + device: 'Macintosh', + platform: 'OS X', + browser: 'Chrome', + robot: false, + }, + externalId: [{ id: '633b2fd12312be027e0b0xxx', type: 'cordialContactId' }], + }, + integrations: { + Cordial: false, + }, + type: 'track', + event: 'browse', + properties: { + event_id: '66aku0b2ce527b55fx1xc5a64', + url: 'https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart', + product_item_group_id: ['1094269'], + product_category: ['allproducts'], + product_name: ['wtp ab'], + product_group: ['women'], + cID: '633b2fd12312be027e0b0xxx', + ts: '2024-07-24T07:52:46+00:00', + ats: '2024-07-24T07:52:39+0000', + g: { + countryISO: 'PL', + country: 'Poland', + state: 'MZ', + city: 'Warszawa', + postalCode: '00-686', + geoLoc: { + lat: 52.22744369506836, + lon: 21.009017944335938, + }, + tz: 'Europe/Warsaw', + }, + a: 'browse', + UID: '471af949fffe74sdh382ebfxxx950ea73c', + sp: { + bid: 'cf6de7f1-123ce5-20xx-ac9c-7c82a2xxc09e', + }, + tzo: -7, + rl: '6', + time: '2024-07-24T07:52:39+0000', + action: 'browse', + bmID: '', + first: 0, + }, + userId: '633b2fd12312be027e0b0xxx', + timestamp: '2024-07-24T07:52:46+00:00', + sentAt: '2024-07-24T07:52:46+00:00', + originalTimestamp: '2024-07-24T07:52:46+00:00', + }, + ], + }, + }, + ], + }, + }, + mockFns: () => { + defaultMockFns(); + }, + }, + { + name: 'cordial', + description: 'Simple Single object Input event with no CId', + module: 'source', + version: 'v1', + input: { + request: { + body: [ + { + event: { + contact: { + _id: '6690fe3655e334xx028xx1', + channels: { + email: { + address: 'jondoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + }, + event: { + _id: '669141857b8cxxx1ba0da2x1', + ts: '2024-07-12T14:45:25+00:00', + ats: '2024-07-12T14:45:25+0000', + d: { + type: 'computer', + device: false, + platform: false, + browser: false, + robot: true, + }, + a: 'browse', + tzo: -7, + rl: 'a', + UID: '4934ee07197xx3f74d5xxxx7b0076', + time: '2024-07-12T14:45:25+0000', + action: 'browse', + bmID: '', + first: 0, + properties: { + category: 'Shirts', + url: 'http://example.com/shirts', + description: 'A really cool khaki shirt.', + price: 9.99, + title: 'Khaki Shirt', + test_key: 'value', + }, + }, + }, + source: {}, + }, + ], + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { + name: 'unknown', + version: 'unknown', + }, + integration: { + name: 'Cordial', + }, + traits: { + userId: '6690fe3655e334xx028xx1', + email: 'jondoe@example.com', + _id: '6690fe3655e334xx028xx1', + channels: { + email: { + address: 'jondoe@example.com', + subscribeStatus: 'subscribed', + subscribedAt: '2024-07-12T09:58:14+0000', + }, + }, + createdAt: '2024-07-12T09:58:14+0000', + address: { + city: 'San Miego', + }, + first_name: 'John', + last_name: 'Doe', + lastUpdateSource: 'api', + lastModified: '2024-07-12T13:00:49+0000', + }, + device: { + type: 'computer', + device: false, + platform: false, + browser: false, + robot: true, + }, + externalId: [], + }, + integrations: { + Cordial: false, + }, + type: 'track', + event: 'browse', + originalTimestamp: '2024-07-12T14:45:25+00:00', + properties: { + event_id: '669141857b8cxxx1ba0da2x1', + category: 'Shirts', + url: 'http://example.com/shirts', + description: 'A really cool khaki shirt.', + price: 9.99, + title: 'Khaki Shirt', + test_key: 'value', + ts: '2024-07-12T14:45:25+00:00', + ats: '2024-07-12T14:45:25+0000', + a: 'browse', + tzo: -7, + rl: 'a', + UID: '4934ee07197xx3f74d5xxxx7b0076', + time: '2024-07-12T14:45:25+0000', + action: 'browse', + bmID: '', + first: 0, + }, + userId: '6690fe3655e334xx028xx1', + timestamp: '2024-07-12T14:45:25+00:00', + sentAt: '2024-07-12T14:45:25+00:00', + }, + ], + }, + }, + ], + }, + }, + mockFns: () => { + defaultMockFns(); + }, + }, +]; From adc2a4a6650c9d9add26be51999f5b3078c59f15 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:06:54 +0530 Subject: [PATCH 102/201] fix: customerio page undefined name (#3613) * fix: customerIo page call invalid name This reverts commit 279fd761971ed72d9638daaabcc3829e09a12896. --- src/v0/destinations/customerio/util.js | 3 ++ .../destinations/customerio/processor/data.ts | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/v0/destinations/customerio/util.js b/src/v0/destinations/customerio/util.js index ef983748a5..cadad5620c 100644 --- a/src/v0/destinations/customerio/util.js +++ b/src/v0/destinations/customerio/util.js @@ -286,6 +286,9 @@ const defaultResponseBuilder = (message, evName, userId, evType, destination, me // 100 - len(`Viewed Screen`) = 86 trimmedEvName = `Viewed ${truncate(message.event || message.properties.name, 86)} Screen`; } else { + if (typeof evName !== 'string') { + throw new InstrumentationError('Event Name type should be a string'); + } // validating evName here as well as message.name could be undefined as well trimmedEvName = truncate(evName, 100); } // anonymous_id needs to be sent for anon track calls to provide information on which anon user is being tracked diff --git a/test/integrations/destinations/customerio/processor/data.ts b/test/integrations/destinations/customerio/processor/data.ts index 5bbbfe7b10..92cea4250d 100644 --- a/test/integrations/destinations/customerio/processor/data.ts +++ b/test/integrations/destinations/customerio/processor/data.ts @@ -8275,4 +8275,58 @@ export const data = [ }, }, }, + { + name: 'customerio', + description: 'Test 66 -> Invalid Page call', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + }, + type: 'page', + anonymousId: 'c82cbdff-e5be-4009-ac78-cdeea09ab4b1', + integrations: { + All: true, + }, + }, + destination: { + Config: { + datacenter: 'US', + siteID: '46be54768e7d49ab2628', + apiKey: 'dummyApiKey', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event Name type should be a string', + statTags: { + destType: 'CUSTOMERIO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, ]; From 02f8dbd63b1cc5714549025be70e7d073995f2bb Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Tue, 30 Jul 2024 17:34:40 +0530 Subject: [PATCH 103/201] chore: remove cdkv1 support (#3609) --- package-lock.json | 61 ----- package.json | 1 - src/cdk/v1/autopilot/config.yaml | 33 --- src/cdk/v1/autopilot/mapping/identify.yaml | 38 ---- src/cdk/v1/autopilot/mapping/track.yaml | 2 - src/cdk/v1/autopilot/transform.js | 55 ----- src/cdk/v1/dcm_floodlight/config.js | 5 - src/cdk/v1/dcm_floodlight/config.yaml | 26 --- .../mapping/DCMFloodlightConfig.yaml | 21 -- src/cdk/v1/dcm_floodlight/transform.js | 211 ------------------ src/cdk/v1/handler.js | 85 ------- src/cdk/v1/heap/config.yaml | 28 --- src/cdk/v1/heap/mapping/identify.yaml | 17 -- src/cdk/v1/heap/mapping/track.yaml | 28 --- src/cdk/v1/heap/transform.js | 15 -- src/cdk/v1/kochava/config.yaml | 15 -- src/cdk/v1/kochava/mappings/default.yaml | 49 ---- src/cdk/v1/kochava/transform.js | 78 ------- src/cdk/v1/lytics/config.yaml | 53 ----- src/cdk/v1/lytics/mappings/identify.yaml | 29 --- src/cdk/v1/lytics/mappings/page-screen.yaml | 17 -- src/cdk/v1/lytics/mappings/track.yaml | 17 -- src/cdk/v1/lytics/transform.js | 23 -- src/cdk/v1/new_relic/config.yaml | 15 -- src/cdk/v1/new_relic/mapping/track.yaml | 14 -- src/cdk/v1/new_relic/transform.js | 112 ---------- src/cdk/v1/statsig/config.yaml | 19 -- src/cdk/v1/userlist/config.yaml | 19 -- .../v1/userlist/mapping/userlist_default.yaml | 8 - src/cdk/v1/variance/config.yaml | 13 -- src/cdk/v1/variance/mappings/default.yaml | 4 - src/cdk/v1/vitally/config.yaml | 15 -- src/cdk/v1/zapier/config.yaml | 16 -- src/cdk/v1/zapier/transform.js | 43 ---- src/cdk/v2/destinations/emarsys/utils.test.js | 5 +- src/cdk/v2/destinations/rakuten/utils.js | 3 +- src/helpers/__tests__/serviceSelector.test.ts | 36 +-- src/helpers/serviceSelector.ts | 17 +- src/legacy/router.js | 24 +- src/services/destination/cdkV1Integration.ts | 134 ----------- src/util/errorNotifier/bugsnag.js | 6 - src/util/types.ts | 1 - src/v0/destinations/klaviyo/util.js | 2 +- src/v0/destinations/revenue_cat/transform.js | 2 +- src/v0/util/index.js | 11 - src/v0/util/tags.js | 1 - .../cdk_postMapper/autopilot.test.js | 60 ----- .../cdk_postMapper/dcm_floodlight.test.js | 106 --------- test/__tests__/cdk_postMapper/heap.test.js | 27 --- test/__tests__/cdk_postMapper/kochava.test.js | 110 --------- test/__tests__/cdk_postMapper/lytics.test.js | 14 -- .../cdk_postMapper/new_relic.test.js | 86 ------- test/__tests__/cdk_postMapper/zapier.test.js | 37 --- .../data/versioned_processor_heap_input.json | 12 +- .../data/versioned_processor_heap_output.json | 8 +- test/__tests__/utilities/test-utils.js | 135 ----------- .../data_scenarios/cdk_v1/failure.json | 4 +- .../data_scenarios/cdk_v1/success.json | 2 +- test/apitests/service.api.test.ts | 22 -- .../destinations/statsig/processor/data.ts | 12 +- .../destinations/variance/processor/data.ts | 4 +- 61 files changed, 38 insertions(+), 2028 deletions(-) delete mode 100644 src/cdk/v1/autopilot/config.yaml delete mode 100644 src/cdk/v1/autopilot/mapping/identify.yaml delete mode 100644 src/cdk/v1/autopilot/mapping/track.yaml delete mode 100644 src/cdk/v1/autopilot/transform.js delete mode 100644 src/cdk/v1/dcm_floodlight/config.js delete mode 100644 src/cdk/v1/dcm_floodlight/config.yaml delete mode 100644 src/cdk/v1/dcm_floodlight/mapping/DCMFloodlightConfig.yaml delete mode 100644 src/cdk/v1/dcm_floodlight/transform.js delete mode 100644 src/cdk/v1/handler.js delete mode 100644 src/cdk/v1/heap/config.yaml delete mode 100644 src/cdk/v1/heap/mapping/identify.yaml delete mode 100644 src/cdk/v1/heap/mapping/track.yaml delete mode 100644 src/cdk/v1/heap/transform.js delete mode 100644 src/cdk/v1/kochava/config.yaml delete mode 100644 src/cdk/v1/kochava/mappings/default.yaml delete mode 100644 src/cdk/v1/kochava/transform.js delete mode 100644 src/cdk/v1/lytics/config.yaml delete mode 100644 src/cdk/v1/lytics/mappings/identify.yaml delete mode 100644 src/cdk/v1/lytics/mappings/page-screen.yaml delete mode 100644 src/cdk/v1/lytics/mappings/track.yaml delete mode 100644 src/cdk/v1/lytics/transform.js delete mode 100644 src/cdk/v1/new_relic/config.yaml delete mode 100644 src/cdk/v1/new_relic/mapping/track.yaml delete mode 100644 src/cdk/v1/new_relic/transform.js delete mode 100644 src/cdk/v1/statsig/config.yaml delete mode 100644 src/cdk/v1/userlist/config.yaml delete mode 100644 src/cdk/v1/userlist/mapping/userlist_default.yaml delete mode 100644 src/cdk/v1/variance/config.yaml delete mode 100644 src/cdk/v1/variance/mappings/default.yaml delete mode 100644 src/cdk/v1/vitally/config.yaml delete mode 100644 src/cdk/v1/zapier/config.yaml delete mode 100644 src/cdk/v1/zapier/transform.js delete mode 100644 src/services/destination/cdkV1Integration.ts delete mode 100644 test/__tests__/cdk_postMapper/autopilot.test.js delete mode 100644 test/__tests__/cdk_postMapper/dcm_floodlight.test.js delete mode 100644 test/__tests__/cdk_postMapper/heap.test.js delete mode 100644 test/__tests__/cdk_postMapper/kochava.test.js delete mode 100644 test/__tests__/cdk_postMapper/lytics.test.js delete mode 100644 test/__tests__/cdk_postMapper/new_relic.test.js delete mode 100644 test/__tests__/cdk_postMapper/zapier.test.js delete mode 100644 test/__tests__/utilities/test-utils.js diff --git a/package-lock.json b/package-lock.json index 5d5d004837..ccee766ccb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,6 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rs-jsonpath": "^1.1.2", - "rudder-transformer-cdk": "^1.4.11", "set-value": "^4.1.0", "sha256": "^0.2.0", "sqlstring": "^2.3.3", @@ -3346,19 +3345,6 @@ "heap": ">= 0.2.0" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", @@ -4578,24 +4564,6 @@ "node": "^14.17.0 || >=16.0.0" } }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -14439,18 +14407,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -18703,23 +18659,6 @@ "node": ">=0.4.0" } }, - "node_modules/rudder-transformer-cdk": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/rudder-transformer-cdk/-/rudder-transformer-cdk-1.4.11.tgz", - "integrity": "sha512-u2t/L47tNe9wyzSpQptLkiECT0/P5Xx8BLmZisfuXQx3lXco57oaDX/Ii1ZhEiHM2zht+NiyrGkvhBKMt1IAyA==", - "dependencies": { - "get-value": "^3.0.1", - "handlebars": "^4.7.7", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "moment-timezone": "^0.5.43", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "unset-value": "^2.0.1", - "winston": "^3.8.1" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", diff --git a/package.json b/package.json index 7244147d32..4285e0d01b 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,6 @@ "prom-client": "^14.2.0", "qs": "^6.11.1", "rs-jsonpath": "^1.1.2", - "rudder-transformer-cdk": "^1.4.11", "set-value": "^4.1.0", "sha256": "^0.2.0", "sqlstring": "^2.3.3", diff --git a/src/cdk/v1/autopilot/config.yaml b/src/cdk/v1/autopilot/config.yaml deleted file mode 100644 index c6cccd59d6..0000000000 --- a/src/cdk/v1/autopilot/config.yaml +++ /dev/null @@ -1,33 +0,0 @@ -message: - supportedMessageTypes: - - identify - - track - identify: - transformation: - mapperPath: ./mapping/identify.yaml - postMapper: - name: 'identifyPostMapper' - response: - endpoint: 'https://api2.autopilothq.com/v1/contact' - method: POST - format: JSON - headers: - Accept: 'application/json' - autopilotapikey: '{{ destConfig.apiKey }}' - Content-Type: 'application/json' - userId: '{{ message.anonymousId }}' - - track: - transformation: - mapperPath: ./mapping/track.yaml - postMapper: - name: 'trackPostMapper' - response: - endpoint: '{{ rudderContext.endpoint }}' - method: POST - format: JSON - headers: - Accept: 'application/json' - autopilotapikey: '{{ destConfig.apiKey }}' - Content-Type: 'application/json' - userId: '{{ message.anonymousId }}' diff --git a/src/cdk/v1/autopilot/mapping/identify.yaml b/src/cdk/v1/autopilot/mapping/identify.yaml deleted file mode 100644 index a460907b7e..0000000000 --- a/src/cdk/v1/autopilot/mapping/identify.yaml +++ /dev/null @@ -1,38 +0,0 @@ -- destKey: Email - sourceKeys: - - traits.email - - context.traits.email - -- destKey: FirstName - sourceKeys: - - traits.firstName - - context.traits.firstName - - traits.firstname - - context.traits.firstname - -- destKey: LastName - sourceKeys: - - traits.lastName - - context.traits.lastName - - traits.lastname - - context.traits.lastname - -- destKey: Phone - sourceKeys: - - traits.phone - - context.traits.phone - -- destKey: Company - sourceKeys: - - traits.company.name - - context.traits.company.name - -- destKey: Status - sourceKeys: - - traits.status - - context.traits.status - -- destKey: LeadSource - sourceKeys: - - traits.LeadSource - - context.traits.LeadSource diff --git a/src/cdk/v1/autopilot/mapping/track.yaml b/src/cdk/v1/autopilot/mapping/track.yaml deleted file mode 100644 index 0315d2bcda..0000000000 --- a/src/cdk/v1/autopilot/mapping/track.yaml +++ /dev/null @@ -1,2 +0,0 @@ -- destKey: property - sourceKeys: properties diff --git a/src/cdk/v1/autopilot/transform.js b/src/cdk/v1/autopilot/transform.js deleted file mode 100644 index b27e50f096..0000000000 --- a/src/cdk/v1/autopilot/transform.js +++ /dev/null @@ -1,55 +0,0 @@ -const { Utils } = require('rudder-transformer-cdk'); -const { InstrumentationError } = require('@rudderstack/integrations-lib'); - -function identifyPostMapper(event, mappedPayload) { - const { message } = event; - const payload = mappedPayload; - - // better to outsource constants like this in a separate file - const identifyFields = [ - 'email', - 'firstname', - 'firstName', - 'lastname', - 'lastName', - 'phone', - 'company', - 'status', - 'LeadSource', - ]; - - let responseBody; - const customPayload = message.traits || message.context.traits || {}; - identifyFields.forEach((value) => { - delete customPayload[value]; - }); - if (Object.keys(customPayload).length > 0) { - responseBody = { - contact: { ...payload, custom: customPayload }, - }; - } else { - responseBody = { - contact: { ...payload }, - }; - } - return responseBody; // this flows onto the next stage in the yaml -} - -function trackPostMapper(event, mappedPayload, rudderContext) { - const { message, destination } = event; - - const contactIdOrEmail = Utils.getFieldValueFromMessage(message, 'email'); - if (contactIdOrEmail) { - // eslint-disable-next-line no-param-reassign - rudderContext.endpoint = `https://api2.autopilothq.com/v1/trigger/${destination.Config.triggerId}/contact/${contactIdOrEmail}`; - } else { - throw new InstrumentationError('Email is required for track calls'); - } - // The plan is to delete the rudderResponse property from the mappedPayload finally - // While removing the rudderResponse property, we'd need to do a deep-clone of rudderProperty first - // And then go ahead with `rudderResponse` property - // This `rudderResponse` property has to be combined with transformation mentioned `response` tag in config.yaml - return mappedPayload; // this flows onto the next stage in the yaml -} - -module.exports = { identifyPostMapper, trackPostMapper }; diff --git a/src/cdk/v1/dcm_floodlight/config.js b/src/cdk/v1/dcm_floodlight/config.js deleted file mode 100644 index ce7ab69902..0000000000 --- a/src/cdk/v1/dcm_floodlight/config.js +++ /dev/null @@ -1,5 +0,0 @@ -const BASE_URL = 'https://ad.doubleclick.net/ddm/activity/'; - -const BLACKLISTED_CHARACTERS = ['"', '<', '>', '#']; - -module.exports = { BASE_URL, BLACKLISTED_CHARACTERS }; diff --git a/src/cdk/v1/dcm_floodlight/config.yaml b/src/cdk/v1/dcm_floodlight/config.yaml deleted file mode 100644 index cac23f66d3..0000000000 --- a/src/cdk/v1/dcm_floodlight/config.yaml +++ /dev/null @@ -1,26 +0,0 @@ -message: - supportedMessageTypes: - - track - - page - track: - transformation: - mapperPath: ./mapping/DCMFloodlightConfig.yaml - postMapper: - name: 'postMapper' - response: - endpoint: '{{ rudderContext.endpoint }}' - method: GET - format: JSON - headers: - User-Agent: '{{ rudderContext.userAgent }}' - page: - transformation: - mapperPath: ./mapping/DCMFloodlightConfig.yaml - postMapper: - name: 'postMapper' - response: - endpoint: '{{ rudderContext.endpoint }}' - method: GET - format: JSON - headers: - User-Agent: '{{ rudderContext.userAgent }}' diff --git a/src/cdk/v1/dcm_floodlight/mapping/DCMFloodlightConfig.yaml b/src/cdk/v1/dcm_floodlight/mapping/DCMFloodlightConfig.yaml deleted file mode 100644 index 6126dac5c7..0000000000 --- a/src/cdk/v1/dcm_floodlight/mapping/DCMFloodlightConfig.yaml +++ /dev/null @@ -1,21 +0,0 @@ -- destKey: dc_rdid - sourceKeys: context.device.advertisingId - required: true - -- destKey: ord - sourceKeys: - - properties.orderId - - properties.order_id - required: false - -- destKey: qty - sourceKeys: properties.quantity - required: false - -- destKey: cost - sourceKeys: properties.revenue - required: false - -- destKey: dc_lat - sourceKeys: context.device.adTrackingEnabled - required: false diff --git a/src/cdk/v1/dcm_floodlight/transform.js b/src/cdk/v1/dcm_floodlight/transform.js deleted file mode 100644 index bb93333745..0000000000 --- a/src/cdk/v1/dcm_floodlight/transform.js +++ /dev/null @@ -1,211 +0,0 @@ -/* eslint-disable no-param-reassign */ -const get = require('get-value'); -const lodash = require('lodash'); -const { - removeUndefinedAndNullValues, - isDefinedAndNotNull, -} = require('rudder-transformer-cdk/build/utils'); -const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib'); -const { - getIntegrationsObj, - isEmpty, - isEmptyObject, - getValueFromPropertiesOrTraits, - getHashFromArray, -} = require('../../../v0/util'); -const { GENERIC_TRUE_VALUES, GENERIC_FALSE_VALUES } = require('../../../constants'); -const { BASE_URL, BLACKLISTED_CHARACTERS } = require('./config'); - -// append properties to endpoint -// eg: ${BASE_URL}key1=value1;key2=value2;.... -const appendProperties = (payload) => { - let endpoint = ''; - endpoint += Object.keys(payload) - .map((key) => `${key}=${payload[key]}`) - .join(';'); - - return endpoint; -}; - -// transform webapp dynamicForm custom floodlight variable -// into {property1: u1, property2: u2, ...} -// Ref - https://support.google.com/campaignmanager/answer/2823222?hl=en -const transformCustomVariable = (customFloodlightVariable, message) => { - const customVariable = {}; - const customMapping = getHashFromArray(customFloodlightVariable, 'from', 'to', false); - - Object.keys(customMapping).forEach((key) => { - // it takes care of getting the value in the order. - // returns null if not present - const itemValue = getValueFromPropertiesOrTraits({ - message, - key, - }); - - if ( - // the value is not null - !lodash.isNil(itemValue) && - // the value is string and doesn't have any blacklisted characters - !( - typeof itemValue === 'string' && BLACKLISTED_CHARACTERS.some((k) => itemValue.includes(k)) - ) && - // boolean values are not supported - typeof itemValue !== 'boolean' - ) { - customVariable[`u${customMapping[key].replace(/u/g, '')}`] = encodeURIComponent(itemValue); - } - }); - - return customVariable; -}; - -// valid flag should be provided [1|true] or [0|false] -const mapFlagValue = (key, value) => { - if (GENERIC_TRUE_VALUES.includes(value.toString())) { - return 1; - } - if (GENERIC_FALSE_VALUES.includes(value.toString())) { - return 0; - } - - throw new InstrumentationError(`${key}: valid parameters are [1|true] or [0|false]`); -}; - -/** - * postMapper does the processing after we do the initial mapping - * defined in mapping/*.yaml - * @param {*} input - * @param {*} mappedPayload - * @param {*} rudderContext - * @returns - */ -const postMapper = (input, mappedPayload, rudderContext) => { - const { message, destination } = input; - const { advertiserId, conversionEvents } = destination.Config; - let { activityTag, groupTag } = destination.Config; - let customFloodlightVariable; - let salesTag; - - let event; - // for page() take event from name and category - if (message.type.toLowerCase() === 'page') { - const { category } = message.properties; - const { name } = message || message.properties; - - if (category && name) { - message.event = `Viewed ${category} ${name} Page`; - } else if (category) { - // categorized pages - message.event = `Viewed ${category} Page`; - } else if (name) { - // named pages - message.event = `Viewed ${name} Page`; - } else { - message.event = 'Viewed Page'; - } - } - - event = message.event; - - if (!event) { - throw new InstrumentationError(`${message.type}:: event is required`); - } - - const userAgent = get(message, 'context.userAgent'); - if (!userAgent) { - throw new InstrumentationError(`${message.type}:: userAgent is required`); - } - rudderContext.userAgent = userAgent; - - // find conversion event - // some() stops execution if at least one condition is passed and returns bool - event = event.trim().toLowerCase(); - const conversionEventFound = conversionEvents.some((conversionEvent) => { - if ( - conversionEvent && - conversionEvent.eventName && - conversionEvent.eventName.trim().toLowerCase() === event - ) { - if ( - !isEmpty(conversionEvent.floodlightActivityTag) && - !isEmpty(conversionEvent.floodlightGroupTag) - ) { - activityTag = conversionEvent.floodlightActivityTag.trim(); - groupTag = conversionEvent.floodlightGroupTag.trim(); - } - salesTag = conversionEvent.salesTag; - customFloodlightVariable = conversionEvent.customVariables || []; - return true; - } - return false; - }); - - if (!conversionEventFound) { - throw new ConfigurationError(`${message.type}:: Conversion event not found`); - } - - // Ref - https://support.google.com/displayvideo/answer/6040012?hl=en - customFloodlightVariable = transformCustomVariable(customFloodlightVariable, message); - mappedPayload = { - src: advertiserId, - cat: activityTag, - type: groupTag, - ...mappedPayload, - }; - - if (salesTag) { - // sums quantity from products array or fallback to properties.quantity - const products = get(message, 'properties.products'); - if (!isEmpty(products) && Array.isArray(products)) { - const quantities = products.reduce((accumulator, product) => { - if (product.quantity) { - return accumulator + product.quantity; - } - return accumulator; - }, 0); - if (quantities) { - mappedPayload.qty = quantities; - } - } - } else { - // for counter tag - mappedPayload.ord = get(message, 'messageId'); - delete mappedPayload.qty; - delete mappedPayload.cost; - } - - // COPPA, GDPR, npa must be provided inside integration object ("DCM FLoodlight") - // Ref - https://support.google.com/displayvideo/answer/6040012?hl=en - const integrationsObj = getIntegrationsObj(message, 'dcm_floodlight'); - if (integrationsObj) { - if (isDefinedAndNotNull(integrationsObj.COPPA)) { - mappedPayload.tag_for_child_directed_treatment = mapFlagValue('COPPA', integrationsObj.COPPA); - } - - if (isDefinedAndNotNull(integrationsObj.GDPR)) { - mappedPayload.tfua = mapFlagValue('GDPR', integrationsObj.GDPR); - } - - if (isDefinedAndNotNull(integrationsObj.npa)) { - mappedPayload.npa = mapFlagValue('npa', integrationsObj.npa); - } - } - - if (isDefinedAndNotNull(mappedPayload.dc_lat)) { - mappedPayload.dc_lat = mapFlagValue('dc_lat', mappedPayload.dc_lat); - } - - mappedPayload = removeUndefinedAndNullValues(mappedPayload); - customFloodlightVariable = removeUndefinedAndNullValues(customFloodlightVariable); - - let dcmEndpoint = `${BASE_URL}${appendProperties(mappedPayload)}`; - if (!isEmptyObject(customFloodlightVariable)) { - dcmEndpoint = `${dcmEndpoint};${appendProperties(customFloodlightVariable)}`; - } - - rudderContext.endpoint = dcmEndpoint; - - return {}; -}; - -module.exports = { postMapper }; diff --git a/src/cdk/v1/handler.js b/src/cdk/v1/handler.js deleted file mode 100644 index 0af0859f49..0000000000 --- a/src/cdk/v1/handler.js +++ /dev/null @@ -1,85 +0,0 @@ -const { ConfigFactory, Executor } = require('rudder-transformer-cdk'); -const { CustomError } = require('rudder-transformer-cdk/build/error'); -const { TRANSFORMER_METRIC } = require('rudder-transformer-cdk/build/constants'); -const path = require('path'); - -const basePath = path.resolve(__dirname); -ConfigFactory.init({ basePath, loggingMode: 'production' }); - -const { - InstrumentationError, - TransformationError, - ConfigurationError, -} = require('@rudderstack/integrations-lib'); -const tags = require('../../v0/util/tags'); -const { generateErrorObject } = require('../../v0/util'); - -const defTags = { - [tags.TAG_NAMES.IMPLEMENTATION]: tags.IMPLEMENTATIONS.CDK_V1, -}; - -/** - * Translates CDK errors into transformer errors - * @param {} err The error object - * @returns An error type which the transformer recognizes - */ -function getErrorInfo(err) { - if (err instanceof CustomError) { - let errInstance = ''; - switch (err.statTags?.meta) { - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.BAD_CONFIG: - errInstance = new TransformationError( - `Bad transformer configuration file. Original error: ${err.message}`, - ); - break; - - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.CONFIGURATION: - errInstance = new ConfigurationError(`Bad configuration. Original error: ${err.message}`); - break; - - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.TF_FUNC: - errInstance = new TransformationError( - `Bad pre/post transformation function. Original error: ${err.message}`, - ); - break; - - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.BAD_EVENT: - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.INSTRUMENTATION: - errInstance = new InstrumentationError(`Bad event. Original error: ${err.message}`); - break; - - case TRANSFORMER_METRIC.MEASUREMENT_TYPE.CDK.META.EXCEPTION: - errInstance = new TransformationError( - `Unknown error occurred. Original error: ${err.message}`, - ); - break; - default: - break; - } - if (err.statTags.scope === TRANSFORMER_METRIC.MEASUREMENT_TYPE.EXCEPTION.SCOPE) { - errInstance = new TransformationError( - `Unknown error occurred. Original error: ${err.message}`, - ); - } - if (errInstance) { - return generateErrorObject(errInstance, defTags); - } - } - - return generateErrorObject(err, defTags); -} - -async function processCdkV1(destType, parsedEvent) { - try { - const tfConfig = await ConfigFactory.getConfig(destType); - const respEvents = await Executor.execute(parsedEvent, tfConfig); - return respEvents; - } catch (error) { - throw getErrorInfo(error); - } -} - -module.exports = { - processCdkV1, - getErrorInfo, -}; diff --git a/src/cdk/v1/heap/config.yaml b/src/cdk/v1/heap/config.yaml deleted file mode 100644 index da6a2dfe28..0000000000 --- a/src/cdk/v1/heap/config.yaml +++ /dev/null @@ -1,28 +0,0 @@ -message: - identify: - transformation: - mapperPath: ./mapping/identify.yaml - postMapper: - name: 'commonPostMapper' - response: - method: POST - format: JSON - endpoint: 'https://heapanalytics.com/api/add_user_properties' - userId: '{{ message.anonymousId }}' - headers: - Accept: 'application/json' - Content-Type: 'application/json' - - track: - transformation: - mapperPath: ./mapping/track.yaml - postMapper: - name: 'commonPostMapper' - response: - method: POST - format: JSON - endpoint: 'https://heapanalytics.com/api/track' - userId: '{{ message.anonymousId }}' - headers: - Accept: 'application/json' - Content-Type: 'application/json' diff --git a/src/cdk/v1/heap/mapping/identify.yaml b/src/cdk/v1/heap/mapping/identify.yaml deleted file mode 100644 index 6b9a237943..0000000000 --- a/src/cdk/v1/heap/mapping/identify.yaml +++ /dev/null @@ -1,17 +0,0 @@ -- destKey: identity - sourceKeys: - - userId - - traits.userId - - traits.id - - context.traits.userId - - context.traits.id - - anonymousId - required: true - -- destKey: properties - sourceKeys: - - traits - - context.traits - metadata: - type: flatJson - required: true diff --git a/src/cdk/v1/heap/mapping/track.yaml b/src/cdk/v1/heap/mapping/track.yaml deleted file mode 100644 index e0ffa2b9a5..0000000000 --- a/src/cdk/v1/heap/mapping/track.yaml +++ /dev/null @@ -1,28 +0,0 @@ -- destKey: identity - sourceKeys: - - userId - - traits.userId - - traits.id - - context.traits.userId - - context.traits.id - - anonymousId - required: true - -- destKey: event - sourceKeys: event - required: true - -- destKey: properties - sourceKeys: properties - metadata: - type: flatJson - -- destKey: timestamp - sourceKeys: - - timestamp - - originalTimestamp - required: false - -- destKey: idempotency_key - sourceKeys: properties.idempotencyKey - required: false diff --git a/src/cdk/v1/heap/transform.js b/src/cdk/v1/heap/transform.js deleted file mode 100644 index 120af3ef90..0000000000 --- a/src/cdk/v1/heap/transform.js +++ /dev/null @@ -1,15 +0,0 @@ -async function commonPostMapper(event, mappedPayload) { - const { destination } = event; - const payload = mappedPayload; - if (payload.properties && payload.properties.idempotencyKey) { - delete payload.properties.idempotencyKey; - } - const responseBody = { - ...payload, - app_id: destination.Config.appId, - }; - - return responseBody; // this flows onto the next stage in the yaml -} - -module.exports = { commonPostMapper }; diff --git a/src/cdk/v1/kochava/config.yaml b/src/cdk/v1/kochava/config.yaml deleted file mode 100644 index 90ae837fae..0000000000 --- a/src/cdk/v1/kochava/config.yaml +++ /dev/null @@ -1,15 +0,0 @@ -message: - supportedMessageTypes: - - screen - - track - default: - transformation: - mapperPath: ./mappings/default.yaml - postMapper: - name: processExtraPayloadParams - response: - endpoint: https://control.kochava.com/track/json - userId: '{{ message.anonymousId }}' - format: JSON - method: POST - headers: {} diff --git a/src/cdk/v1/kochava/mappings/default.yaml b/src/cdk/v1/kochava/mappings/default.yaml deleted file mode 100644 index c17292d40f..0000000000 --- a/src/cdk/v1/kochava/mappings/default.yaml +++ /dev/null @@ -1,49 +0,0 @@ -- destKey: data.event_data - sourceKeys: - - properties - metadata: - defaultValue: {} - -- destKey: kochava_app_id - sourceKeys: apiKey - context: destConfig - -- destKey: kochava_device_id - sourceKeys: - - context.device.id - - anonymousId - -- destKey: data.usertime - sourceKeys: - - timestamp - - originalTimestamp - metadata: - type: timestamp - -- destKey: data.app_version - sourceKeys: context.app.build - -- destKey: data.origination_ip - sourceKeys: - - context.ip - - request_ip - -- destKey: data.app_name - sourceKeys: context.app.name - -- destKey: data.app_short_string - sourceKeys: context.app.version - -- destKey: data.locale - sourceKeys: context.locale - -- destKey: data.os_version - sourceKeys: context.os.version - -- destKey: data.screen_dpi - sourceKeys: context.screen.density - -- destKey: action - sourceKeys: rudderAction # This will not be available - metadata: - defaultValue: 'event' diff --git a/src/cdk/v1/kochava/transform.js b/src/cdk/v1/kochava/transform.js deleted file mode 100644 index 504981aa6a..0000000000 --- a/src/cdk/v1/kochava/transform.js +++ /dev/null @@ -1,78 +0,0 @@ -const { Utils } = require('rudder-transformer-cdk'); - -const eventNameMapping = { - 'product added': 'Add to Cart', - 'product added to wishlist': 'Add to Wishlist', - 'checkout started': 'Checkout Start', - 'order completed': 'Purchase', - 'product reviewed': 'Rating', - 'products searched': 'Search', -}; - -function processExtraPayloadParams(event, mappedPayload) { - const clonedMappedPayload = { ...mappedPayload }; - const { message } = event; - let eventName = message.event; - const eventData = message.properties || {}; - switch (message.type.toLowerCase()) { - case 'screen': - eventName = 'screen view'; - if (message.properties && message.properties.name) { - eventName += ` ${message.properties.name}`; - } - break; - case 'track': - if (eventName) { - const evName = eventName.toLowerCase(); - if (eventNameMapping[evName] !== undefined) { - eventName = eventNameMapping[evName]; - } - } - break; - default: - break; - } - - const extraParams = { - // This kind of formatting multiple fields into a single one - // is currently not supported in cdk - app_tracking_transparency: { - att: message.context?.device?.attTrackingStatus === 3 || false, - }, - device_ver: - message.context?.device?.model && message.context?.os?.version - ? `${message.context?.device?.model}-${message.context?.os?.name}-${message.context?.os?.version}` - : '', - device_ids: { - idfa: - message.context?.os?.name && Utils.isAppleFamily(message.context?.os?.name) - ? message.context?.device?.advertisingId || '' - : '', - idfv: - message.context?.os?.name && Utils.isAppleFamily(message.context?.os?.name) - ? message.context?.device?.id || message.anonymousId || '' - : '', - adid: - message.context?.os?.name && message.context.os.name.toLowerCase() === 'android' - ? message.context?.device?.advertisingId || '' - : '', - android_id: - message.context?.os?.name && message.context.os.name.toLowerCase() === 'android' - ? message.context?.device?.id || message.anonymousId || '' - : '', - }, - event_name: eventName, - device_ua: message.context?.userAgent || '', - currency: eventData?.currency || 'USD', - }; - clonedMappedPayload.data = { ...clonedMappedPayload.data, ...extraParams }; - // Note: "defaultValue" cannot be empty string hence had to manually set it here since kochava requires it - if (Utils.getValueFromMessage(message, 'context.os.version') === '') { - clonedMappedPayload.data.os_version = ''; - } - return clonedMappedPayload; -} - -module.exports = { - processExtraPayloadParams, -}; diff --git a/src/cdk/v1/lytics/config.yaml b/src/cdk/v1/lytics/config.yaml deleted file mode 100644 index 14f2f79ddb..0000000000 --- a/src/cdk/v1/lytics/config.yaml +++ /dev/null @@ -1,53 +0,0 @@ -message: - supportedMessageTypes: - - identify - - page - - screen - - track - identify: - transformation: - mapperPath: ./mappings/identify.yaml - postMapper: - name: cleanResponse - response: - endpoint: 'https://api.lytics.io/collect/json/{{destConfig.stream}}?access_token={{destConfig.apiKey}}' - method: POST - format: JSON - headers: - Content-Type: application/json - - page: - transformation: - mapperPath: ./mappings/page-screen.yaml - postMapper: - name: cleanResponse - response: - endpoint: 'https://api.lytics.io/collect/json/{{destConfig.stream}}?access_token={{destConfig.apiKey}}' - method: POST - format: JSON - headers: - Content-Type: application/json - - screen: - transformation: - mapperPath: ./mappings/page-screen.yaml - postMapper: - name: cleanResponse - response: - endpoint: 'https://api.lytics.io/collect/json/{{destConfig.stream}}?access_token={{destConfig.apiKey}}' - method: POST - format: JSON - headers: - Content-Type: application/json - - track: - transformation: - mapperPath: ./mappings/track.yaml - postMapper: - name: cleanResponse - response: - endpoint: 'https://api.lytics.io/collect/json/{{destConfig.stream}}?access_token={{destConfig.apiKey}}' - method: POST - format: JSON - headers: - Content-Type: application/json diff --git a/src/cdk/v1/lytics/mappings/identify.yaml b/src/cdk/v1/lytics/mappings/identify.yaml deleted file mode 100644 index 388660c3c4..0000000000 --- a/src/cdk/v1/lytics/mappings/identify.yaml +++ /dev/null @@ -1,29 +0,0 @@ -- destKey: user_id - sourceKeys: - - 'userId' - - 'traits.userId' - - 'traits.id' - - 'context.traits.userId' - - 'context.traits.id' - - 'anonymousId' - -- destKey: '...' - sourceKeys: - - 'traits' - - 'context.traits' - metadata: - type: flatJson - -- destKey: first_name - sourceKeys: - - traits.firstName - - traits.firstname - - context.traits.firstName - - context.traits.firstname - -- destKey: last_name - sourceKeys: - - traits.lastName - - traits.lastname - - context.traits.lastName - - context.traits.lastname diff --git a/src/cdk/v1/lytics/mappings/page-screen.yaml b/src/cdk/v1/lytics/mappings/page-screen.yaml deleted file mode 100644 index 78fada65f0..0000000000 --- a/src/cdk/v1/lytics/mappings/page-screen.yaml +++ /dev/null @@ -1,17 +0,0 @@ -- destKey: event - sourceKeys: name - -- destKey: '...' - sourceKeys: properties - metadata: - type: flatJson - -- destKey: first_name - sourceKeys: - - properties.firstName - - properties.firstname - -- destKey: last_name - sourceKeys: - - properties.lastName - - properties.lastname diff --git a/src/cdk/v1/lytics/mappings/track.yaml b/src/cdk/v1/lytics/mappings/track.yaml deleted file mode 100644 index fdc24f16fc..0000000000 --- a/src/cdk/v1/lytics/mappings/track.yaml +++ /dev/null @@ -1,17 +0,0 @@ -- destKey: _e - sourceKeys: event - -- destKey: '...' - sourceKeys: properties - metadata: - type: flatJson - -- destKey: first_name - sourceKeys: - - properties.firstName - - properties.firstname - -- destKey: last_name - sourceKeys: - - properties.lastName - - properties.lastname diff --git a/src/cdk/v1/lytics/transform.js b/src/cdk/v1/lytics/transform.js deleted file mode 100644 index e31d0733c6..0000000000 --- a/src/cdk/v1/lytics/transform.js +++ /dev/null @@ -1,23 +0,0 @@ -const { Utils } = require('rudder-transformer-cdk'); - -const forFirstName = ['firstname', 'firstName']; -const forLastName = ['lastname', 'lastName']; - -function cleanResponse(event, mappedPayload) { - // Here basically we have a requirement wherein - // we have to remove certain properties from the final payload - const flattenedPayload = Utils.removeUndefinedAndNullValues(mappedPayload); - forFirstName.forEach((key) => { - if (flattenedPayload[key]) { - delete flattenedPayload[key]; - } - }); - forLastName.forEach((key) => { - if (flattenedPayload[key]) { - delete flattenedPayload[key]; - } - }); - return flattenedPayload; -} - -module.exports = { cleanResponse }; diff --git a/src/cdk/v1/new_relic/config.yaml b/src/cdk/v1/new_relic/config.yaml deleted file mode 100644 index d6f04b989f..0000000000 --- a/src/cdk/v1/new_relic/config.yaml +++ /dev/null @@ -1,15 +0,0 @@ -message: - supportedMessageTypes: - - track - track: - transformation: - mapperPath: ./mapping/track.yaml - postMapper: - name: 'commonPostMapper' - response: - endpoint: '{{ rudderContext.endpoint }}' - method: POST - format: JSON - headers: - Api-Key: '{{ rudderContext.insertKey }}' - Content-Type: 'application/json' diff --git a/src/cdk/v1/new_relic/mapping/track.yaml b/src/cdk/v1/new_relic/mapping/track.yaml deleted file mode 100644 index 6a4a9f04f3..0000000000 --- a/src/cdk/v1/new_relic/mapping/track.yaml +++ /dev/null @@ -1,14 +0,0 @@ -- destKey: 'event' - sourceKeys: event - -- destKey: '...' - sourceKeys: properties - metadata: - type: flatJson - -- destKey: 'timestamp' - sourceKeys: - - 'timestamp' - - 'originalTimestamp' - metadata: - type: 'secondTimestamp' diff --git a/src/cdk/v1/new_relic/transform.js b/src/cdk/v1/new_relic/transform.js deleted file mode 100644 index 43cebd548f..0000000000 --- a/src/cdk/v1/new_relic/transform.js +++ /dev/null @@ -1,112 +0,0 @@ -/* eslint-disable no-param-reassign */ -const { isBoolean } = require('lodash'); -const { Utils } = require('rudder-transformer-cdk'); - -function commonPostMapper(event, mappedPayload, rudderContext) { - const { message, destination } = event; - const payload = mappedPayload; - const destConfig = destination.Config; - const reservedNrqlWords = [ - 'ago', - 'and', - 'as', - 'auto', - 'begin', - 'begintime', - 'compare', - 'day', - 'days', - 'end', - 'endtime', - 'explain', - 'facet', - 'from', - 'hour', - 'hours', - 'in', - 'is', - 'like', - 'limit', - 'minute', - 'minutes', - 'month', - 'months', - 'not', - 'null', - 'offset', - 'or', - 'raw', - 'second', - 'seconds', - 'select', - 'since', - 'timeseries', - 'until', - 'week', - 'weeks', - 'where', - 'with', - ]; - const reservedWords = ['accountId', 'appId', 'eventType']; - - Object.keys(payload).forEach((item) => { - if (reservedNrqlWords.includes(item) && isBoolean(payload[item])) { - const str = `'${item}'`; - payload[str] = payload[item].toString(); - delete payload[item]; - } else if (reservedNrqlWords.includes(item)) { - const str = `'${item}'`; - payload[str] = payload[item]; - delete payload[item]; - } else if (reservedWords.includes(item)) { - delete payload[item]; - } else if (isBoolean(payload[item])) { - payload[item] = payload[item].toString(); - } - }); - - // If user provided a eventType name, then we will include it in the payload directly - if (destConfig.customEventType) { - payload.eventType = destConfig.customEventType; - } else { - // If eventType is not provided by the user, by default it is 'rudderstack' - payload.eventType = 'rudderstack'; - } - - // If user enables 'sendUserIdanonymousId', then we include userId and anonymousId into the payload - if (destConfig.sendUserIdanonymousId) { - if (message.userId || message.context.userId || message.context.id) { - payload.userId = message.userId; - } - if (message.anonymousId) { - payload.anonymousId = message.anonymousId; - } - } - - // Upon users choice for data center, we are updating the endpoint accordingly - rudderContext.endpoint = - destConfig.dataCenter === 'eu' - ? `https://insights-collector.eu01.nr-data.net/v1/accounts/${destConfig.accountId}/events` - : `https://insights-collector.newrelic.com/v1/accounts/${destConfig.accountId}/events`; - - rudderContext.insertKey = destConfig.insertKey; - - // If user enables 'sendDeviceContext', then we are delimiting context fields and include them in responseBody - let flattenedContext = {}; - let responseBody; - if (destConfig.sendDeviceContext) { - flattenedContext = Utils.flattenJson(message.context); - responseBody = { - ...payload, - ...flattenedContext, - }; - } else { - responseBody = { - ...payload, - }; - } - - return responseBody; // this flows onto the next stage in the yaml -} - -module.exports = { commonPostMapper }; diff --git a/src/cdk/v1/statsig/config.yaml b/src/cdk/v1/statsig/config.yaml deleted file mode 100644 index 467629faa1..0000000000 --- a/src/cdk/v1/statsig/config.yaml +++ /dev/null @@ -1,19 +0,0 @@ -message: - supportedMessageTypes: - - identify - - page - - screen - - alias - - track - - group - default: - transformation: - spreadMessage: true - response: - endpoint: 'https://api.statsig.com/v1/webhooks/rudderstack' - method: POST - # based on the format set, we can formulate - format: JSON - headers: - STATSIG-API-KEY: '{{ destConfig.secretKey }}' - content-type: 'application/json' diff --git a/src/cdk/v1/userlist/config.yaml b/src/cdk/v1/userlist/config.yaml deleted file mode 100644 index 19df913fef..0000000000 --- a/src/cdk/v1/userlist/config.yaml +++ /dev/null @@ -1,19 +0,0 @@ -message: - supportedMessageTypes: - - identify - - track - - group - default: - transformation: - # If the mapping mentioned in this yaml doesn't work - # we can make use of postMapper tag and apply the required transformation - mapperPath: ./mapping/userlist_default.yaml - spreadMessage: true - response: - endpoint: 'https://incoming.userlist.com/rudderstack/events' - method: POST - format: JSON - statusCode: 200 # probably this can be removed also. - headers: - Authorization: 'Push {{destConfig.pushKey}}' - Content-Type: 'application/json' diff --git a/src/cdk/v1/userlist/mapping/userlist_default.yaml b/src/cdk/v1/userlist/mapping/userlist_default.yaml deleted file mode 100644 index 0d9b4acade..0000000000 --- a/src/cdk/v1/userlist/mapping/userlist_default.yaml +++ /dev/null @@ -1,8 +0,0 @@ -- destKey: type - sourceKeys: type - metadata: - type: toLowerCase -- destKey: userId - sourceKeys: userIdOnly - sourceFromGenericMap: true - required: true diff --git a/src/cdk/v1/variance/config.yaml b/src/cdk/v1/variance/config.yaml deleted file mode 100644 index 9a38723206..0000000000 --- a/src/cdk/v1/variance/config.yaml +++ /dev/null @@ -1,13 +0,0 @@ -message: - default: - transformation: - spreadMessage: true - mapperPath: ./mappings/default.yaml - response: - format: JSON - method: POST - endpoint: '{{ destConfig.webhookUrl }}' - headers: - authorization: '{{ destConfig.authHeader }}' - content-type: 'application/json' - userId: '{{ message.anonymousId }}' diff --git a/src/cdk/v1/variance/mappings/default.yaml b/src/cdk/v1/variance/mappings/default.yaml deleted file mode 100644 index 5a23b4a931..0000000000 --- a/src/cdk/v1/variance/mappings/default.yaml +++ /dev/null @@ -1,4 +0,0 @@ -- destKey: context.ip - sourceKeys: - - 'context.ip' - - 'request_ip' diff --git a/src/cdk/v1/vitally/config.yaml b/src/cdk/v1/vitally/config.yaml deleted file mode 100644 index c7edbacca2..0000000000 --- a/src/cdk/v1/vitally/config.yaml +++ /dev/null @@ -1,15 +0,0 @@ -message: - supportedMessageTypes: - - track - - identify - - group - default: - transformation: - spreadMessage: true - response: - format: JSON - method: POST - endpoint: 'https://api.vitally.io/rudderstack' - headers: - authorization: 'Basic {{ destConfig.apiKeyVitally }}' - content-type: 'application/json' diff --git a/src/cdk/v1/zapier/config.yaml b/src/cdk/v1/zapier/config.yaml deleted file mode 100644 index 52f9317587..0000000000 --- a/src/cdk/v1/zapier/config.yaml +++ /dev/null @@ -1,16 +0,0 @@ -message: - supportedMessageTypes: - - track - - page - - screen - default: - transformation: - spreadMessage: true - postMapper: - name: 'commonPostMapper' - response: - format: JSON - method: POST - endpoint: '{{ rudderContext.zapUrl }}' - headers: - content-type: 'application/json' diff --git a/src/cdk/v1/zapier/transform.js b/src/cdk/v1/zapier/transform.js deleted file mode 100644 index d99c3af315..0000000000 --- a/src/cdk/v1/zapier/transform.js +++ /dev/null @@ -1,43 +0,0 @@ -/* eslint-disable no-param-reassign */ -const { getHashFromArray } = require('../../../v0/util'); - -function commonPostMapper(event, mappedPayload, rudderContext) { - const { message, destination } = event; - const destConfig = destination.Config; - - const { trackEventsToZap, pageScreenEventsToZap, zapUrl } = destConfig; - - const trackEventsMap = getHashFromArray(trackEventsToZap); - const pageScreenEventsMap = getHashFromArray(pageScreenEventsToZap); - - // default Zap URL - rudderContext.zapUrl = zapUrl; - - // track event - if (message?.type === 'track') { - const eventName = message?.event; - // checking if the event is present track events mapping - if (trackEventsMap[eventName]) { - // if present, we are updating the zapUrl(with one specified in the mapping) - rudderContext.zapUrl = trackEventsMap[eventName]; - } - } - - // page/screen event - if (message?.type === 'page' || message?.type === 'screen') { - const pageScreenName = message?.name; - // checking if the event is present page/screen events mapping - if (pageScreenEventsMap[pageScreenName]) { - // if present, we are updating the zapUrl(with the one specified in the mapping) - rudderContext.zapUrl = pageScreenEventsMap[pageScreenName]; - } - } - - const responseBody = { - ...mappedPayload, - }; - - return responseBody; // this flows onto the next stage in the yaml -} - -module.exports = { commonPostMapper }; diff --git a/src/cdk/v2/destinations/emarsys/utils.test.js b/src/cdk/v2/destinations/emarsys/utils.test.js index 3802567ecb..72a86a1529 100644 --- a/src/cdk/v2/destinations/emarsys/utils.test.js +++ b/src/cdk/v2/destinations/emarsys/utils.test.js @@ -1,4 +1,3 @@ -const { EVENT_TYPE } = require('rudder-transformer-cdk/build/constants'); const { buildIdentifyPayload, buildGroupPayload, @@ -92,7 +91,7 @@ describe('Emarsys utils', () => { const result = buildIdentifyPayload(message, destination); - expect(result.eventType).toBe(EVENT_TYPE.IDENTIFY); + expect(result.eventType).toBe('identify'); expect(result.destinationPayload).toEqual(expectedPayload); }); @@ -185,7 +184,7 @@ describe('Emarsys utils', () => { const result = buildIdentifyPayload(message, destination); - expect(result.eventType).toBe(EVENT_TYPE.IDENTIFY); + expect(result.eventType).toBe('identify'); expect(result.destinationPayload).toEqual(expectedPayload); }); }); diff --git a/src/cdk/v2/destinations/rakuten/utils.js b/src/cdk/v2/destinations/rakuten/utils.js index ef6b197db7..480812b5b7 100644 --- a/src/cdk/v2/destinations/rakuten/utils.js +++ b/src/cdk/v2/destinations/rakuten/utils.js @@ -1,5 +1,4 @@ -const { InstrumentationError } = require('@rudderstack/integrations-lib'); -const { isDefinedAndNotNull } = require('rudder-transformer-cdk/build/utils'); +const { InstrumentationError, isDefinedAndNotNull } = require('@rudderstack/integrations-lib'); const { mappingConfig, ConfigCategories, diff --git a/src/helpers/__tests__/serviceSelector.test.ts b/src/helpers/__tests__/serviceSelector.test.ts index c48d6bbe8b..0dab906f7a 100644 --- a/src/helpers/__tests__/serviceSelector.test.ts +++ b/src/helpers/__tests__/serviceSelector.test.ts @@ -1,9 +1,8 @@ -import { ServiceSelector } from '../serviceSelector'; import { INTEGRATION_SERVICE } from '../../routes/utils/constants'; -import { ProcessorTransformationRequest } from '../../types/index'; -import { CDKV1DestinationService } from '../../services/destination/cdkV1Integration'; import { CDKV2DestinationService } from '../../services/destination/cdkV2Integration'; import { NativeIntegrationDestinationService } from '../../services/destination/nativeIntegration'; +import { ProcessorTransformationRequest } from '../../types/index'; +import { ServiceSelector } from '../serviceSelector'; afterEach(() => { jest.clearAllMocks(); @@ -27,20 +26,6 @@ describe('ServiceSelector Service', () => { ); }); - test('isCdkDestination should return true', async () => { - const destinationDefinitionConfig = { - cdkEnabled: true, - }; - expect(ServiceSelector['isCdkDestination'](destinationDefinitionConfig)).toBe(true); - }); - - test('isCdkDestination should return false', async () => { - const destinationDefinitionConfig = { - cdkEnabledXYZ: true, - }; - expect(ServiceSelector['isCdkDestination'](destinationDefinitionConfig)).toBe(false); - }); - test('isCdkV2Destination should return true', async () => { const destinationDefinitionConfig = { cdkV2Enabled: true, @@ -55,23 +40,6 @@ describe('ServiceSelector Service', () => { expect(ServiceSelector['isCdkV2Destination'](destinationDefinitionConfig)).toBe(false); }); - test('getPrimaryDestinationService should return cdk v1 dest service', async () => { - const events = [ - { - destination: { - DestinationDefinition: { - Config: { - cdkEnabled: true, - }, - }, - }, - }, - ] as ProcessorTransformationRequest[]; - expect(ServiceSelector['getPrimaryDestinationService'](events)).toBeInstanceOf( - CDKV1DestinationService, - ); - }); - test('getPrimaryDestinationService should return cdk v2 dest service', async () => { const events = [ { diff --git a/src/helpers/serviceSelector.ts b/src/helpers/serviceSelector.ts index faa1c58240..a1f6a43349 100644 --- a/src/helpers/serviceSelector.ts +++ b/src/helpers/serviceSelector.ts @@ -1,29 +1,23 @@ import { PlatformError } from '@rudderstack/integrations-lib'; -import { ProcessorTransformationRequest, RouterTransformationRequestData } from '../types/index'; +import { DestinationService } from '../interfaces/DestinationService'; +import { SourceService } from '../interfaces/SourceService'; import { INTEGRATION_SERVICE } from '../routes/utils/constants'; -import { CDKV1DestinationService } from '../services/destination/cdkV1Integration'; +import { ComparatorService } from '../services/comparator'; import { CDKV2DestinationService } from '../services/destination/cdkV2Integration'; -import { DestinationService } from '../interfaces/DestinationService'; import { NativeIntegrationDestinationService } from '../services/destination/nativeIntegration'; -import { SourceService } from '../interfaces/SourceService'; import { NativeIntegrationSourceService } from '../services/source/nativeIntegration'; -import { ComparatorService } from '../services/comparator'; +import { ProcessorTransformationRequest, RouterTransformationRequestData } from '../types/index'; import { FixMe } from '../util/types'; export class ServiceSelector { private static serviceMap: Map = new Map(); private static services = { - [INTEGRATION_SERVICE.CDK_V1_DEST]: CDKV1DestinationService, [INTEGRATION_SERVICE.CDK_V2_DEST]: CDKV2DestinationService, [INTEGRATION_SERVICE.NATIVE_DEST]: NativeIntegrationDestinationService, [INTEGRATION_SERVICE.NATIVE_SOURCE]: NativeIntegrationSourceService, }; - private static isCdkDestination(destinationDefinitionConfig: FixMe) { - return !!destinationDefinitionConfig?.cdkEnabled; - } - private static isCdkV2Destination(destinationDefinitionConfig: FixMe) { return Boolean(destinationDefinitionConfig?.cdkV2Enabled); } @@ -68,9 +62,6 @@ export class ServiceSelector { ): DestinationService { const destinationDefinitionConfig: FixMe = events[0]?.destination?.DestinationDefinition?.Config; - if (this.isCdkDestination(destinationDefinitionConfig)) { - return this.fetchCachedService(INTEGRATION_SERVICE.CDK_V1_DEST); - } if (this.isCdkV2Destination(destinationDefinitionConfig)) { return this.fetchCachedService(INTEGRATION_SERVICE.CDK_V2_DEST); } diff --git a/src/legacy/router.js b/src/legacy/router.js index 6cf035350c..60f786e225 100644 --- a/src/legacy/router.js +++ b/src/legacy/router.js @@ -18,7 +18,6 @@ const { isNonFuncObject, getMetadata, generateErrorObject, - isCdkDestination, checkAndCorrectUserId, } = require('../v0/util'); const { processDynamicConfig } = require('../util/dynamicConfig'); @@ -35,12 +34,9 @@ const { sendViolationMetrics, constructValidationErrors, } = require('../util/utils'); -const { processCdkV1 } = require('../cdk/v1/handler'); const { extractLibraries } = require('../util/customTransformer'); const { getCompatibleStatusCode } = require('../adapters/utils/networkUtils'); -const CDK_V1_DEST_PATH = 'cdk/v1'; - const transformerMode = process.env.TRANSFORMER_MODE; const startDestTransformer = transformerMode === 'destination' || !transformerMode; @@ -157,14 +153,11 @@ async function handleDest(ctx, version, destination) { parsedEvent.request = { query: reqParams }; parsedEvent = processDynamicConfig(parsedEvent); let respEvents; - if (isCdkDestination(parsedEvent)) { - respEvents = await processCdkV1(destination, parsedEvent); - } else { - if (destHandler === null) { - destHandler = getDestHandler(version, destination); - } - respEvents = await handleV0Destination(destHandler.process, [parsedEvent]); + if (destHandler === null) { + destHandler = getDestHandler(version, destination); } + respEvents = await handleV0Destination(destHandler.process, [parsedEvent]); + if (respEvents) { if (!Array.isArray(respEvents)) { respEvents = [respEvents]; @@ -185,12 +178,8 @@ async function handleDest(ctx, version, destination) { } catch (error) { logger.error(error); - let implementation = tags.IMPLEMENTATIONS.NATIVE; - let errCtx = 'Processor Transformation'; - if (isCdkDestination(event)) { - errCtx = `CDK - ${errCtx}`; - implementation = tags.IMPLEMENTATIONS.CDK_V1; - } + const implementation = tags.IMPLEMENTATIONS.NATIVE; + const errCtx = 'Processor Transformation'; const errObj = generateErrorObject(error, { [tags.TAG_NAMES.DEST_TYPE]: destination.toUpperCase(), @@ -432,7 +421,6 @@ async function routerHandleDest(ctx) { if (startDestTransformer) { SUPPORTED_VERSIONS.forEach((version) => { const destinations = getIntegrations(path.resolve(__dirname, `../${version}/destinations`)); - destinations.push(...getIntegrations(path.resolve(__dirname, `../${CDK_V1_DEST_PATH}`))); destinations.forEach((destination) => { // eg. v0/destinations/ga router.post(`/${version}/destinations/${destination}`, async (ctx) => { diff --git a/src/services/destination/cdkV1Integration.ts b/src/services/destination/cdkV1Integration.ts deleted file mode 100644 index c6e60f5857..0000000000 --- a/src/services/destination/cdkV1Integration.ts +++ /dev/null @@ -1,134 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ -import { ConfigFactory, Executor, RudderBaseConfig } from 'rudder-transformer-cdk'; -import path from 'path'; -import { TransformationError } from '@rudderstack/integrations-lib'; -import { DestinationService } from '../../interfaces/DestinationService'; -import { - DeliveryV0Response, - ErrorDetailer, - MetaTransferObject, - ProcessorTransformationRequest, - ProcessorTransformationResponse, - RouterTransformationRequestData, - RouterTransformationResponse, - UserDeletionRequest, - UserDeletionResponse, - ProxyRequest, - DeliveryV1Response, -} from '../../types/index'; -import { DestinationPostTransformationService } from './postTransformation'; -import tags from '../../v0/util/tags'; -import { getErrorInfo } from '../../cdk/v1/handler'; -import { CatchErr } from '../../util/types'; - -export class CDKV1DestinationService implements DestinationService { - public init() { - ConfigFactory.init({ - basePath: path.resolve(__dirname, '../../cdk/v1'), - loggingMode: 'production', - }); - } - - public getName(): string { - return 'CDK_V1'; - } - - public getTags( - destType: string, - destinationId: string, - workspaceId: string, - feature: string, - ): MetaTransferObject { - const metaTO = { - errorDetails: { - destType: destType.toUpperCase(), - module: tags.MODULES.DESTINATION, - implementation: tags.IMPLEMENTATIONS.CDK_V1, - feature, - destinationId, - workspaceId, - } as ErrorDetailer, - errorContext: '[CDKV1 Integration Service] Failure During Proc Transform', - } as MetaTransferObject; - return metaTO; - } - - private async processCDKV1(event: any, tfConfig: RudderBaseConfig): Promise { - try { - const respEvents = await Executor.execute(event, tfConfig); - return respEvents; - } catch (error) { - throw getErrorInfo(error); - } - } - - public async doProcessorTransformation( - events: ProcessorTransformationRequest[], - destinationType: string, - _version: string, - _requestMetadata: NonNullable, - ): Promise { - const tfConfig = await ConfigFactory.getConfig(destinationType); - const respList: ProcessorTransformationResponse[][] = await Promise.all( - events.map(async (event) => { - try { - const transformedPayloads: any = await this.processCDKV1(event as any, tfConfig); - // We are not passing destinationHandler to post processor as we don't have post processing in CDK flows - return DestinationPostTransformationService.handleProcessorTransformSucessEvents( - event, - transformedPayloads, - undefined, - ); - } catch (error: CatchErr) { - const metaTO = this.getTags( - destinationType, - event.metadata.destinationId, - event.metadata.workspaceId, - tags.FEATURES.PROCESSOR, - ); - metaTO.metadata = event.metadata; - const erroredResp = - DestinationPostTransformationService.handleProcessorTransformFailureEvents( - error, - metaTO, - ); - return [erroredResp]; - } - }), - ); - return respList.flat(); - } - - public doRouterTransformation( - _events: RouterTransformationRequestData[], - _destinationType: string, - _version: string, - _requestMetadata: NonNullable, - ): Promise { - throw new TransformationError('CDKV1 Does not Implement Router Transform Routine'); - } - - public doBatchTransformation( - _events: RouterTransformationRequestData[], - _destinationType: string, - _version: any, - _requestMetadata: NonNullable, - ): RouterTransformationResponse[] { - throw new TransformationError('CDKV1 Does not Implement Batch Transform Routine'); - } - - public deliver( - _event: ProxyRequest, - _destinationType: string, - _requestMetadata: NonNullable, - ): Promise { - throw new TransformationError('CDV1 Does not Implement Delivery Routine'); - } - - public processUserDeletion( - requests: UserDeletionRequest[], - rudderDestInfo: string, - ): Promise { - throw new TransformationError('CDV1 Does not Implement Deletion Routine'); - } -} diff --git a/src/util/errorNotifier/bugsnag.js b/src/util/errorNotifier/bugsnag.js index a6a22655ad..f9f37e8234 100644 --- a/src/util/errorNotifier/bugsnag.js +++ b/src/util/errorNotifier/bugsnag.js @@ -1,9 +1,5 @@ /* eslint-disable no-param-reassign */ const Bugsnag = require('@bugsnag/js'); -const { - CustomError: CDKCustomError, - DataValidationError, -} = require('rudder-transformer-cdk/build/error/index'); const stackTraceParser = require('stacktrace-parser'); const { BaseError, @@ -46,8 +42,6 @@ const errorTypesDenyList = [ UnhandledStatusCodeError, UnauthorizedError, NetworkInstrumentationError, - CDKCustomError, - DataValidationError, FilteredEventsError, ]; diff --git a/src/util/types.ts b/src/util/types.ts index bd2836d710..549003f79a 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -7,7 +7,6 @@ export type ContextBodySimple = { destType: string; }; export interface Config { - cdkEnabled?: boolean; cdkV2Enabled?: boolean; comparisonTestEnabeld?: boolean; comparisonService?: string; diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 53d82158c5..fea77a85ce 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -1,4 +1,3 @@ -const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils'); const lodash = require('lodash'); const { NetworkError, @@ -16,6 +15,7 @@ const { defaultBatchRequestConfig, getSuccessRespEvents, defaultPatchRequestConfig, + defaultRequestConfig, } = require('../../util'); const tags = require('../../util/tags'); const { handleHttpRequest } = require('../../../adapters/network'); diff --git a/src/v0/destinations/revenue_cat/transform.js b/src/v0/destinations/revenue_cat/transform.js index 407cb91608..1fc054e578 100644 --- a/src/v0/destinations/revenue_cat/transform.js +++ b/src/v0/destinations/revenue_cat/transform.js @@ -1,5 +1,4 @@ const set = require('set-value'); -const { defaultRequestConfig } = require('rudder-transformer-cdk/build/utils'); const { ConfigurationError, TransformationError, @@ -13,6 +12,7 @@ const { extractCustomFields, defaultGetRequestConfig, getFieldValueFromMessage, + defaultRequestConfig, } = require('../../util'); const { CONFIG_CATEGORIES, diff --git a/src/v0/util/index.js b/src/v0/util/index.js index fa6cc34b70..599c116a8c 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -1625,16 +1625,6 @@ function removeHyphens(str) { return str.replace(/-/g, ''); } -function isCdkDestination(event) { - // TODO: maybe dont need all these checks in place - return ( - event.destination && - event.destination.DestinationDefinition && - event.destination.DestinationDefinition.Config && - event.destination.DestinationDefinition.Config.cdkEnabled - ); -} - /** * This function helps to remove any invalid object values from the config generated by dynamicForm, * dynamicCustomForm, and dynamicSelectForm web app form elements. @@ -2348,7 +2338,6 @@ module.exports = { hashToSha256, isAppleFamily, isBlank, - isCdkDestination, isDefined, isDefinedAndNotNull, isDefinedAndNotNullAndNotEmpty, diff --git a/src/v0/util/tags.js b/src/v0/util/tags.js index dce8c0a338..1fdb5ddef2 100644 --- a/src/v0/util/tags.js +++ b/src/v0/util/tags.js @@ -24,7 +24,6 @@ const MODULES = { const IMPLEMENTATIONS = { NATIVE: 'native', - CDK_V1: 'cdkV1', CDK_V2: 'cdkV2', }; diff --git a/test/__tests__/cdk_postMapper/autopilot.test.js b/test/__tests__/cdk_postMapper/autopilot.test.js deleted file mode 100644 index 0dde490017..0000000000 --- a/test/__tests__/cdk_postMapper/autopilot.test.js +++ /dev/null @@ -1,60 +0,0 @@ -const { - trackPostMapper, - identifyPostMapper -} = require("../../../src/cdk/v1/autopilot/transform"); - -describe("Unit Test for track postMapper", () => { - it("should update the rudderContext with correct endpoint", () => { - const message = { traits: { email: "test@email.com" } }; - const destination = { Config: { triggerId: "sample-trigger-id" } }; - const event = { message, destination }; - const expectedRudderContext = { - endpoint: `https://api2.autopilothq.com/v1/trigger/sample-trigger-id/contact/test@email.com` - }; - const rudderContext = {}; - trackPostMapper(event, {}, rudderContext); - expect(rudderContext).toEqual(expectedRudderContext); - }); -}); - -describe("Unit Test for identify postMapper", () => { - it("should delete fields from traits", () => { - const message = { - traits: { email: "test@email.com", firstName: "firstName" } - }; - const destination = {}; - const event = { message, destination }; - const payload = { someKey: "here" }; - const expected = { contact: { someKey: "here" } }; - const resp = identifyPostMapper(event, payload, {}); - expect(resp).toEqual(expected); - }); - - it("should delete fields from traits and keep custom values", () => { - const message = { - traits: { - email: "test@email.com", - firstName: "firstName", - something: "custom" - } - }; - const destination = {}; - const event = { message, destination }; - const payload = { someKey: "here" }; - const expected = { - contact: { someKey: "here", custom: { something: "custom" } } - }; - const resp = identifyPostMapper(event, payload, {}); - expect(resp).toEqual(expected); - }); - - it("should not throw error on empty traits", () => { - const message = { traits: {} }; - const destination = {}; - const event = { message, destination }; - const payload = { someKey: "here" }; - const expected = { contact: { someKey: "here" } }; - const resp = identifyPostMapper(event, payload, {}); - expect(resp).toEqual(expected); - }); -}); diff --git a/test/__tests__/cdk_postMapper/dcm_floodlight.test.js b/test/__tests__/cdk_postMapper/dcm_floodlight.test.js deleted file mode 100644 index 9bf7563a8d..0000000000 --- a/test/__tests__/cdk_postMapper/dcm_floodlight.test.js +++ /dev/null @@ -1,106 +0,0 @@ -const { postMapper } = require("../../../src/cdk/v1/dcm_floodlight/transform"); - -describe("Unit Test for postMapper", () => { - it("should update the rudderContext with userAgent and valid endpoint", () => { - const message = { - event: "Checkout Started", - type: "track", - properties: { - orderId: 1234, - quantity: 45, - revenue: 800 - }, - context: { - device: { - advertisingId: "2a3e36d172-5e28-45a1-9eda-ce22a3e36d1a" - }, - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" - } - }; - const destination = { - Config: { - advertiserId: "12649566", - activityTag: "", - groupTag: "", - conversionEvents: [ - { - customVariables: [ - { - from: "", - to: "" - } - ], - eventName: "Sign up Completed", - floodlightActivityTag: "signu0", - floodlightGroupTag: "conv01", - salesTag: false - }, - { - customVariables: [ - { - from: "1", - to: "rudder1" - }, - { - from: "2", - to: "akash1" - } - ], - eventName: "Order Complete", - floodlightActivityTag: "order0", - floodlightGroupTag: "conv000", - salesTag: false - }, - { - eventName: "Checkout Started", - floodlightActivityTag: "check0", - floodlightGroupTag: "conv0000", - salesTag: true - }, - { - customVariables: [ - { - from: "1", - to: "rudder2" - }, - { - from: "2", - to: "akash2" - }, - { - from: "3", - to: "friendlyName2" - }, - { - from: "4", - to: "name2" - } - ], - eventName: "Purchase", - floodlightActivityTag: "Pur0", - floodlightGroupTag: "conv111", - salesTag: false - } - ] - } - }; - const event = { message, destination }; - const payload = { - dc_rdid: "T0T0T072-5e28-45a1-9eda-ce22a3e36d1a", - ord: 111, - qty: 999999, - cost: 800, - dc_lat: "true" - }; - const expectedRudderContext = { - userAgent: - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36", - endpoint: - "https://ad.doubleclick.net/ddm/activity/src=12649566;cat=check0;type=conv0000;dc_rdid=T0T0T072-5e28-45a1-9eda-ce22a3e36d1a;ord=111;qty=999999;cost=800;dc_lat=1" - }; - const rudderContext = {}; - postMapper(event, payload, rudderContext); - expect(rudderContext).toEqual(expectedRudderContext); - }); -}); diff --git a/test/__tests__/cdk_postMapper/heap.test.js b/test/__tests__/cdk_postMapper/heap.test.js deleted file mode 100644 index 440cdb2f6b..0000000000 --- a/test/__tests__/cdk_postMapper/heap.test.js +++ /dev/null @@ -1,27 +0,0 @@ -const { commonPostMapper } = require("../../../src/cdk/v1/heap/transform"); - -describe("Unit test cases for heap common post mapper", () => { - let payload, event, rudderContext; - beforeEach(() => { - payload = { should: "remain", properties: { idempotencyKey: "someKey" } }; - event = { message: {}, destination: { Config: { appId: "app_id" } } }; - rudderContext = {}; - }); - - it("should delete idempotency key from mappedPayload", async () => { - const expectedOutput = { - should: "remain", - app_id: "app_id", - properties: {} - }; - await expect( - commonPostMapper(event, payload, rudderContext) - ).resolves.toMatchObject(expectedOutput); - }); - - it("should mutate the mappedPayload on calling postMapper", async () => { - await expect( - commonPostMapper(event, payload, rudderContext) - ).resolves.toMatchObject({ should: "remain", properties: {} }); - }); -}); diff --git a/test/__tests__/cdk_postMapper/kochava.test.js b/test/__tests__/cdk_postMapper/kochava.test.js deleted file mode 100644 index 67f09faff3..0000000000 --- a/test/__tests__/cdk_postMapper/kochava.test.js +++ /dev/null @@ -1,110 +0,0 @@ -const { - processExtraPayloadParams -} = require("../../../src/cdk/v1/kochava/transform"); - -describe("Unit Test for kochava postMapper", () => { - it("should set all the default values", () => { - const event = { - destination: { - Config: { - apiKey: "" - }, - DestinationDefinition: { - Config: { - cdkEnabled: true - }, - DisplayName: "Kochava", - ID: "1WTpBSTiL3iAUHUdW7rHT4sawgU", - Name: "KOCHAVA" - }, - Enabled: true, - ID: "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - Name: "kochava test", - Transformations: [] - }, - message: { - anonymousId: "sampath", - channel: "web", - context: {}, - event: "product added", - properties: { name: "sampath" }, - type: "track", - event: "eventName" - } - }; - const expected = { - data: { - app_tracking_transparency: { - att: false - }, - device_ver: "", - device_ids: { - idfa: "", - idfv: "", - adid: "", - android_id: "" - }, - event_name: "eventName", - device_ua: "", - currency: "USD" - } - }; - const resp = processExtraPayloadParams(event, {}, {}); - expect(resp).toEqual(expected); - }); - - it("should set all the default values and os_version as empty string", () => { - const event = { - destination: { - Config: { - apiKey: "" - }, - DestinationDefinition: { - Config: { - cdkEnabled: true - }, - DisplayName: "Kochava", - ID: "1WTpBSTiL3iAUHUdW7rHT4sawgU", - Name: "KOCHAVA" - }, - Enabled: true, - ID: "1WTpIHpH7NTBgjeiUPW1kCUgZGI", - Name: "kochava test", - Transformations: [] - }, - message: { - anonymousId: "sampath", - channel: "web", - context: { - os: { - version: "" - } - }, - event: "product added", - properties: { name: "sampath" }, - type: "track", - event: "eventName" - } - }; - const expected = { - data: { - app_tracking_transparency: { - att: false - }, - device_ver: "", - device_ids: { - idfa: "", - idfv: "", - adid: "", - android_id: "" - }, - event_name: "eventName", - device_ua: "", - currency: "USD", - os_version: "" - } - }; - const resp = processExtraPayloadParams(event, {}, {}); - expect(resp).toEqual(expected); - }); -}); diff --git a/test/__tests__/cdk_postMapper/lytics.test.js b/test/__tests__/cdk_postMapper/lytics.test.js deleted file mode 100644 index 0b005155dc..0000000000 --- a/test/__tests__/cdk_postMapper/lytics.test.js +++ /dev/null @@ -1,14 +0,0 @@ -const { cleanResponse } = require("../../../src/cdk/v1/lytics/transform"); - -describe("Test for Lytics common post mapper", () => { - it("should remove both first name and last name from mappedPayload", () => { - const mappedPayload = { - firstname: "somename", - lastName: "lastName", - some: "otherKey" - }; - const resp = cleanResponse({}, mappedPayload, {}); - const expected = { some: "otherKey" }; - expect(resp).toEqual(expected); - }); -}); diff --git a/test/__tests__/cdk_postMapper/new_relic.test.js b/test/__tests__/cdk_postMapper/new_relic.test.js deleted file mode 100644 index 3aab6aaf67..0000000000 --- a/test/__tests__/cdk_postMapper/new_relic.test.js +++ /dev/null @@ -1,86 +0,0 @@ -const { even } = require("is"); -const { commonPostMapper } = require("../../../src/cdk/v1/new_relic/transform"); - -describe("Unit test cases for new_relic common post mapper", () => { - let payload, event, rudderContext, expectedOutput; - beforeEach(() => { - payload = { - event: "first", - timestamp: 1580602989, - abc: "123", - key: 124, - auto: true, - eventType: "standard" - }; - event = { - message: { - userId: "identified user id", - anonymousId: "anon-id-new", - context: { - traits: { trait1: "new-val" }, - ip: "14.5.67.21", - library: { name: "http" } - } - }, - destination: { - Config: { - accountId: "12345", - insertKey: "11111122702j2a2U2K2C7H", - dataCenter: "us", - customEventType: "", - sendDeviceContext: false, - sendUserIdanonymousId: true - } - } - }; - rudderContext = {}; - expectedOutput = { - event: "first", - timestamp: 1580602989, - abc: "123", - key: 124, - eventType: "rudderstack", - userId: "identified user id", - anonymousId: "anon-id-new", - "'auto'": "true" - }; - }); - - it('If user did not provid a eventType name, then we will include "rudderstack" in the payload directly', () => { - // event is manupulated to suit the test-cases - event.destination.Config.sendDeviceContext = false; - expect(commonPostMapper(event, payload, rudderContext)).toEqual( - expectedOutput - ); - }); - - it("If user provides a eventType name, then we will include it in the payload directly", () => { - event.destination.Config.customEventType = "abc"; - // expectedOutput is also manupulated to suit the expectation of the test-case - expectedOutput.eventType = "abc"; - expect(commonPostMapper(event, payload, rudderContext)).toEqual( - expectedOutput - ); - }); - it('when "sendUserIdanonymousId" is false, we do not send userId or anonymousId ', () => { - event.destination.Config.sendUserIdanonymousId = false; - event.destination.Config.customEventType = "abc"; - expectedOutput.eventType = "abc"; - delete expectedOutput.userId; - delete expectedOutput.anonymousId; - expect(commonPostMapper(event, payload, rudderContext)).toEqual( - expectedOutput - ); - }); - - it('when "sendDeviceContext" is true, we will flatten the context and merge with the payload ', () => { - event.destination.Config.sendUserIdanonymousId = true; - event.destination.Config.sendDeviceContext = true; - expectedOutput["traits.trait1"] = "new-val"; - expectedOutput.ip = "14.5.67.21"; - expectedOutput["library.name"] = "http"; - expect(commonPostMapper(event, payload, rudderContext)).toEqual( - expectedOutput - ); - }); -}); diff --git a/test/__tests__/cdk_postMapper/zapier.test.js b/test/__tests__/cdk_postMapper/zapier.test.js deleted file mode 100644 index c12b737afd..0000000000 --- a/test/__tests__/cdk_postMapper/zapier.test.js +++ /dev/null @@ -1,37 +0,0 @@ -const { commonPostMapper } = require("../../../src/cdk/v1/zapier/transform"); - -describe("Unit test cases for zapier common post mapper", () => { - it("should update the rudderContext with default endpoint", () => { - const message = { - type: "track", - userId: "identified user id", - anonymousId: "anon-id-new", - event: "Product Purchased new", - properties: { - name: "Shirt", - revenue: 4.99 - }, - context: { - ip: "14.5.67.21", - library: { - name: "http" - } - }, - timestamp: "2020-02-02T00:23:09.544Z" - }; - const destination = { - Config: { - zapUrl: "zapier.abcd-hook", - trackEventsToZap: {}, - pageScreenEventsToZap: {} - } - }; - const event = { message, destination }; - const expectedRudderContext = { - zapUrl: `zapier.abcd-hook` - }; - const rudderContext = {}; - commonPostMapper(event, {}, rudderContext); - expect(rudderContext).toEqual(expectedRudderContext); - }); -}); diff --git a/test/__tests__/data/versioned_processor_heap_input.json b/test/__tests__/data/versioned_processor_heap_input.json index d9f94fe9b5..901eea3a9f 100644 --- a/test/__tests__/data/versioned_processor_heap_input.json +++ b/test/__tests__/data/versioned_processor_heap_input.json @@ -11,7 +11,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -74,7 +74,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -138,7 +138,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -204,7 +204,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -272,7 +272,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -340,7 +340,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, diff --git a/test/__tests__/data/versioned_processor_heap_output.json b/test/__tests__/data/versioned_processor_heap_output.json index 3041a6f35c..73ef473017 100644 --- a/test/__tests__/data/versioned_processor_heap_output.json +++ b/test/__tests__/data/versioned_processor_heap_output.json @@ -139,7 +139,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -153,7 +153,7 @@ "errorCategory": "dataValidation", "errorType": "instrumentation", "feature": "processor", - "implementation": "cdkV1", + "implementation": "cdkV", "module": "destination", "destType": "HEAP" } @@ -171,7 +171,7 @@ "ID": "1WTbl0l5GjOQKOvfmcGwk0T49kV", "Name": "HEAP", "Config": { - "cdkEnabled": true + "cdkV2Enabled": true } }, "Enabled": true, @@ -184,7 +184,7 @@ "statTags": { "errorCategory": "transformation", "feature": "processor", - "implementation": "cdkV1", + "implementation": "cdkV2", "module": "destination", "destType": "HEAP" } diff --git a/test/__tests__/utilities/test-utils.js b/test/__tests__/utilities/test-utils.js deleted file mode 100644 index 4d5d7fc909..0000000000 --- a/test/__tests__/utilities/test-utils.js +++ /dev/null @@ -1,135 +0,0 @@ -const fs = require("fs"); -const _ = require("lodash"); -const path = require("path"); -const { ConfigFactory, Executor } = require("rudder-transformer-cdk"); -const { assertRouterOutput } = require('../../testHelper'); - -// TODO: separate this out later as the list grows -const cdkEnabledDestinations = { - variance: true, - autopilot: true, - heap: true, - userlist: true, - lytics: true, - kochava: true, - statsig: true, - new_relic: true, - zapier: true, - vitally: true -}; - -function getDestFromTestFile(filePath) { - const filePathArr = filePath.split("/"); - return filePathArr[filePathArr.length - 1].replace(".test.js", ""); -} - -function formTestParams(dest, transformAt) { - //for router test - let trCat = ""; - if (transformAt === "router") { - trCat += "router_"; - } - const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `../data/${dest}_${trCat}input.json`) - ); - const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `../data/${dest}_${trCat}output.json`) - ); - const inputData = JSON.parse(inputDataFile); - const expected = JSON.parse(outputDataFile); - return { - input: inputData, - expected, - iscdkDest: cdkEnabledDestinations[dest] - }; -} - -function routerCommonformTestParams() { - const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `../data/routerCommonInput.json`) - ); - const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `../data/routerCommonOutput.json`) - ); - - const inputData = JSON.parse(inputDataFile); - const expected = JSON.parse(outputDataFile); - return { - commonInput: inputData, - commonExpected: expected - }; -} - -function fetchCdkStageFromConfig(destination) { - let cdkEnabled = false; - if ( - destination.DestinationDefinition && - destination.DestinationDefinition.Config && - destination.DestinationDefinition.Config.cdkEnabled - ) { - cdkEnabled = destination.DestinationDefinition.Config.cdkEnabled; - } - return cdkEnabled; -} - -function executeTransformationTest(dest, transformAt) { - const testParams = formTestParams(dest, transformAt); - const routerCommonTestParams = routerCommonformTestParams(); - const { iscdkDest, expected, input } = testParams; - const { commonInput, commonExpected } = routerCommonTestParams; - const basePath = path.resolve(__dirname, "../../../src/cdk/v1"); - ConfigFactory.init({ basePath, loggingMode: "production" }); - - describe(`${dest} ${transformAt} tests`, () => { - input.map((tcInput, index) => { - const cdkEnabled = fetchCdkStageFromConfig(tcInput.destination); - return it(`${dest} ${transformAt} tests - ${index}`, async () => { - let actualData; - try { - if ((iscdkDest || cdkEnabled) && transformAt === "processor") { - const baseConfig = await ConfigFactory.getConfig(dest); - // We currently support processor transformation only in CDK - actualData = await Executor.execute(tcInput, baseConfig); - } else { - const version = "v0"; - const transformer = require(`../../../src/${version}/destinations/${dest}/transform`); - if (transformAt == "processor") { - actualData = await transformer.process(tcInput); - } else { - actual = await transformer.processRouterDest([tcInput]) - assertRouterOutput(actual, [tcInput]); - actualData = (actual)[0]; - } - } - // Compare actual and expected data - expect(actualData).toEqual(expected[index]); - } catch (error) { - // Force fail the test case if the expected exception is not raised - expect(error.message).toEqual(expected[index].error); - } - }); - }); - }); - if (transformAt == "router") { - describe(`${dest} ${transformAt} Common tests`, () => { - it(`${dest} ${transformAt} Common tests`, async () => { - let actualData; - try { - const version = "v0"; - const transformer = require(`../../../src/${version}/destinations/${dest}/transform`); - actualData = await transformer.processRouterDest(commonInput); - assertRouterOutput(actualData, commonInput); - const cloneActual = _.cloneDeep(actualData); - cloneActual[0].statTags = "undefined"; - // Compare actual and expected data - expect(cloneActual).toEqual(commonExpected); - } catch (error) { - // Force fail the test case if the expected exception is not raised - expect(error.message).toEqual(commonExpected); - } - }); - }); - } -} - -module.exports = { getDestFromTestFile, executeTransformationTest }; diff --git a/test/apitests/data_scenarios/cdk_v1/failure.json b/test/apitests/data_scenarios/cdk_v1/failure.json index df45006d84..d2ec384efa 100644 --- a/test/apitests/data_scenarios/cdk_v1/failure.json +++ b/test/apitests/data_scenarios/cdk_v1/failure.json @@ -77,7 +77,7 @@ "Name": "ZAPIER", "DisplayName": "Zapier", "Config": { - "cdkEnabled": true, + "cdkV2Enabled": true, "destConfig": { "defaultConfig": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"] }, @@ -154,7 +154,7 @@ "errorCategory": "transformation", "destType": "ZAPIER", "module": "destination", - "implementation": "cdkV1", + "implementation": "cdkV2", "feature": "processor", "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg" diff --git a/test/apitests/data_scenarios/cdk_v1/success.json b/test/apitests/data_scenarios/cdk_v1/success.json index 68d68a2b5f..34151040a3 100644 --- a/test/apitests/data_scenarios/cdk_v1/success.json +++ b/test/apitests/data_scenarios/cdk_v1/success.json @@ -77,7 +77,7 @@ "Name": "ZAPIER", "DisplayName": "Zapier", "Config": { - "cdkEnabled": true, + "cdkV2Enabled": true, "destConfig": { "defaultConfig": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"] }, diff --git a/test/apitests/service.api.test.ts b/test/apitests/service.api.test.ts index e46357f824..b4ed8d3b09 100644 --- a/test/apitests/service.api.test.ts +++ b/test/apitests/service.api.test.ts @@ -604,28 +604,6 @@ describe('Source api tests', () => { }); }); -describe('CDK V1 api tests', () => { - test('(zapier) successful transform', async () => { - const data = getDataFromPath('./data_scenarios/cdk_v1/success.json'); - const response = await request(server) - .post('/v0/destinations/zapier') - .set('Accept', 'application/json') - .send(data.input); - expect(response.status).toEqual(200); - expect(JSON.parse(response.text)).toEqual(data.output); - }); - - test('(zapier) failure transform', async () => { - const data = getDataFromPath('./data_scenarios/cdk_v1/failure.json'); - const response = await request(server) - .post('/v0/destinations/zapier') - .set('Accept', 'application/json') - .send(data.input); - expect(response.status).toEqual(200); - expect(JSON.parse(response.text)).toEqual(data.output); - }); -}); - describe('CDK V2 api tests', () => { test('(pinterest_tag) successful transform', async () => { const data = getDataFromPath('./data_scenarios/cdk_v2/success.json'); diff --git a/test/integrations/destinations/statsig/processor/data.ts b/test/integrations/destinations/statsig/processor/data.ts index c76ce506dc..2602764032 100644 --- a/test/integrations/destinations/statsig/processor/data.ts +++ b/test/integrations/destinations/statsig/processor/data.ts @@ -312,7 +312,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { @@ -734,7 +734,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { @@ -1142,7 +1142,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { @@ -1466,7 +1466,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { @@ -1488,13 +1488,13 @@ export const data = [ { statusCode: 400, error: - 'Bad event. Original error: message type "NOT_A_TYPE" not supported for "statsig"', + 'message type NOT_A_TYPE is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type NOT_A_TYPE is not supported', statTags: { errorCategory: 'dataValidation', errorType: 'instrumentation', destType: 'STATSIG', module: 'destination', - implementation: 'cdkV1', + implementation: 'cdkV2', destinationId: 'd1', workspaceId: 'w1', feature: 'processor', diff --git a/test/integrations/destinations/variance/processor/data.ts b/test/integrations/destinations/variance/processor/data.ts index ae33b75e5f..f4f3054296 100644 --- a/test/integrations/destinations/variance/processor/data.ts +++ b/test/integrations/destinations/variance/processor/data.ts @@ -350,7 +350,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { @@ -819,7 +819,7 @@ export const data = [ destination: { DestinationDefinition: { Config: { - cdkEnabled: true, + cdkV2Enabled: true, }, }, Config: { From 286c44a47e8451486bde281b8c938df59945cdfc Mon Sep 17 00:00:00 2001 From: Manish Kumar <144022547+manish339k@users.noreply.github.com> Date: Wed, 31 Jul 2024 10:07:19 +0530 Subject: [PATCH 104/201] feat: detach user and company in intercom identify call (#3580) * feat: detach user and company in intercom identify call * fix: removing unwanted changes * chore: resolving comments * fix: resolving comment * fix: resolving comment --- src/cdk/v2/destinations/intercom/config.js | 2 +- .../destinations/intercom/procWorkflow.yaml | 3 + src/cdk/v2/destinations/intercom/utils.js | 83 ++++- .../destinations/intercom/network.ts | 82 +++++ .../destinations/intercom/router/data.ts | 309 ++++++++++++++++++ 5 files changed, 477 insertions(+), 2 deletions(-) diff --git a/src/cdk/v2/destinations/intercom/config.js b/src/cdk/v2/destinations/intercom/config.js index c3b806f9f9..12bcf8ed5f 100644 --- a/src/cdk/v2/destinations/intercom/config.js +++ b/src/cdk/v2/destinations/intercom/config.js @@ -66,7 +66,7 @@ const ReservedAttributes = { ], }; -const ReservedCompanyProperties = ['id', 'name', 'industry']; +const ReservedCompanyProperties = ['id', 'name', 'industry', 'remove']; const MetadataTypes = { richLink: ['url', 'value'], monetaryAmount: ['amount', 'currency'] }; diff --git a/src/cdk/v2/destinations/intercom/procWorkflow.yaml b/src/cdk/v2/destinations/intercom/procWorkflow.yaml index d826716b43..0f2ac18fbc 100644 --- a/src/cdk/v2/destinations/intercom/procWorkflow.yaml +++ b/src/cdk/v2/destinations/intercom/procWorkflow.yaml @@ -84,6 +84,9 @@ steps: $.assert($.context.payload.external_id || $.context.payload.email, "Either email or userId is required for Identify call"); const endpoint = $.getBaseEndpoint(.destination) + "/" + "contacts"; $.context.requestMethod = $.outputs.searchContact ? 'PUT' : 'POST'; + const company = .message.traits.company || .message.context.traits.company; + const shouldDetachUserAndCompany = $.outputs.searchContact && company.remove; + shouldDetachUserAndCompany ? await $.detachContactAndCompany($.outputs.searchContact, company, .destination); $.context.endpoint = $.outputs.searchContact ? endpoint + "/" + $.outputs.searchContact : endpoint; $.context.payload = $.removeUndefinedAndNullValues($.context.payload); diff --git a/src/cdk/v2/destinations/intercom/utils.js b/src/cdk/v2/destinations/intercom/utils.js index e2d8a36874..dc483e040b 100644 --- a/src/cdk/v2/destinations/intercom/utils.js +++ b/src/cdk/v2/destinations/intercom/utils.js @@ -6,7 +6,7 @@ const { InstrumentationError, } = require('@rudderstack/integrations-lib'); const tags = require('../../../../v0/util/tags'); -const { httpPOST } = require('../../../../adapters/network'); +const { httpPOST, handleHttpRequest } = require('../../../../adapters/network'); const { processAxiosResponse, getDynamicErrorType, @@ -164,6 +164,7 @@ const getCompaniesList = (payload) => { custom_attributes: removeUndefinedAndNullValues(customAttributes), name: company.name, industry: company.industry, + remove: company.remove, }); } return companiesList; @@ -507,6 +508,85 @@ const addOrUpdateTagsToCompany = async ({ message, destination, metadata }, id) ); }; +/** + * Api call to get company id provided by intercom + * Ref doc v1: https://developers.intercom.com/docs/references/1.4/rest-api/companies/view-a-company + * Ref doc v2: https://developers.intercom.com/docs/references/2.10/rest-api/api.intercom.io/companies/retrievecompany + * @param {*} company + * @param {*} destination + * @returns + */ +const getCompanyId = async (company, destination) => { + if (!company.id && !company.name) return undefined; + const { apiVersion } = destination.Config; + const headers = getHeaders(destination, apiVersion); + const baseEndPoint = getBaseEndpoint(destination); + + const queryParam = company.id ? `company_id=${company.id}` : `name=${company.name}`; + const endpoint = `${baseEndPoint}/companies?${queryParam}`; + + const statTags = { + destType: 'intercom', + feature: 'transformation', + endpointPath: '/companies', + requestMethod: 'GET', + module: 'router', + }; + + const { processedResponse: response } = await handleHttpRequest( + 'GET', + endpoint, + { + headers, + }, + statTags, + ); + + if (isHttpStatusSuccess(response.status)) { + return response.response.id; + } + intercomErrorHandler('Unable to get company id due to', response); + return undefined; +}; + +/** + * Api call to detach contact and company for intercom api version v2 (version 2.10) + * Ref doc: https://developers.intercom.com/docs/references/2.10/rest-api/api.intercom.io/contacts/detachcontactfromacompany + * @param {*} contactId + * @param {*} company + * @param {*} destination + * @returns + */ +const detachContactAndCompany = async (contactId, company, destination) => { + const companyId = await getCompanyId(company, destination); + if (!companyId) return; + + const headers = getHeaders(destination); + const baseEndPoint = getBaseEndpoint(destination); + const endpoint = `${baseEndPoint}/contacts/${contactId}/companies/${companyId}`; + + const statTags = { + destType: 'intercom', + feature: 'transformation', + endpointPath: 'contacts/companies', + requestMethod: 'DELETE', + module: 'router', + }; + + const { processedResponse: response } = await handleHttpRequest( + 'DELETE', + endpoint, + { + headers, + }, + statTags, + ); + + if (!isHttpStatusSuccess(response.status)) { + intercomErrorHandler('Unable to detach contact and company due to', response); + } +}; + module.exports = { getName, getHeaders, @@ -522,4 +602,5 @@ module.exports = { separateReservedAndRestMetadata, attachContactToCompany, addOrUpdateTagsToCompany, + detachContactAndCompany, }; diff --git a/test/integrations/destinations/intercom/network.ts b/test/integrations/destinations/intercom/network.ts index d98e447824..2f90beac40 100644 --- a/test/integrations/destinations/intercom/network.ts +++ b/test/integrations/destinations/intercom/network.ts @@ -959,5 +959,87 @@ const deliveryCallsData = [ }, }, }, + { + httpReq: { + method: 'get', + url: 'https://api.eu.intercom.io/companies?company_id=company id', + data: {}, + headers: commonHeaders, + }, + httpRes: { + status: 200, + data: { + id: '123', + }, + }, + }, + { + httpReq: { + method: 'delete', + url: 'https://api.eu.intercom.io/contacts/70701240741e45d040/companies/123', + data: {}, + headers: commonHeaders, + }, + httpRes: { + status: 200, + data: {}, + }, + }, + { + httpReq: { + method: 'get', + url: 'https://api.eu.intercom.io/companies?company_id=unavailable company id', + data: {}, + headers: commonHeaders, + }, + httpRes: { + status: 404, + data: { + type: 'error.list', + request_id: 'req123', + errors: [ + { + code: 'company_not_found', + message: 'Company Not Found', + }, + ], + }, + }, + }, + { + httpReq: { + method: 'get', + url: 'https://api.eu.intercom.io/companies?company_id=other company id', + data: {}, + headers: commonHeaders, + }, + httpRes: { + status: 200, + data: { + id: 'other123', + }, + }, + }, + { + httpReq: { + method: 'delete', + url: 'https://api.eu.intercom.io/contacts/70701240741e45d040/companies/other123', + data: {}, + headers: commonHeaders, + }, + httpRes: { + status: 404, + data: { + type: 'error.list', + request_id: 'req123', + errors: [ + { + code: 'company_not_found', + message: 'Company Not Found', + }, + ], + }, + }, + }, ]; export const networkCallsData = [...deleteNwData, ...deliveryCallsData]; diff --git a/test/integrations/destinations/intercom/router/data.ts b/test/integrations/destinations/intercom/router/data.ts index 17245fb65b..cc89d3f1e2 100644 --- a/test/integrations/destinations/intercom/router/data.ts +++ b/test/integrations/destinations/intercom/router/data.ts @@ -466,6 +466,78 @@ const routerRequest2: RouterTransformationRequest = { }, metadata: generateMetadata(3), }, + { + destination: destination4, + message: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + channel: 'mobile', + context: { + app: { + build: '1.0', + name: 'Test_Example', + namespace: 'com.example.testapp', + version: '1.0', + }, + device: { + id: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + manufacturer: 'Apple', + model: 'iPhone', + name: 'iPod touch (7th generation)', + type: 'iOS', + }, + library: { + name: 'test-ios-library', + version: '1.0.7', + }, + locale: 'en-US', + network: { + bluetooth: false, + carrier: 'unavailable', + cellular: false, + wifi: true, + }, + os: { + name: 'iOS', + version: '14.0', + }, + screen: { + density: 2, + height: 320, + width: 568, + }, + timezone: 'Asia/Kolkata', + traits: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + name: 'Test Name', + firstName: 'Test', + lastName: 'Name', + createdAt: '2020-09-30T19:11:00.337Z', + userId: 'test_user_id_1', + email: 'test_1@test.com', + phone: '9876543210', + key1: 'value1', + company: { + id: 'company id', + name: 'Test Company', + remove: true, + }, + }, + userAgent: 'unknown', + }, + event: 'Test Event 2', + integrations: { + All: true, + }, + messageId: '1601493060-39010c49-e6e4-4626-a75c-0dbf1925c9e8', + originalTimestamp: '2020-09-30T19:11:00.337Z', + receivedAt: '2020-10-01T00:41:11.369+05:30', + request_ip: '2405:201:8005:9856:7911:25e7:5603:5e18', + sentAt: '2020-09-30T19:11:10.382Z', + timestamp: '2020-10-01T00:41:01.324+05:30', + type: 'identify', + }, + metadata: generateMetadata(4), + }, ], destType: 'intercom', }; @@ -636,6 +708,96 @@ const routerRequest3: RouterTransformationRequest = { destType: 'intercom', }; +const routerRequest4: RouterTransformationRequest = { + input: [ + { + destination: destination3, + message: { + userId: 'user@1', + channel: 'web', + context: { + traits: { + age: 23, + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + address: 'california usa', + ownerId: '13', + company: { + id: 'company id', + name: 'Test Company', + remove: true, + }, + }, + }, + type: 'identify', + integrations: { All: true }, + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + metadata: generateMetadata(1), + }, + { + destination: destination3, + message: { + userId: 'user@1', + channel: 'web', + context: { + traits: { + age: 23, + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + address: 'california usa', + ownerId: '13', + company: { + id: 'unavailable company id', + name: 'Test Company', + remove: true, + }, + }, + }, + type: 'identify', + integrations: { All: true }, + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + metadata: generateMetadata(2), + }, + { + destination: destination3, + message: { + userId: 'user@1', + channel: 'web', + context: { + traits: { + age: 23, + email: 'test+5@rudderlabs.com', + phone: '+91 9599999999', + firstName: 'John', + lastName: 'Snow', + address: 'california usa', + ownerId: '13', + company: { + id: 'other company id', + name: 'Test Company', + remove: true, + }, + }, + }, + type: 'identify', + integrations: { All: true }, + originalTimestamp: '2023-11-10T14:42:44.724Z', + timestamp: '2023-11-22T10:12:44.757+05:30', + }, + metadata: generateMetadata(3), + }, + ], + destType: 'intercom', +}; + export const data: RouterTestData[] = [ { id: 'Intercom-router-test-1', @@ -983,6 +1145,153 @@ export const data: RouterTestData[] = [ metadata: [generateMetadata(3)], statusCode: 299, }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.intercom.io/users', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer testApiKey', + Accept: 'application/json', + 'Intercom-Version': '1.4', + 'User-Agent': 'RudderStack', + }, + params: {}, + body: { + JSON: { + email: 'test_1@test.com', + phone: '9876543210', + name: 'Test Name', + signed_up_at: 1601493060, + last_seen_user_agent: 'unknown', + update_last_request_at: false, + user_id: 'test_user_id_1', + companies: [ + { + company_id: 'company id', + custom_attributes: {}, + name: 'Test Company', + remove: true, + }, + ], + custom_attributes: { + anonymousId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + key1: 'value1', + }, + }, + XML: {}, + JSON_ARRAY: {}, + FORM: {}, + }, + files: {}, + userId: '58b21c2d-f8d5-4410-a2d0-b268a26b7e33', + }, + metadata: [generateMetadata(4)], + batched: false, + statusCode: 200, + destination: destination4, + }, + ], + }, + }, + }, + }, + { + id: 'Intercom-router-test-3', + scenario: 'Framework', + successCriteria: + 'Some identify events should be transformed successfully and some should fail for apiVersion v2', + name: 'intercom', + description: + 'Intercom router tests for detaching contact from company in intercom for apiVersion v2', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest4, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + batchedRequest: { + body: { + JSON: { + email: 'test+5@rudderlabs.com', + external_id: 'user@1', + name: 'John Snow', + owner_id: 13, + phone: '+91 9599999999', + custom_attributes: { + address: 'california usa', + age: 23, + }, + }, + XML: {}, + FORM: {}, + JSON_ARRAY: {}, + }, + endpoint: 'https://api.eu.intercom.io/contacts/70701240741e45d040', + files: {}, + headers: { + Authorization: 'Bearer testApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + 'Intercom-Version': '2.10', + 'User-Agent': 'RudderStack', + }, + method: 'PUT', + params: {}, + type: 'REST', + version: '1', + }, + destination: destination3, + metadata: [generateMetadata(1)], + statusCode: 200, + }, + { + batched: false, + error: + 'Unable to get company id due to : {"type":"error.list","request_id":"req123","errors":[{"code":"company_not_found","message":"Company Not Found"}]}', + statTags: { + destType: 'INTERCOM', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + destination: destination3, + metadata: [generateMetadata(2)], + statusCode: 400, + }, + { + batched: false, + error: + 'Unable to detach contact and company due to : {"type":"error.list","request_id":"req123","errors":[{"code":"company_not_found","message":"Company Not Found"}]}', + statTags: { + destType: 'INTERCOM', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + destination: destination3, + metadata: [generateMetadata(3)], + statusCode: 400, + }, ], }, }, From 44baab9298d171efe1209b3ec360d15e84a4190c Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Wed, 31 Jul 2024 10:52:16 +0530 Subject: [PATCH 105/201] feat: onboard new api for klaviyo 15-06-2024 (#3574) * chore: small fixes * chore: small fixes+1 * chore: tmp update transform.js for version switching * Update transform.js * chore: tmp commit * chore: tmp commit * chore: update transformV2.js * Update transformV2.js * fix: improved quality for batching for v2 * chore: add router test case * chore: small fix for track call and add util test * chore: small fix for track call and add util test * fix: remove error in case no identifier is present * chore: remove env var lead version switching and add test cases * chore: address comments * feat: onboard new api for klaviyo 15-06-2024 * chore: solve duplicate import * chore: resolve merge conflicts * feat: add retl flow specific code * chore: address comments * feat: introduce job ordering in klaviyo * fix: batch logic to be more clear * chore: address comments * fix: value field format and comments resolved * fix: merge develop fix * fix: lint errors --- src/constants/destinationCanonicalNames.js | 1 + src/v0/destinations/klaviyo/batchUtil.js | 201 +++ src/v0/destinations/klaviyo/batchUtil.test.js | 189 +++ src/v0/destinations/klaviyo/config.js | 38 +- .../klaviyo/data/AddedToCart.json | 1 + .../klaviyo/data/KlaviyoProfileV2.json | 128 ++ .../klaviyo/data/KlaviyoTrackV2.json | 44 + .../klaviyo/data/StartedCheckout.json | 3 +- .../destinations/klaviyo/klaviyoUtil.test.js | 71 + src/v0/destinations/klaviyo/transform.js | 10 +- src/v0/destinations/klaviyo/transformV2.js | 234 +++ src/v0/destinations/klaviyo/util.js | 287 +++- src/v0/util/index.js | 8 + .../destinations/klaviyo/processor/data.ts | 2 + .../destinations/klaviyo/processor/dataV2.ts | 13 + .../klaviyo/processor/groupTestDataV2.ts | 182 +++ .../klaviyo/processor/identifyTestDataV2.ts | 375 +++++ .../klaviyo/processor/screenTestDataV2.ts | 148 ++ .../klaviyo/processor/trackTestDataV2.ts | 293 ++++ .../klaviyo/processor/validationTestDataV2.ts | 83 ++ .../klaviyo/router/commonConfig.ts | 199 +++ .../destinations/klaviyo/router/data.ts | 164 +-- .../destinations/klaviyo/router/dataV2.ts | 1263 +++++++++++++++++ test/integrations/testUtils.ts | 4 +- 24 files changed, 3765 insertions(+), 176 deletions(-) create mode 100644 src/v0/destinations/klaviyo/batchUtil.js create mode 100644 src/v0/destinations/klaviyo/batchUtil.test.js create mode 100644 src/v0/destinations/klaviyo/data/KlaviyoProfileV2.json create mode 100644 src/v0/destinations/klaviyo/data/KlaviyoTrackV2.json create mode 100644 src/v0/destinations/klaviyo/transformV2.js create mode 100644 test/integrations/destinations/klaviyo/processor/dataV2.ts create mode 100644 test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts create mode 100644 test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts create mode 100644 test/integrations/destinations/klaviyo/processor/screenTestDataV2.ts create mode 100644 test/integrations/destinations/klaviyo/processor/trackTestDataV2.ts create mode 100644 test/integrations/destinations/klaviyo/processor/validationTestDataV2.ts create mode 100644 test/integrations/destinations/klaviyo/router/commonConfig.ts create mode 100644 test/integrations/destinations/klaviyo/router/dataV2.ts diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index 1f10f45a38..e8c88efc8e 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -181,6 +181,7 @@ const DestCanonicalNames = { 'Klaviyo Bulk Upload', 'klaviyobulkupload', ], + Klaviyo: ['KLAVIYO', 'Klaviyo', 'klaviyo'], emarsys: ['EMARSYS', 'Emarsys', 'emarsys'], wunderkind: ['wunderkind', 'Wunderkind', 'WUNDERKIND'], cordial: ['cordial', 'Cordial', 'CORDIAL'], diff --git a/src/v0/destinations/klaviyo/batchUtil.js b/src/v0/destinations/klaviyo/batchUtil.js new file mode 100644 index 0000000000..3e99e03deb --- /dev/null +++ b/src/v0/destinations/klaviyo/batchUtil.js @@ -0,0 +1,201 @@ +const lodash = require('lodash'); +const { defaultRequestConfig, getSuccessRespEvents, isDefinedAndNotNull } = require('../../util'); +const { JSON_MIME_TYPE } = require('../../util/constant'); +const { BASE_ENDPOINT, CONFIG_CATEGORIES, MAX_BATCH_SIZE, revision } = require('./config'); +const { buildRequest, getSubscriptionPayload } = require('./util'); + +/** + * This function groups the subscription responses on list id + * @param {*} subscribeResponseList + * @returns + * Example subsribeResponseList = + * [ + * { payload: {id:'list_id', profile: {}}, metadata:{} }, + * { payload: {id:'list_id', profile: {}}, metadata:{} } + * ] + */ +const groupSubscribeResponsesUsingListIdV2 = (subscribeResponseList) => { + const subscribeEventGroups = lodash.groupBy( + subscribeResponseList, + (event) => event.payload.listId, + ); + return subscribeEventGroups; +}; + +/** + * This function takes susbscription as input and batches them into a single request body + * @param {subscription} + * subscription= {listId, subscriptionProfileList} + */ +const generateBatchedSubscriptionRequest = (subscription, destination) => { + const subscriptionPayloadResponse = defaultRequestConfig(); + // fetching listId from first event as listId is same for all the events + const profiles = []; // list of profiles to be subscribed + const { listId, subscriptionProfileList } = subscription; + subscriptionProfileList.forEach((profileList) => profiles.push(...profileList)); + subscriptionPayloadResponse.body.JSON = getSubscriptionPayload(listId, profiles); + subscriptionPayloadResponse.endpoint = `${BASE_ENDPOINT}/api/profile-subscription-bulk-create-jobs`; + subscriptionPayloadResponse.headers = { + Authorization: `Klaviyo-API-Key ${destination.Config.privateApiKey}`, + 'Content-Type': JSON_MIME_TYPE, + Accept: JSON_MIME_TYPE, + revision, + }; + return subscriptionPayloadResponse; +}; + +/** + * This function generates requests using profiles array and returns an array of all these requests + * @param {*} profiles + * @param {*} destination + */ +const getProfileRequests = (profiles, destination) => { + const profilePayloadResponses = profiles.map((profile) => + buildRequest(profile, destination, CONFIG_CATEGORIES.IDENTIFYV2), + ); + return profilePayloadResponses; +}; + +/** + * this function populates profileSubscriptionAndMetadataArr with respective profiles based upon common metadata + * @param {*} profileSubscriptionAndMetadataArr + * @param {*} metaDataIndexMap + * @param {*} profiles + * @returns updated profileSubscriptionAndMetadataArr obj + */ +const populateArrWithRespectiveProfileData = ( + profileSubscriptionAndMetadataArr, + metaDataIndexMap, + profiles, +) => { + const updatedPSMArr = lodash.cloneDeep(profileSubscriptionAndMetadataArr); + profiles.forEach((profile) => { + const index = metaDataIndexMap.get(profile.metadata.jobId); + if (isDefinedAndNotNull(index)) { + // using isDefinedAndNotNull as index can be 0 + updatedPSMArr[index].profiles.push(profile.payload); + } else { + // in case there is no subscription for a given profile + updatedPSMArr.push({ + profiles: [profile.payload], + metadataList: [profile.metadata], + }); + } + }); + return updatedPSMArr; +}; + +/** + * This function generates the final output batched payload for each object in profileSubscriptionAndMetadataArr + * ex: + * profileSubscriptionAndMetadataArr = [ + { + subscription: { subscriptionProfileList, listId1 }, + metadataList1, + profiles: [respectiveProfiles for above metadata] + }, + { + subscription: { subscriptionProfile List With No Profiles, listId2 }, + metadataList2, + }, + { + metadataList3, + profiles: [respectiveProfiles for above metadata with no subscription] + } + ] + * @param {*} profileSubscriptionAndMetadataArr + * @param {*} destination + * @returns + */ +const buildRequestsForProfileSubscriptionAndMetadataArr = ( + profileSubscriptionAndMetadataArr, + destination, +) => { + const finalResponseList = []; + profileSubscriptionAndMetadataArr.forEach((profileSubscriptionData) => { + const batchedRequest = []; + // we are keeping profiles request prior to subscription ones as first profile creation and then subscription should happen + if (profileSubscriptionData.profiles?.length > 0) { + batchedRequest.push(...getProfileRequests(profileSubscriptionData.profiles, destination)); + } + + if (profileSubscriptionData.subscription?.subscriptionProfileList?.length > 0) { + batchedRequest.push( + generateBatchedSubscriptionRequest(profileSubscriptionData.subscription, destination), + ); + } + + finalResponseList.push( + getSuccessRespEvents(batchedRequest, profileSubscriptionData.metadataList, destination, true), + ); + }); + return finalResponseList; +}; + +const batchRequestV2 = (subscribeRespList, profileRespList, destination) => { + const subscribeEventGroups = groupSubscribeResponsesUsingListIdV2(subscribeRespList); + let profileSubscriptionAndMetadataArr = []; + const metaDataIndexMap = new Map(); + Object.keys(subscribeEventGroups).forEach((listId) => { + // eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..] + const eventChunks = lodash.chunk(subscribeEventGroups[listId], MAX_BATCH_SIZE); + eventChunks.forEach((chunk, index) => { + // get subscriptionProfiles for the chunk + const subscriptionProfileList = chunk.map((event) => event.payload?.profile); + // get metadata for this chunk + const metadataList = chunk.map((event) => event.metadata); + // get list of jobIds from the above metdadata + const jobIdList = metadataList.map((metadata) => metadata.jobId); + // push the jobId: index to metadataIndex mapping which let us know the metadata respective payload index position in batched request + jobIdList.forEach((jobId) => { + metaDataIndexMap.set(jobId, index); + }); + profileSubscriptionAndMetadataArr.push({ + subscription: { subscriptionProfileList, listId }, + metadataList, + profiles: [], + }); + }); + }); + profileSubscriptionAndMetadataArr = populateArrWithRespectiveProfileData( + profileSubscriptionAndMetadataArr, + metaDataIndexMap, + profileRespList, + ); + /* Till this point I have a profileSubscriptionAndMetadataArr + containing the the events in one object for which batching has to happen in following format + [ + { + subscription: { subscriptionProfileList, listId1 }, + metadataList1, + profiles: [respectiveProfiles for above metadata] + }, + { + subscription: { subscriptionProfile List With No Profiles, listId2 }, + metadataList2, + }, + { + metadataList3, + profiles: [respectiveProfiles for above metadata with no subscription] + } + ] + */ + return buildRequestsForProfileSubscriptionAndMetadataArr( + profileSubscriptionAndMetadataArr, + destination, + ); + /* for identify calls with batching batched with identify with no batching + we will sonctruct O/P as: + [ + [2 calls for identifywith batching], + [1 call identify calls with batching] + ] + */ +}; + +module.exports = { + groupSubscribeResponsesUsingListIdV2, + populateArrWithRespectiveProfileData, + generateBatchedSubscriptionRequest, + batchRequestV2, +}; diff --git a/src/v0/destinations/klaviyo/batchUtil.test.js b/src/v0/destinations/klaviyo/batchUtil.test.js new file mode 100644 index 0000000000..af1afd8670 --- /dev/null +++ b/src/v0/destinations/klaviyo/batchUtil.test.js @@ -0,0 +1,189 @@ +const { + groupSubscribeResponsesUsingListIdV2, + populateArrWithRespectiveProfileData, + generateBatchedSubscriptionRequest, +} = require('./batchUtil'); +const { revision } = require('./config'); + +describe('groupSubscribeResponsesUsingListIdV2', () => { + // Groups subscription responses by listId correctly + it('should group subscription responses by listId correctly when given a valid list', () => { + const subscribeResponseList = [ + { payload: { listId: 'list_1', profile: {} }, metadata: {} }, + { payload: { listId: 'list_1', profile: {} }, metadata: {} }, + { payload: { listId: 'list_2', profile: {} }, metadata: {} }, + ]; + + const expectedOutput = { + list_1: [ + { payload: { listId: 'list_1', profile: {} }, metadata: {} }, + { payload: { listId: 'list_1', profile: {} }, metadata: {} }, + ], + list_2: [{ payload: { listId: 'list_2', profile: {} }, metadata: {} }], + }; + + const result = groupSubscribeResponsesUsingListIdV2(subscribeResponseList); + + expect(result).toEqual(expectedOutput); + }); + + // Handles empty subscription response list + it('should return an empty object when given an empty subscription response list', () => { + const subscribeResponseList = []; + + const expectedOutput = {}; + + const result = groupSubscribeResponsesUsingListIdV2(subscribeResponseList); + + expect(result).toEqual(expectedOutput); + }); +}); + +describe('populateArrWithRespectiveProfileData', () => { + // Correctly populates array when all profiles have corresponding metadata + it('should correctly populate array when all profiles have corresponding metadata', () => { + const profileSubscriptionAndMetadataArr = [ + { profiles: [], metadataList: [{ jobId: '1' }], subscriptions: [] }, + { profiles: [], metadataList: [{ jobId: '2' }], subscriptions: [] }, + ]; + const metadataIndexMap = new Map([ + ['1', 0], + ['2', 1], + ]); + const profiles = [ + { payload: { name: 'John' }, metadata: { jobId: '1' } }, + { payload: { name: 'Doe' }, metadata: { jobId: '2' } }, + ]; + + const result = populateArrWithRespectiveProfileData( + profileSubscriptionAndMetadataArr, + metadataIndexMap, + profiles, + ); + + expect(result[0].profiles).toEqual([{ name: 'John' }]); + expect(result[1].profiles).toEqual([{ name: 'Doe' }]); + }); + + // Handles empty profileSubscriptionAndMetadataArr input + it('should handle empty profileSubscriptionAndMetadataArr input', () => { + const profileSubscriptionAndMetadataArr = []; + const metadataIndexMap = new Map(); + const profiles = [{ payload: { name: 'John' }, metadata: { jobId: '1' } }]; + + const result = populateArrWithRespectiveProfileData( + profileSubscriptionAndMetadataArr, + metadataIndexMap, + profiles, + ); + + expect(result).toEqual([ + { + profiles: [{ name: 'John' }], + metadataList: [{ jobId: '1' }], + }, + ]); + }); +}); + +// Generated by CodiumAI + +describe('generateBatchedSubscriptionRequest', () => { + // Generates a batched subscription request with valid subscription and destination inputs + it('should generate a valid batched subscription request when given valid subscription and destination inputs', () => { + const subscription = { + listId: 'test-list-id', + subscriptionProfileList: [[{ id: 'profile1' }, { id: 'profile2' }], [{ id: 'profile3' }]], + }; + const destination = { + Config: { + privateApiKey: 'test-api-key', + }, + }; + const expectedRequest = { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: { + Authorization: 'Klaviyo-API-Key test-api-key', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision, + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { data: [{ id: 'profile1' }, { id: 'profile2' }, { id: 'profile3' }] }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'test-list-id', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }; + const result = generateBatchedSubscriptionRequest(subscription, destination); + expect(result).toEqual(expectedRequest); + }); + + // Handles empty subscriptionProfileList gracefully + it('should handle empty subscriptionProfileList gracefully', () => { + const subscription = { + listId: 'test-list-id', + subscriptionProfileList: [], + }; + const destination = { + Config: { + privateApiKey: 'test-api-key', + }, + }; + const expectedRequest = { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: { + Authorization: 'Klaviyo-API-Key test-api-key', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision, + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { profiles: { data: [] } }, + relationships: { + list: { + data: { + type: 'list', + id: 'test-list-id', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }; + const result = generateBatchedSubscriptionRequest(subscription, destination); + expect(result).toEqual(expectedRequest); + }); +}); diff --git a/src/v0/destinations/klaviyo/config.js b/src/v0/destinations/klaviyo/config.js index d8583ab9cb..54216852f7 100644 --- a/src/v0/destinations/klaviyo/config.js +++ b/src/v0/destinations/klaviyo/config.js @@ -9,10 +9,12 @@ const MAX_BATCH_SIZE = 100; const CONFIG_CATEGORIES = { IDENTIFY: { name: 'KlaviyoIdentify', apiUrl: '/api/profiles' }, - SCREEN: { name: 'KlaviyoTrack', apiUrl: '/api/events' }, + IDENTIFYV2: { name: 'KlaviyoProfileV2', apiUrl: '/api/profile-import' }, TRACK: { name: 'KlaviyoTrack', apiUrl: '/api/events' }, + TRACKV2: { name: 'KlaviyoTrackV2', apiUrl: '/api/events' }, GROUP: { name: 'KlaviyoGroup' }, PROFILE: { name: 'KlaviyoProfile' }, + PROFILEV2: { name: 'KlaviyoProfileV2' }, STARTED_CHECKOUT: { name: 'StartedCheckout' }, VIEWED_PRODUCT: { name: 'ViewedProduct' }, ADDED_TO_CART: { name: 'AddedToCart' }, @@ -55,10 +57,37 @@ const LIST_CONF = { SUBSCRIBE: 'subscribe_with_consentInfo', ADD_TO_LIST: 'subscribe_without_consentInfo', }; - +const useUpdatedKlaviyoAPI = process.env.USE_UPDATED_KLAVIYO_API === 'true' || false; const MAPPING_CONFIG = getMappingConfig(CONFIG_CATEGORIES, __dirname); -const destType = 'klaviyo'; +const WhiteListedTraitsV2 = [ + 'email', + 'firstName', + 'firstname', + 'first_name', + 'lastName', + 'lastname', + 'last_name', + 'phone', + 'title', + 'organization', + 'city', + 'region', + 'country', + 'zip', + 'image', + 'timezone', + 'anonymousId', + 'userId', + 'properties', + 'location', + '_kx', + 'street', + 'address', +]; +const destType = 'klaviyo'; +// api version used +const revision = '2024-06-15'; module.exports = { BASE_ENDPOINT, MAX_BATCH_SIZE, @@ -70,4 +99,7 @@ module.exports = { eventNameMapping, jsonNameMapping, destType, + revision, + WhiteListedTraitsV2, + useUpdatedKlaviyoAPI, }; diff --git a/src/v0/destinations/klaviyo/data/AddedToCart.json b/src/v0/destinations/klaviyo/data/AddedToCart.json index 302cc79804..13ba9e7d47 100644 --- a/src/v0/destinations/klaviyo/data/AddedToCart.json +++ b/src/v0/destinations/klaviyo/data/AddedToCart.json @@ -2,6 +2,7 @@ { "destKey": "$value", "sourceKeys": "value", + "metadata": { "type": "isFloat" }, "required": false }, { diff --git a/src/v0/destinations/klaviyo/data/KlaviyoProfileV2.json b/src/v0/destinations/klaviyo/data/KlaviyoProfileV2.json new file mode 100644 index 0000000000..310f3eba38 --- /dev/null +++ b/src/v0/destinations/klaviyo/data/KlaviyoProfileV2.json @@ -0,0 +1,128 @@ +[ + { + "destKey": "external_id", + "sourceKeys": "userIdOnly", + "sourceFromGenericMap": true + }, + { + "destKey": "anonymous_id", + "sourceKeys": "anonymousId" + }, + { + "destKey": "email", + "sourceKeys": "emailOnly", + "sourceFromGenericMap": true + }, + { + "destKey": "first_name", + "sourceKeys": "firstName", + "sourceFromGenericMap": true + }, + { + "destKey": "last_name", + "sourceKeys": "lastName", + "sourceFromGenericMap": true + }, + { + "destKey": "phone_number", + "sourceKeys": "phone", + "sourceFromGenericMap": true + }, + { + "destKey": "title", + "sourceKeys": ["traits.title", "context.traits.title", "properties.title"] + }, + { + "destKey": "organization", + "sourceKeys": ["traits.organization", "context.traits.organization", "properties.organization"] + }, + { + "destKey": "location.city", + "sourceKeys": [ + "traits.city", + "traits.address.city", + "context.traits.city", + "context.traits.address.city", + "properties.city" + ] + }, + { + "destKey": "location.region", + "sourceKeys": [ + "traits.region", + "traits.address.region", + "context.traits.region", + "context.traits.address.region", + "properties.region", + "traits.state", + "traits.address.state", + "context.traits.address.state", + "context.traits.state", + "properties.state" + ] + }, + { + "destKey": "location.country", + "sourceKeys": [ + "traits.country", + "traits.address.country", + "context.traits.country", + "context.traits.address.country", + "properties.country" + ] + }, + { + "destKey": "location.zip", + "sourceKeys": [ + "traits.zip", + "traits.postalcode", + "traits.postalCode", + "traits.address.zip", + "traits.address.postalcode", + "traits.address.postalCode", + "context.traits.zip", + "context.traits.postalcode", + "context.traits.postalCode", + "context.traits.address.zip", + "context.traits.address.postalcode", + "context.traits.address.postalCode", + "properties.zip", + "properties.postalcode", + "properties.postalCode" + ] + }, + { + "destKey": "location.ip", + "sourceKeys": ["context.ip", "request_ip"] + }, + { + "destKey": "_kx", + "sourceKeys": ["traits._kx", "context.traits._kx"] + }, + { + "destKey": "image", + "sourceKeys": ["traits.image", "context.traits.image", "properties.image"] + }, + { + "destKey": "location.timezone", + "sourceKeys": ["traits.timezone", "context.traits.timezone", "properties.timezone"] + }, + { + "destKey": "location.latitude", + "sourceKeys": ["latitude", "context.address.latitude", "context.location.latitude"] + }, + { + "destKey": "location.longitude", + "sourceKeys": ["longitude", "context.address.longitude", "context.location.longitude"] + }, + { + "destKey": "location.address1", + "sourceKeys": [ + "traits.street", + "traits.address.street", + "context.traits.street", + "context.traits.address.street", + "properties.street" + ] + } +] diff --git a/src/v0/destinations/klaviyo/data/KlaviyoTrackV2.json b/src/v0/destinations/klaviyo/data/KlaviyoTrackV2.json new file mode 100644 index 0000000000..a92472d215 --- /dev/null +++ b/src/v0/destinations/klaviyo/data/KlaviyoTrackV2.json @@ -0,0 +1,44 @@ +[ + { + "destKey": "value", + "sourceKeys": ["properties.revenue", "properties.total", "properties.value"], + "metadata": { + "excludes": [ + "event", + "email", + "phone", + "revenue", + "total", + "value", + "value_currency", + "currency" + ], + "type": "isFloat" + } + }, + { + "destKey": "value_currency", + "sourceKeys": "properties.currency" + }, + { + "destKey": "time", + "sourceKeys": "timestamp", + "sourceFromGenericMap": true + }, + { + "destKey": "properties", + "sourceKeys": "properties", + "metadata": { + "excludes": [ + "event", + "email", + "phone", + "revenue", + "total", + "value", + "value_currency", + "currency" + ] + } + } +] diff --git a/src/v0/destinations/klaviyo/data/StartedCheckout.json b/src/v0/destinations/klaviyo/data/StartedCheckout.json index 1a4691709d..10441cb277 100644 --- a/src/v0/destinations/klaviyo/data/StartedCheckout.json +++ b/src/v0/destinations/klaviyo/data/StartedCheckout.json @@ -7,7 +7,8 @@ { "destKey": "$value", "sourceKeys": "value", - "required": false + "required": false, + "metadata": { "type": "isFloat" } }, { "destKey": "Categories", diff --git a/src/v0/destinations/klaviyo/klaviyoUtil.test.js b/src/v0/destinations/klaviyo/klaviyoUtil.test.js index f64ea8335a..051a6c3599 100644 --- a/src/v0/destinations/klaviyo/klaviyoUtil.test.js +++ b/src/v0/destinations/klaviyo/klaviyoUtil.test.js @@ -154,3 +154,74 @@ describe('addSubscribeFlagToTraits', () => { expect(result.properties.subscribe).toBe(true); }); }); + +const { getProfileMetadataAndMetadataFields } = require('./util'); + +describe('getProfileMetadataAndMetadataFields', () => { + // Correctly generates metadata with fields to unset, append, and unappend when all fields are provided + it('should generate metadata with fields to unset, append, and unappend when all fields are provided', () => { + const message = { + integrations: { + Klaviyo: { + fieldsToUnset: ['Unset1', 'Unset2'], + fieldsToAppend: ['appendList1', 'appendList2'], + fieldsToUnappend: ['unappendList1', 'unappendList2'], + }, + All: true, + }, + traits: { + appendList1: 'New Value 1', + appendList2: 'New Value 2', + unappendList1: 'Old Value 1', + unappendList2: 'Old Value 2', + }, + }; + + jest.mock('../../util', () => ({ + getIntegrationsObj: jest.fn(() => message.integrations.Klaviyo), + getFieldValueFromMessage: jest.fn(() => message.traits), + isDefinedAndNotNull: jest.fn((value) => value !== null && value !== undefined), + })); + + const result = getProfileMetadataAndMetadataFields(message); + + expect(result).toEqual({ + meta: { + patch_properties: { + append: { + appendList1: 'New Value 1', + appendList2: 'New Value 2', + }, + unappend: { + unappendList1: 'Old Value 1', + unappendList2: 'Old Value 2', + }, + unset: ['Unset1', 'Unset2'], + }, + }, + metadataFields: [ + 'Unset1', + 'Unset2', + 'appendList1', + 'appendList2', + 'unappendList1', + 'unappendList2', + ], + }); + }); + + // Handles null or undefined message input gracefully + it('should return empty metadata and metadataFields when message is null or undefined', () => { + jest.mock('../../util', () => ({ + getIntegrationsObj: jest.fn(() => null), + getFieldValueFromMessage: jest.fn(() => ({})), + isDefinedAndNotNull: jest.fn((value) => value !== null && value !== undefined), + })); + + let result = getProfileMetadataAndMetadataFields(null); + expect(result).toEqual({ meta: { patch_properties: {} }, metadataFields: [] }); + + result = getProfileMetadataAndMetadataFields(undefined); + expect(result).toEqual({ meta: { patch_properties: {} }, metadataFields: [] }); + }); +}); diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index eac9dda8a0..d5047a4220 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -13,6 +13,7 @@ const { eventNameMapping, jsonNameMapping, } = require('./config'); +const { processRouterDestV2, processV2 } = require('./transformV2'); const { createCustomerProperties, subscribeUserToList, @@ -280,6 +281,9 @@ const groupRequestHandler = (message, category, destination) => { // Main event processor using specific handler funcs const processEvent = async (event, reqMetadata) => { const { message, destination, metadata } = event; + if (destination.Config?.apiVersion === 'v2') { + return processV2(event, reqMetadata); + } if (!message.type) { throw new InstrumentationError('Event type is required'); } @@ -330,11 +334,15 @@ const getEventChunks = (event, subscribeRespList, nonSubscribeRespList) => { }; const processRouterDest = async (inputs, reqMetadata) => { + const { destination } = inputs[0]; + // This is used to switch to latest API version + if (destination.Config?.apiVersion === 'v2') { + return processRouterDestV2(inputs, reqMetadata); + } let batchResponseList = []; const batchErrorRespList = []; const subscribeRespList = []; const nonSubscribeRespList = []; - const { destination } = inputs[0]; await Promise.all( inputs.map(async (event) => { try { diff --git a/src/v0/destinations/klaviyo/transformV2.js b/src/v0/destinations/klaviyo/transformV2.js new file mode 100644 index 0000000000..ad98d2f559 --- /dev/null +++ b/src/v0/destinations/klaviyo/transformV2.js @@ -0,0 +1,234 @@ +/* eslint-disable no-nested-ternary */ +/* eslint-disable no-underscore-dangle */ +/* eslint-disable array-callback-return */ +const get = require('get-value'); +const { ConfigurationError, InstrumentationError } = require('@rudderstack/integrations-lib'); +const { EventType, MappedToDestinationKey } = require('../../../constants'); +const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config'); +const { + constructProfile, + subscribeUserToListV2, + buildRequest, + buildSubscriptionRequest, + getTrackRequests, + fetchTransformedEvents, + addSubscribeFlagToTraits, +} = require('./util'); +const { batchRequestV2 } = require('./batchUtil'); +const { + constructPayload, + getFieldValueFromMessage, + removeUndefinedAndNullValues, + handleRtTfSingleEventError, + addExternalIdToTraits, + adduserIdFromExternalId, + groupEventsByType, + flattenJson, +} = require('../../util'); + +/** + * Main Identify request handler func + * The function is used to create/update new users and also for subscribing + * users to the list. + * DOCS: 1. https://developers.klaviyo.com/en/reference/create_or_update_profile + * 2. https://developers.klaviyo.com/en/reference/subscribe_profiles + * @param {*} message + * @param {*} category + * @param {*} destination + * @returns one object with keys profile and subscription(conditional) and values as objects + */ +const identifyRequestHandler = (message, category, destination) => { + // If listId property is present try to subscribe/member user in list + const { listId } = destination.Config; + let traitsInfo = getFieldValueFromMessage(message, 'traits'); + const mappedToDestination = get(message, MappedToDestinationKey); + if (mappedToDestination) { + addExternalIdToTraits(message); + adduserIdFromExternalId(message); + traitsInfo = addSubscribeFlagToTraits(traitsInfo); + } + const payload = removeUndefinedAndNullValues(constructProfile(message, destination, true)); + const response = { profile: payload }; + // check if user wants to subscribe profile or not and listId is present or not + if (traitsInfo?.properties?.subscribe && (traitsInfo.properties?.listId || listId)) { + response.subscription = subscribeUserToListV2(message, traitsInfo, destination); + } + return response; +}; + +/** + * Main handler func for track/screen request + * User info needs to be mapped to a track event (mandatory) + * DOCS: https://developers.klaviyo.com/en/reference/create_event + * @param {*} message + * @param {*} category + * @param {*} destination + * @returns event request + */ +const trackOrScreenRequestHandler = (message, category, destination) => { + const { flattenProperties } = destination.Config; + // event for track and name for screen call + const event = get(message, 'event') || get(message, 'name'); + if (event && typeof event !== 'string') { + throw new InstrumentationError('Event type should be a string'); + } + const attributes = constructPayload(message, MAPPING_CONFIG[category.name]); + + // if flattenProperties is enabled from UI, flatten the event properties + attributes.properties = flattenProperties + ? flattenJson(attributes.properties, '.', 'normal', false) + : attributes.properties; + + // get profile object + attributes.profile = removeUndefinedAndNullValues(constructProfile(message, destination, false)); + attributes.metric = { + data: { + type: 'metric', + attributes: { + name: event, + }, + }, + }; + return { event: { data: { type: 'event', attributes } } }; +}; + +/** + * Main handlerfunc for group request add/subscribe users to the list based on property sent + * DOCS:https://developers.klaviyo.com/en/reference/subscribe_profiles + * @param {*} message + * @param {*} category + * @param {*} destination + * @returns subscription object + */ +const groupRequestHandler = (message, category, destination) => { + if (!message.groupId) { + throw new InstrumentationError('groupId is a required field for group events'); + } + const traitsInfo = getFieldValueFromMessage(message, 'traits'); + if (!traitsInfo?.subscribe) { + throw new InstrumentationError('Subscribe flag should be true for group call'); + } + // throwing error for subscribe flag + return { subscription: subscribeUserToListV2(message, traitsInfo, destination) }; +}; + +const processEvent = (event) => { + const { message, destination } = event; + if (!message.type) { + throw new InstrumentationError('Event type is required'); + } + if (!destination.Config.privateApiKey) { + throw new ConfigurationError(`Private API Key is a required field for ${message.type} events`); + } + const messageType = message.type.toLowerCase(); + + let category; + let response; + switch (messageType) { + case EventType.IDENTIFY: + category = CONFIG_CATEGORIES.IDENTIFYV2; + response = identifyRequestHandler(message, category, destination); + break; + case EventType.SCREEN: + case EventType.TRACK: + category = CONFIG_CATEGORIES.TRACKV2; + response = trackOrScreenRequestHandler(message, category, destination); + break; + case EventType.GROUP: + category = CONFIG_CATEGORIES.GROUP; + response = groupRequestHandler(message, category, destination); + break; + default: + throw new InstrumentationError(`Event type ${messageType} is not supported`); + } + return response; +}; +// {subscription:{}, event:{}, profile:{}} +const processV2 = (event) => { + const response = processEvent(event); + const { destination } = event; + const respList = []; + if (response.profile) { + respList.push(buildRequest(response.profile, destination, CONFIG_CATEGORIES.IDENTIFYV2)); + } + if (response.subscription) { + respList.push( + buildSubscriptionRequest(response.subscription, destination, CONFIG_CATEGORIES.TRACKV2), + ); + } + if (response.event) { + respList.push(buildRequest(response.event, destination, CONFIG_CATEGORIES.TRACKV2)); + } + return respList; +}; + +// This function separates subscribe, proifle and event responses from process () and other responses in chunks +const getEventChunks = (input, subscribeRespList, profileRespList, eventRespList) => { + if (input.payload.subscription) { + subscribeRespList.push({ payload: input.payload.subscription, metadata: input.metadata }); + } + if (input.payload.profile) { + profileRespList.push({ payload: input.payload.profile, metadata: input.metadata }); + } + if (input.payload.event) { + eventRespList.push({ payload: input.payload.event, metadata: input.metadata }); + } +}; + +const processRouter = (inputs, reqMetadata) => { + const batchResponseList = []; + const batchErrorRespList = []; + const subscribeRespList = []; + const profileRespList = []; + const eventRespList = []; + const { destination } = inputs[0]; + inputs.map((event) => { + try { + if (event.message.statusCode) { + // already transformed event + batchResponseList.push(fetchTransformedEvents(event)); + } else { + // if not transformed + getEventChunks( + { + payload: processEvent(event), + metadata: event.metadata, + }, + subscribeRespList, + profileRespList, + eventRespList, + ); + } + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata); + batchErrorRespList.push(errRespEvent); + } + }); + const batchedResponseList = batchRequestV2(subscribeRespList, profileRespList, destination); + const trackRespList = getTrackRequests(eventRespList, destination); + + batchResponseList.push(...trackRespList, ...batchedResponseList); + + return { successEvents: batchResponseList, errorEvents: batchErrorRespList }; +}; + +const processRouterDestV2 = (inputs, reqMetadata) => { + /** + We are doing this to maintain the order of events not only fo transformation but for delivery as well + Job Id: 1 2 3 4 5 6 + Input : ['user1 track1', 'user1 identify 1', 'user1 track 2', 'user2 identify 1', 'user2 track 1', 'user1 track 3'] + Output after batching : [['user1 track1'],['user1 identify 1', 'user2 identify 1'], [ 'user1 track 2', 'user2 track 1', 'user1 track 3']] + Output after transformation: [1, [2,4], [3,5,6]] + */ + const inputsGroupedByType = groupEventsByType(inputs); + const respList = []; + const errList = []; + inputsGroupedByType.forEach((typedEventList) => { + const { successEvents, errorEvents } = processRouter(typedEventList, reqMetadata); + respList.push(...successEvents); + errList.push(...errorEvents); + }); + return [...respList, ...errList]; +}; + +module.exports = { processV2, processRouterDestV2 }; diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index fea77a85ce..7b2b011d43 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -1,11 +1,7 @@ +const set = require('set-value'); const lodash = require('lodash'); -const { - NetworkError, - InstrumentationError, - isDefinedAndNotNull, -} = require('@rudderstack/integrations-lib'); +const { NetworkError, InstrumentationError } = require('@rudderstack/integrations-lib'); const { WhiteListedTraits } = require('../../../constants'); - const { constructPayload, getFieldValueFromMessage, @@ -14,14 +10,25 @@ const { removeUndefinedAndNullValues, defaultBatchRequestConfig, getSuccessRespEvents, + flattenJson, defaultPatchRequestConfig, + isDefinedAndNotNull, + getDestinationExternalID, + getIntegrationsObj, defaultRequestConfig, } = require('../../util'); const tags = require('../../util/tags'); const { handleHttpRequest } = require('../../../adapters/network'); const { JSON_MIME_TYPE, HTTP_STATUS_CODES } = require('../../util/constant'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); -const { BASE_ENDPOINT, MAPPING_CONFIG, CONFIG_CATEGORIES, MAX_BATCH_SIZE } = require('./config'); +const { + BASE_ENDPOINT, + MAPPING_CONFIG, + CONFIG_CATEGORIES, + MAX_BATCH_SIZE, + WhiteListedTraitsV2, + revision, +} = require('./config'); const REVISION_CONSTANT = '2023-02-22'; @@ -278,13 +285,11 @@ const getBatchedResponseList = (subscribeEventGroups, identifyResponseList) => { }); batchedResponseList = [...batchedResponseList, ...batchedResponse]; }); - if (identifyResponseList.length > 0) { identifyResponseList.forEach((response) => { batchedResponseList[0].batchedRequest.push(response); }); } - return batchedResponseList; }; @@ -309,6 +314,262 @@ const batchSubscribeEvents = (subscribeRespList) => { return batchedResponseList; }; +const buildRequest = (payload, destination, category) => { + const { privateApiKey } = destination.Config; + const response = defaultRequestConfig(); + response.endpoint = `${BASE_ENDPOINT}${category.apiUrl}`; + response.method = defaultPostRequestConfig.requestMethod; + response.headers = { + Authorization: `Klaviyo-API-Key ${privateApiKey}`, + Accept: JSON_MIME_TYPE, + 'Content-Type': JSON_MIME_TYPE, + revision, + }; + response.body.JSON = removeUndefinedAndNullValues(payload); + return response; +}; + +/** + * This function generates the metadat object used for updating a list attribute and unset properties + * message = { + integrations: { + Klaviyo: { fieldsToUnset: ['Unset1', 'Unset2'], + fieldsToAppend: ['appendList1', 'appendList2'], + fieldsToUnappend: ['unappendList1', 'unappendList2'] + }, + All: true, + }, + }; + Output metadata = { + "meta": { + "patch_properties": { + "append": { + "appendList1": "New Value 1", + "appendList2": "New Value 2" + }, + "unappend": { + "unappendList1": "Old Value 1", + "unappendList2": "Old Value 2" + }, + "unset": ['Unset1', 'Unset2'] + } + } + } + * @param {*} message + */ +const getProfileMetadataAndMetadataFields = (message) => { + const intgObj = getIntegrationsObj(message, 'Klaviyo'); + const meta = { patch_properties: {} }; + let metadataFields = []; + const traitsInfo = getFieldValueFromMessage(message, 'traits'); + // fetch and set fields to unset + const fieldsToUnset = intgObj?.fieldsToUnset; + if (Array.isArray(fieldsToUnset)) { + meta.patch_properties.unset = fieldsToUnset; + metadataFields = fieldsToUnset; + } + + // fetch list of fields to append , their value and append these fields in metadataFields + const fieldsToAppend = intgObj?.fieldsToAppend; + if (Array.isArray(fieldsToAppend)) { + const append = {}; + fieldsToAppend.forEach((key) => { + if (isDefinedAndNotNull(traitsInfo[key])) { + append[key] = traitsInfo[key]; + } + }); + meta.patch_properties.append = append; + metadataFields = metadataFields.concat(fieldsToAppend); + } + + // fetch list of fields to unappend , their value and append these fields in metadataFields + const fieldsToUnappend = intgObj?.fieldsToUnappend; + if (Array.isArray(fieldsToUnappend)) { + const unappend = {}; + fieldsToUnappend.forEach((key) => { + if (isDefinedAndNotNull(traitsInfo[key])) { + unappend[key] = traitsInfo[key]; + } + }); + meta.patch_properties.unappend = unappend; + metadataFields = metadataFields.concat(fieldsToUnappend); + } + + return { meta, metadataFields }; +}; + +/** + * Following function is used to construct profile object for version 15-06-2024 + * If we have isIdentifyCall as true then there are two extra scenarios + * 1. `enforceEmailAsPrimary` config kicks in and if email or phone is not present we throw an error + * 2. Place of Metadata object in payload for klaviyo is a little but different + * @param {*} message input to build output from + * @param {*} destination dest object with config + * @param {*} isIdentifyCall let us know if processing is done for identify call + * @returns profile object + * https://developers.klaviyo.com/en/reference/create_or_update_profile + */ +const constructProfile = (message, destination, isIdentifyCall) => { + const profileAttributes = constructPayload( + message, + MAPPING_CONFIG[CONFIG_CATEGORIES.PROFILEV2.name], + ); + const { enforceEmailAsPrimary, flattenProperties } = destination.Config; + let customPropertyPayload = {}; + const { meta, metadataFields } = getProfileMetadataAndMetadataFields(message); + customPropertyPayload = extractCustomFields( + message, + customPropertyPayload, + ['traits', 'context.traits'], + // omitting whitelistedTraitsV2 and metadatafields from constructing custom properties as these are already used + [...WhiteListedTraitsV2, ...metadataFields], + ); + const profileId = getDestinationExternalID(message, 'klaviyo-profileId'); + // if flattenProperties is enabled from UI, flatten the user properties + customPropertyPayload = flattenProperties + ? flattenJson(customPropertyPayload, '.', 'normal', false) + : customPropertyPayload; + if (enforceEmailAsPrimary) { + delete profileAttributes.external_id; // so that multiple profiles are not found, one w.r.t email and one for external_id + customPropertyPayload = { + ...customPropertyPayload, + _id: getFieldValueFromMessage(message, 'userIdOnly'), // custom attribute + }; + } + const data = removeUndefinedAndNullValues({ + type: 'profile', + id: profileId, + attributes: { + ...profileAttributes, + properties: removeUndefinedAndNullValues(customPropertyPayload), + meta, + }, + }); + if (isIdentifyCall) { + // For identify call meta object comes inside + data.meta = meta; + delete data.attributes.meta; + } + + return { data }; +}; + +/** + * This function is used for creating profile response for subscribing users to a particular list for V2 + * DOCS: https://developers.klaviyo.com/en/reference/subscribe_profiles + */ +const subscribeUserToListV2 = (message, traitsInfo, destination) => { + // listId from message properties are preferred over Config listId + const { consent } = destination.Config; + let { listId } = destination.Config; + let subscribeConsent = traitsInfo.consent || traitsInfo.properties?.consent || consent; + const email = getFieldValueFromMessage(message, 'email'); + const phone = getFieldValueFromMessage(message, 'phone'); + const profileAttributes = { + email, + phone_number: phone, + }; + if (subscribeConsent) { + if (!Array.isArray(subscribeConsent)) { + subscribeConsent = [subscribeConsent]; + } + if (subscribeConsent.includes('email') && email) { + set(profileAttributes, 'subscriptions.email.marketing.consent', 'SUBSCRIBED'); + } + if (subscribeConsent.includes('sms') && phone) { + set(profileAttributes, 'subscriptions.sms.marketing.consent', 'SUBSCRIBED'); + } + } + + const profile = removeUndefinedAndNullValues({ + type: 'profile', + id: getDestinationExternalID(message, 'klaviyo-profileId'), + attributes: removeUndefinedAndNullValues(profileAttributes), + }); + if (!email && !phone && profile.id) { + throw new InstrumentationError( + 'Profile Id, Email or/and Phone are required to subscribe to a list', + ); + } + // fetch list id from message + if (traitsInfo?.properties?.listId) { + // for identify call + listId = traitsInfo.properties.listId; + } + if (message.type === 'group') { + listId = message.groupId; + } + + return { listId, profile: [profile] }; +}; +/** + * This Create a subscription payload to subscribe profile(s) to list listId + * @param {*} listId + * @param {*} profiles + */ +const getSubscriptionPayload = (listId, profiles) => ({ + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { profiles: { data: profiles } }, + relationships: { + list: { + data: { + type: 'list', + id: listId, + }, + }, + }, + }, +}); + +/** + * This function accepts subscriptions object and builds a request for it + * @param {*} subscription + * @param {*} destination + * @returns defaultRequestConfig + */ +const buildSubscriptionRequest = (subscription, destination) => { + const response = defaultRequestConfig(); + response.endpoint = `${BASE_ENDPOINT}/api/profile-subscription-bulk-create-jobs`; + response.method = defaultPostRequestConfig.requestMethod; + response.headers = { + Authorization: `Klaviyo-API-Key ${destination.Config.privateApiKey}`, + Accept: JSON_MIME_TYPE, + 'Content-Type': JSON_MIME_TYPE, + revision, + }; + response.body.JSON = getSubscriptionPayload(subscription.listId, subscription.profile); + return response; +}; + +const getTrackRequests = (eventRespList, destination) => { + // building and pushing all the event requests + const respList = []; + eventRespList.forEach((resp) => + respList.push( + getSuccessRespEvents( + buildRequest(resp.payload, destination, CONFIG_CATEGORIES.TRACKV2), + [resp.metadata], + destination, + ), + ), + ); + return respList; +}; + +/** + * This function checks for the transformed event structure and accordingly send back the batched responses + * @param {*} event + */ +const fetchTransformedEvents = (event) => { + const { message, destination, metadata } = event; + // checking if we have any output field if yes then we return message.output + return getSuccessRespEvents( + message.output || message, + Array.isArray(metadata) ? metadata : [metadata], + destination, + ); +}; const addSubscribeFlagToTraits = (traitsInfo) => { let traits = traitsInfo; @@ -340,5 +601,13 @@ module.exports = { batchSubscribeEvents, profileUpdateResponseBuilder, getIdFromNewOrExistingProfile, + constructProfile, + subscribeUserToListV2, + getProfileMetadataAndMetadataFields, + buildRequest, + buildSubscriptionRequest, + getTrackRequests, + fetchTransformedEvents, addSubscribeFlagToTraits, + getSubscriptionPayload, }; diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 599c116a8c..3916dec3f4 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -858,6 +858,14 @@ function formatValues(formattedVal, formattingType, typeFormat, integrationsObj) curFormattedVal = formattedVal.trim(); } }, + isFloat: () => { + if (isDefinedAndNotNull(formattedVal)) { + curFormattedVal = parseFloat(formattedVal); + if (Number.isNaN(curFormattedVal)) { + throw new InstrumentationError('Invalid float value'); + } + } + }, removeSpacesAndDashes: () => { if (typeof formattedVal === 'string') { curFormattedVal = formattedVal.replace(/ /g, '').replace(/-/g, ''); diff --git a/test/integrations/destinations/klaviyo/processor/data.ts b/test/integrations/destinations/klaviyo/processor/data.ts index 06c4a3e530..71a10fc39c 100644 --- a/test/integrations/destinations/klaviyo/processor/data.ts +++ b/test/integrations/destinations/klaviyo/processor/data.ts @@ -4,8 +4,10 @@ import { identifyData } from './identifyTestData'; import { screenTestData } from './screenTestData'; import { trackTestData } from './trackTestData'; import { validationTestData } from './validationTestData'; +import { dataV2 } from './dataV2'; export const data = [ + ...dataV2, ...identifyData, ...trackTestData, ...screenTestData, diff --git a/test/integrations/destinations/klaviyo/processor/dataV2.ts b/test/integrations/destinations/klaviyo/processor/dataV2.ts new file mode 100644 index 0000000000..32c3c4206a --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/dataV2.ts @@ -0,0 +1,13 @@ +import { groupTestData } from './groupTestDataV2'; +import { identifyData } from './identifyTestDataV2'; +import { screenTestData } from './screenTestDataV2'; +import { trackTestData } from './trackTestDataV2'; +import { validationTestData } from './validationTestData'; + +export const dataV2 = [ + ...identifyData, + ...trackTestData, + ...screenTestData, + ...groupTestData, + ...validationTestData, +]; diff --git a/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts new file mode 100644 index 0000000000..dcd7fbc38e --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts @@ -0,0 +1,182 @@ +import { Destination } from '../../../../../src/types'; +import { ProcessorTestData } from '../../../testTypes'; +import { + generateMetadata, + generateSimplifiedGroupPayload, + transformResultBuilder, +} from '../../../testUtils'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + apiVersion: 'v2', + privateApiKey: 'dummyPrivateApiKey', + consent: ['email'], + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; + +const headers = { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', +}; + +const endpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; + +const commonOutputSubscriptionProps = { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 678 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, +}; + +const subscriptionRelations = { + list: { + data: { + type: 'list', + id: 'group_list_id', + }, + }, +}; + +export const groupTestData: ProcessorTestData[] = [ + { + id: 'klaviyo-group-test-1', + name: 'klaviyo', + description: 'Simple group call', + scenario: 'Business', + successCriteria: + 'Response should contain only group payload and status code should be 200, for the group payload a subscription payload should be present in the final payload with email and phone', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedGroupPayload({ + userId: 'user123', + groupId: 'group_list_id', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: ['email'], + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }), + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + relationships: subscriptionRelations, + }, + }, + endpoint: endpoint, + headers: headers, + method: 'POST', + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'klaviyo-group-test-2', + name: 'klaviyo', + description: 'Simple group call without groupId', + scenario: 'Business', + successCriteria: + 'Response should contain error message and status code should be 400, as we are not sending groupId in the payload and groupId is a required field for group events', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedGroupPayload({ + userId: 'user123', + groupId: '', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }), + metadata: generateMetadata(2), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'groupId is a required field for group events', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + statusCode: 400, + metadata: generateMetadata(2), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts new file mode 100644 index 0000000000..80ae918af0 --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts @@ -0,0 +1,375 @@ +import { removeUndefinedAndNullValues } from '@rudderstack/integrations-lib'; +import { + overrideDestination, + transformResultBuilder, + generateSimplifiedIdentifyPayload, + generateMetadata, +} from '../../../testUtils'; +import { ProcessorTestData } from '../../../testTypes'; +import { Destination } from '../../../../../src/types'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + apiVersion: 'v2', + privateApiKey: 'dummyPrivateApiKey', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; + +const commonTraits = { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test@rudderstack.com', + phone: '+12 345 578 900', + userId: 'user@1', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + street: '63, Shibuya', + properties: { + listId: 'XUepkK', + subscribe: true, + consent: ['email', 'sms'], + }, +}; + +const commonOutputUserProps = { + external_id: 'user@1', + anonymous_id: '97c46c81-3140-456d-b2a9-690d70aaca35', + email: 'test@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + address1: '63, Shibuya', + }, + properties: { + Flagged: false, + Residence: 'Shibuya', + }, +}; + +const commonOutputSubscriptionProps = { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 578 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + sms: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, +}; +const subscriptionRelations = { + list: { + data: { + type: 'list', + id: 'XUepkK', + }, + }, +}; + +const commonOutputHeaders = { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', +}; + +const anonymousId = '97c46c81-3140-456d-b2a9-690d70aaca35'; +const userId = 'user@1'; +const sentAt = '2021-01-03T17:02:53.195Z'; +const originalTimestamp = '2021-01-03T17:02:53.193Z'; +const userProfileCommonEndpoint = 'https://a.klaviyo.com/api/profile-import'; +const subscribeEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; + +export const identifyData: ProcessorTestData[] = [ + { + id: 'klaviyo-identify-150624-test-1', + name: 'klaviyo', + description: + '150624 -> Identify call with flattenProperties enabled in destination config and subscribe', + scenario: 'Business', + successCriteria: + 'The profile response should contain the flattened properties of the friend object and one request object for subscribe', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { flattenProperties: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: { + ...commonTraits, + friend: { + names: { + first: 'Alice', + last: 'Smith', + }, + age: 25, + }, + }, + }, + anonymousId, + originalTimestamp, + }), + metadata: generateMetadata(2), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: { + ...commonOutputUserProps, + properties: { + ...commonOutputUserProps.properties, + 'friend.age': 25, + 'friend.names.first': 'Alice', + 'friend.names.last': 'Smith', + }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(2), + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + relationships: subscriptionRelations, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(2), + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-150624-test-2', + name: 'klaviyo', + description: + '150624 -> Profile without subscribing the user and get klaviyo id from externalId', + scenario: 'Business', + successCriteria: + 'Response should contain only profile update payload and status code should be 200 as subscribe is set to false in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + externalId: [ + { + type: 'klaviyo-profileId', + id: '12345678', + }, + ], + traits: { + ...commonTraits, + appendList1: 'New Value 1', + appendList2: 'New Value 2', + unappendList1: 'Old Value 1', + unappendList2: 'Old Value 2', + properties: { ...commonTraits.properties, subscribe: false }, + }, + }, + integrations: { + Klaviyo: { + fieldsToUnset: ['Unset1', 'Unset2'], + fieldsToAppend: ['appendList1', 'appendList2'], + fieldsToUnappend: ['unappendList1', 'unappendList2'], + }, + All: true, + }, + anonymousId, + originalTimestamp, + }), + metadata: generateMetadata(4), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + id: '12345678', + attributes: commonOutputUserProps, + meta: { + patch_properties: { + append: { + appendList1: 'New Value 1', + appendList2: 'New Value 2', + }, + unappend: { + unappendList1: 'Old Value 1', + unappendList2: 'Old Value 2', + }, + unset: ['Unset1', 'Unset2'], + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(4), + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-150624-test-5', + name: 'klaviyo', + description: '150624 -> Identify call with enforceEmailAsPrimary enabled in destination config', + scenario: 'Business', + successCriteria: + 'Response should contain two payloads one for profile and other for subscription, response status code should be 200, for the profile updation payload there should be no external_id field in the payload as enforceEmailAsPrimary is set to true in the destination config and the userId should be mapped to _id field in the properties object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: commonTraits, + }, + anonymousId, + originalTimestamp, + }), + metadata: generateMetadata(5), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: removeUndefinedAndNullValues({ + ...commonOutputUserProps, + properties: { + ...commonOutputUserProps.properties, + _id: userId, + }, + // remove external_id from the payload + external_id: undefined, + }), + meta: { + patch_properties: {}, + }, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(5), + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: subscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + relationships: subscriptionRelations, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(5), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/screenTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/screenTestDataV2.ts new file mode 100644 index 0000000000..5ccbed600c --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/screenTestDataV2.ts @@ -0,0 +1,148 @@ +import { Destination } from '../../../../../src/types'; +import { ProcessorTestData } from '../../../testTypes'; +import { + generateMetadata, + generateSimplifiedPageOrScreenPayload, + transformResultBuilder, +} from '../../../testUtils'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + apiVersion: 'v2', + privateApiKey: 'dummyPrivateApiKey', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; + +export const screenTestData: ProcessorTestData[] = [ + { + id: 'klaviyo-screen-150624-test-1', + name: 'klaviyo', + description: '150624 -> Screen event call with properties and contextual traits', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload and status code should be 200, for the event payload should contain properties and contextual traits in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedPageOrScreenPayload( + { + name: 'Viewed Screen', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + integrations: { + klaviyo: { + fieldsToAppend: ['append1'], + }, + }, + context: { + traits: { + id: 'user@1', + age: '22', + email: 'test@rudderstack.com', + phone: '9112340375', + anonymousId: '9c6bd77ea9da3e68', + append1: 'value1', + }, + }, + properties: { + value: 9.99, + currency: 'USD', + PreviouslyVicePresident: true, + YearElected: 1801, + VicePresidents: ['Aaron Burr', 'George Clinton'], + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + 'screen', + ), + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Accept: 'application/json', + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + JSON: { + data: { + type: 'event', + attributes: { + time: '2021-01-25T15:32:56.409Z', + value: 9.99, + value_currency: 'USD', + metric: { + data: { + type: 'metric', + attributes: { + name: 'Viewed Screen', + }, + }, + }, + properties: { + PreviouslyVicePresident: true, + YearElected: 1801, + VicePresidents: ['Aaron Burr', 'George Clinton'], + }, + profile: { + data: { + attributes: { + anonymous_id: '9c6bd77ea9da3e68', + external_id: 'sajal12', + email: 'test@rudderstack.com', + meta: { + patch_properties: { + append: { + append1: 'value1', + }, + }, + }, + phone_number: '9112340375', + properties: { + id: 'user@1', + age: '22', + }, + }, + type: 'profile', + }, + }, + }, + }, + }, + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/trackTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/trackTestDataV2.ts new file mode 100644 index 0000000000..ecea141d38 --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/trackTestDataV2.ts @@ -0,0 +1,293 @@ +import { Destination } from '../../../../../src/types'; +import { ProcessorTestData } from '../../../testTypes'; +import { + generateMetadata, + generateSimplifiedTrackPayload, + generateTrackPayload, + overrideDestination, + transformResultBuilder, +} from '../../../testUtils'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + privateApiKey: 'dummyPrivateApiKey', + apiVersion: 'v2', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; + +const commonTraits = { + id: 'user@1', + age: '22', + anonymousId: '9c6bd77ea9da3e68', +}; + +const commonProps = { + PreviouslVicePresident: true, + YearElected: 1801, + VicePresidents: ['AaronBurr', 'GeorgeClinton'], +}; + +const commonOutputHeaders = { + Accept: 'application/json', + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + revision: '2024-06-15', +}; +const profileAttributes = { + email: 'test@rudderstack.com', + phone_number: '9112340375', + anonymous_id: '9c6bd77ea9da3e68', + properties: { + age: '22', + name: 'Test', + description: 'Sample description', + id: 'user@1', + }, + meta: { + patch_properties: {}, + }, +}; +const eventEndPoint = 'https://a.klaviyo.com/api/events'; + +export const trackTestData: ProcessorTestData[] = [ + { + id: 'klaviyo-track-150624-test-1', + name: 'klaviyo', + description: '150624 -> Simple track event call', + scenario: 'Business', + successCriteria: + 'Response should contain profile and event payload and status code should be 200, for the event payload should contain contextual traits and properties in the payload', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven002', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + name: 'Test', + email: 'test@rudderstack.com', + phone: '9112340375', + description: 'Sample description', + }, + }, + properties: { + ...commonProps, + revenue: 3000, + currency: 'USD', + }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + metadata: generateMetadata(2), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventEndPoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + data: { + type: 'metric', + attributes: { + name: 'TestEven002', + }, + }, + }, + profile: { + data: { + type: 'profile', + attributes: { ...profileAttributes, external_id: 'sajal12' }, + }, + }, + properties: commonProps, + value: 3000, + value_currency: 'USD', + time: '2021-01-25T15:32:56.409Z', + }, + }, + }, + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(2), + }, + ], + }, + }, + }, + { + id: 'klaviyo-track-150624-test-2', + name: 'klaviyo', + description: + '150624 -> Track event call, with make email or phone as primary identifier toggle on', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload with profile object and status code should be 200, for the event payload should contain contextual traits and properties in the payload, and email should be mapped to email and userId should be mapped to external_id as usual', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + description: 'Sample description', + name: 'Test', + email: 'test@rudderstack.com', + phone: '9112340375', + }, + }, + properties: commonProps, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + metadata: generateMetadata(3), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + endpoint: eventEndPoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'event', + attributes: { + metric: { + data: { + type: 'metric', + attributes: { + name: 'TestEven001', + }, + }, + }, + properties: commonProps, + profile: { + data: { + type: 'profile', + attributes: { + ...profileAttributes, + properties: { ...profileAttributes.properties, _id: 'sajal12' }, + }, + }, + }, + time: '2021-01-25T15:32:56.409Z', + }, + }, + }, + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(3), + }, + ], + }, + }, + }, + { + id: 'klaviyo-track-150624-test-3', + name: 'klaviyo', + description: '150624 -> Invalid `value` Field Format', + scenario: 'Business', + successCriteria: + 'Response should contain only event payload with vallue field as object and status code should be 200', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { enforceEmailAsPrimary: true }), + message: generateSimplifiedTrackPayload({ + type: 'track', + event: 'TestEven001', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'sajal12', + context: { + traits: { + ...commonTraits, + description: 'Sample description', + name: 'Test', + email: 'test@rudderstack.com', + phone: '9112340375', + }, + }, + properties: { ...commonProps, value: { price: 9.99 } }, + anonymousId: '9c6bd77ea9da3e68', + originalTimestamp: '2021-01-25T15:32:56.409Z', + }), + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Invalid float value', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + statusCode: 400, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/processor/validationTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/validationTestDataV2.ts new file mode 100644 index 0000000000..10e2d15db0 --- /dev/null +++ b/test/integrations/destinations/klaviyo/processor/validationTestDataV2.ts @@ -0,0 +1,83 @@ +import { Destination } from '../../../../../src/types'; +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata } from '../../../testUtils'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + privateApiKey: 'dummyPrivateApiKey', + apiVersion: 'v2', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; + +export const validationTestData: ProcessorTestData[] = [ + { + id: 'klaviyo-validation-150624-test-1', + name: 'klaviyo', + description: '150624->[Error]: Check for unsupported message type', + scenario: 'Framework', + successCriteria: + 'Response should contain error message and status code should be 400, as we are sending a message type which is not supported by Klaviyo destination and the error message should be Event type random is not supported', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + userId: 'user123', + type: 'random', + groupId: 'XUepkK', + traits: { + subscribe: true, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type random is not supported', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + statusCode: 400, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/klaviyo/router/commonConfig.ts b/test/integrations/destinations/klaviyo/router/commonConfig.ts new file mode 100644 index 0000000000..a1297635eb --- /dev/null +++ b/test/integrations/destinations/klaviyo/router/commonConfig.ts @@ -0,0 +1,199 @@ +import { generateMetadata } from '../../../testUtils'; +import { Destination, RouterTransformationRequest } from '../../../../../src/types'; +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + privateApiKey: 'dummyPrivateApiKey', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; +const destinationV2: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + privateApiKey: 'dummyPrivateApiKey', + apiVersion: 'v2', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; +const getRequest = (apiVersion) => { + return [ + { + destination: apiVersion === 'v2' ? destinationV2 : destination, + metadata: generateMetadata(1), + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'test', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test_1@rudderstack.com', + phone: '+12 345 578 900', + userId: 'Testc', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + properties: { consent: ['email', 'sms'] }, + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + integrations: { All: true }, + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + { + destination: apiVersion === 'v2' ? destinationV2 : destination, + metadata: generateMetadata(2), + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'test', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test@rudderstack.com', + phone: '+12 345 578 900', + userId: 'test', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + properties: { listId: 'XUepkK', subscribe: true, consent: ['email', 'sms'] }, + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + integrations: { All: true }, + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + { + destination: apiVersion === 'v2' ? destinationV2 : destination, + metadata: generateMetadata(3), + message: { + userId: 'user123', + type: 'group', + groupId: 'XUepkK', + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + subscribe: true, + consent: ['email'], + }, + context: { + ip: '14.5.67.21', + library: { name: 'http' }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, + }, + { + destination: apiVersion === 'v2' ? destinationV2 : destination, + metadata: generateMetadata(4), + message: { + userId: 'user123', + type: 'random', + groupId: 'XUepkK', + traits: { subscribe: true }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + ip: '14.5.67.21', + library: { name: 'http' }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, + }, + { + destination: apiVersion === 'v2' ? destinationV2 : destination, + metadata: generateMetadata(5), + message: { + userId: 'user123', + type: 'group', + groupId: '', + traits: { subscribe: true }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: 'email', + }, + ip: '14.5.67.21', + library: { name: 'http' }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }, + }, + ]; +}; +export const routerRequest: RouterTransformationRequest = { + input: getRequest('v1'), + destType: 'klaviyo', +}; +export const routerRequestV2: RouterTransformationRequest = { + input: getRequest('v2'), + destType: 'klaviyo', +}; diff --git a/test/integrations/destinations/klaviyo/router/data.ts b/test/integrations/destinations/klaviyo/router/data.ts index 8866a8a546..8e8c507f48 100644 --- a/test/integrations/destinations/klaviyo/router/data.ts +++ b/test/integrations/destinations/klaviyo/router/data.ts @@ -1,6 +1,8 @@ import { Destination, RouterTransformationRequest } from '../../../../../src/types'; import { RouterTestData } from '../../../testTypes'; +import { routerRequest } from './commonConfig'; import { generateMetadata } from '../../../testUtils'; +import { dataV2 } from './dataV2'; const destination: Destination = { ID: '123', @@ -12,7 +14,6 @@ const destination: Destination = { Config: {}, }, Config: { - publicApiKey: 'dummyPublicApiKey', privateApiKey: 'dummyPrivateApiKey', }, Enabled: true, @@ -20,164 +21,6 @@ const destination: Destination = { Transformations: [], }; -const routerRequest: RouterTransformationRequest = { - input: [ - { - destination, - metadata: generateMetadata(1), - message: { - type: 'identify', - sentAt: '2021-01-03T17:02:53.195Z', - userId: 'test', - channel: 'web', - context: { - os: { name: '', version: '' }, - app: { - name: 'RudderLabs JavaScript SDK', - build: '1.0.0', - version: '1.1.11', - namespace: 'com.rudderlabs.javascript', - }, - traits: { - firstName: 'Test', - lastName: 'Rudderlabs', - email: 'test@rudderstack.com', - phone: '+12 345 578 900', - userId: 'Testc', - title: 'Developer', - organization: 'Rudder', - city: 'Tokyo', - region: 'Kanto', - country: 'JP', - zip: '100-0001', - Flagged: false, - Residence: 'Shibuya', - properties: { consent: ['email', 'sms'] }, - }, - locale: 'en-US', - screen: { density: 2 }, - library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, - campaign: {}, - userAgent: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', - }, - rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', - messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', - anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', - integrations: { All: true }, - originalTimestamp: '2021-01-03T17:02:53.193Z', - }, - }, - { - destination, - metadata: generateMetadata(2), - message: { - type: 'identify', - sentAt: '2021-01-03T17:02:53.195Z', - userId: 'test', - channel: 'web', - context: { - os: { name: '', version: '' }, - app: { - name: 'RudderLabs JavaScript SDK', - build: '1.0.0', - version: '1.1.11', - namespace: 'com.rudderlabs.javascript', - }, - traits: { - firstName: 'Test', - lastName: 'Rudderlabs', - email: 'test@rudderstack.com', - phone: '+12 345 578 900', - userId: 'test', - title: 'Developer', - organization: 'Rudder', - city: 'Tokyo', - region: 'Kanto', - country: 'JP', - zip: '100-0001', - Flagged: false, - Residence: 'Shibuya', - properties: { listId: 'XUepkK', subscribe: true, consent: ['email', 'sms'] }, - }, - locale: 'en-US', - screen: { density: 2 }, - library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, - campaign: {}, - userAgent: - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', - }, - rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', - messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', - anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', - integrations: { All: true }, - originalTimestamp: '2021-01-03T17:02:53.193Z', - }, - }, - { - destination, - metadata: generateMetadata(3), - message: { - userId: 'user123', - type: 'group', - groupId: 'XUepkK', - traits: { subscribe: true }, - context: { - traits: { - email: 'test@rudderstack.com', - phone: '+12 345 678 900', - consent: ['email'], - }, - ip: '14.5.67.21', - library: { name: 'http' }, - }, - timestamp: '2020-01-21T00:21:34.208Z', - }, - }, - { - destination, - metadata: generateMetadata(4), - message: { - userId: 'user123', - type: 'random', - groupId: 'XUepkK', - traits: { subscribe: true }, - context: { - traits: { - email: 'test@rudderstack.com', - phone: '+12 345 678 900', - consent: 'email', - }, - ip: '14.5.67.21', - library: { name: 'http' }, - }, - timestamp: '2020-01-21T00:21:34.208Z', - }, - }, - { - destination, - metadata: generateMetadata(5), - message: { - userId: 'user123', - type: 'group', - groupId: '', - traits: { subscribe: true }, - context: { - traits: { - email: 'test@rudderstack.com', - phone: '+12 345 678 900', - consent: 'email', - }, - ip: '14.5.67.21', - library: { name: 'http' }, - }, - timestamp: '2020-01-21T00:21:34.208Z', - }, - }, - ], - destType: 'klaviyo', -}; - export const data: RouterTestData[] = [ { id: 'klaviyo-router-test-1', @@ -301,7 +144,7 @@ export const data: RouterTestData[] = [ type: 'profile', attributes: { external_id: 'test', - email: 'test@rudderstack.com', + email: 'test_1@rudderstack.com', first_name: 'Test', last_name: 'Rudderlabs', phone_number: '+12 345 578 900', @@ -368,4 +211,5 @@ export const data: RouterTestData[] = [ }, }, }, + ...dataV2, ]; diff --git a/test/integrations/destinations/klaviyo/router/dataV2.ts b/test/integrations/destinations/klaviyo/router/dataV2.ts new file mode 100644 index 0000000000..714560fdfd --- /dev/null +++ b/test/integrations/destinations/klaviyo/router/dataV2.ts @@ -0,0 +1,1263 @@ +import { Destination } from '../../../../../src/types'; +import { RouterTestData } from '../../../testTypes'; +import { routerRequestV2 } from './commonConfig'; +import { generateMetadata, transformResultBuilder } from '../../../testUtils'; + +const destination: Destination = { + ID: '123', + Name: 'klaviyo', + DestinationDefinition: { + ID: '123', + Name: 'klaviyo', + DisplayName: 'klaviyo', + Config: {}, + }, + Config: { + privateApiKey: 'dummyPrivateApiKey', + apiVersion: 'v2', + }, + Enabled: true, + WorkspaceID: '123', + Transformations: [], +}; +const userProfileCommonEndpoint = 'https://a.klaviyo.com/api/profile-import'; + +const headers = { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', +}; +const subscriptionRelations = { + list: { + data: { + type: 'list', + id: 'XUepkK', + }, + }, +}; + +const commonOutputSubscriptionProps = { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 678 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, +}; + +const alreadyTransformedEvent = { + message: { + output: transformResultBuilder({ + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + relationships: subscriptionRelations, + }, + }, + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: headers, + method: 'POST', + userId: '', + }), + statusCode: 200, + }, + metadata: generateMetadata(10), + destination, +}; + +export const dataV2: RouterTestData[] = [ + { + id: 'klaviyo-router-150624-test-1', + name: 'klaviyo', + description: '150624 -> Basic Router Test to test multiple payloads', + scenario: 'Framework', + successCriteria: + 'All the subscription events from same type of call should be batched. This case does not contain any events which can be batched', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequestV2, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + // identify 2 with subscriptipon request + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'test', + email: 'test@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + anonymous_id: '97c46c81-3140-456d-b2a9-690d70aaca35', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + }, + properties: { Flagged: false, Residence: 'Shibuya' }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 578 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + sms: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, + }, + relationships: subscriptionRelations, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(2)], + batched: true, + statusCode: 200, + destination, + }, + { + // identify 1 + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'test', + email: 'test_1@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + anonymous_id: '97c46c81-3140-456d-b2a9-690d70aaca35', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + }, + properties: { Flagged: false, Residence: 'Shibuya' }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(1)], + batched: true, + statusCode: 200, + destination, + }, + { + // group call subscription request + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 678 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, + }, + relationships: subscriptionRelations, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(3)], + batched: true, + statusCode: 200, + destination, + }, + { + metadata: [generateMetadata(4)], + batched: false, + statusCode: 400, + error: 'Event type random is not supported', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'native', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + destination, + }, + { + metadata: [generateMetadata(5)], + batched: false, + statusCode: 400, + error: 'groupId is a required field for group events', + statTags: { + destType: 'KLAVIYO', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'native', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + destination, + }, + ], + }, + }, + }, + }, + { + id: 'klaviyo-router-150624-test-2', + name: 'klaviyo', + description: '150624 -> Router Test to test batching based upon same message type', + scenario: 'Framework', + successCriteria: + 'All the subscription events from same type of call should be batched. This case does not contain any events which can be batched', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + metadata: generateMetadata(1), + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'test', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test_1@rudderstack.com', + phone: '+12 345 578 900', + userId: 'Testc', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + properties: { listId: 'XUepkK', subscribe: true, consent: ['email'] }, + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + integrations: { All: true }, + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + { + destination, + metadata: generateMetadata(2), + message: { + type: 'identify', + sentAt: '2021-01-03T17:02:53.195Z', + userId: 'test', + channel: 'web', + context: { + os: { name: '', version: '' }, + app: { + name: 'RudderLabs JavaScript SDK', + build: '1.0.0', + version: '1.1.11', + namespace: 'com.rudderlabs.javascript', + }, + traits: { + firstName: 'Test', + lastName: 'Rudderlabs', + email: 'test@rudderstack.com', + phone: '+12 345 578 900', + userId: 'test', + title: 'Developer', + organization: 'Rudder', + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + Flagged: false, + Residence: 'Shibuya', + properties: { listId: 'XUepkK', subscribe: true, consent: ['email', 'sms'] }, + }, + locale: 'en-US', + screen: { density: 2 }, + library: { name: 'RudderLabs JavaScript SDK', version: '1.1.11' }, + campaign: {}, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:84.0) Gecko/20100101 Firefox/84.0', + }, + rudderId: '8f8fa6b5-8e24-489c-8e22-61f23f2e364f', + messageId: '2116ef8c-efc3-4ca4-851b-02ee60dad6ff', + anonymousId: '97c46c81-3140-456d-b2a9-690d70aaca35', + integrations: { All: true }, + originalTimestamp: '2021-01-03T17:02:53.193Z', + }, + }, + ], + destType: 'klaviyo', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + // profile for identify 1 + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'test', + email: 'test_1@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + anonymous_id: '97c46c81-3140-456d-b2a9-690d70aaca35', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + }, + properties: { Flagged: false, Residence: 'Shibuya' }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + // profile for identify 2 + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'test', + email: 'test@rudderstack.com', + first_name: 'Test', + last_name: 'Rudderlabs', + phone_number: '+12 345 578 900', + anonymous_id: '97c46c81-3140-456d-b2a9-690d70aaca35', + title: 'Developer', + organization: 'Rudder', + location: { + city: 'Tokyo', + region: 'Kanto', + country: 'JP', + zip: '100-0001', + }, + properties: { Flagged: false, Residence: 'Shibuya' }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + // subscriptiopn for both identify 1 and 2 + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test_1@rudderstack.com', + phone_number: '+12 345 578 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 578 900', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + sms: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, + }, + relationships: subscriptionRelations, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(1), generateMetadata(2)], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, + { + id: 'klaviyo-router-150624-test-3', + name: 'klaviyo', + description: + '150624 -> Router tests to have some anonymous track event, some identify events with subscription and some identified track event', + scenario: 'Framework', + successCriteria: + 'All the subscription events under same message type should be batched and respective profile requests should also be placed in same batched request', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + alreadyTransformedEvent, + { + message: { + // user 1 track call with userId and anonymousId + channel: 'web', + context: { + traits: { + email: 'testklaviyo1@email.com', + firstname: 'Test Klaviyo 1', + }, + }, + type: 'track', + anonymousId: 'anonTestKlaviyo1', + userId: 'testKlaviyo1', + event: 'purchase', + properties: { + price: '12', + }, + }, + metadata: generateMetadata(1, 'testKlaviyo1'), + destination, + }, + { + message: { + // Anonymous Tracking -> user 2 track call with anonymousId only + channel: 'web', + context: { + traits: {}, + }, + type: 'track', + anonymousId: 'anonTestKlaviyo2', + event: 'viewed product', + properties: { + price: '120', + }, + }, + metadata: generateMetadata(2), + destination, + }, + { + message: { + // user 2 idenitfy call with anonymousId and subscription + channel: 'web', + traits: { + email: 'testklaviyo2@rs.com', + firstname: 'Test Klaviyo 2', + properties: { + subscribe: true, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + anonymousId: 'anonTestKlaviyo2', + type: 'identify', + userId: 'testKlaviyo2', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(3, 'testKlaviyo2'), + destination, + }, + { + message: { + // user 2 track call with email only + channel: 'web', + context: { + traits: { + email: 'testklaviyo2@email.com', + firstname: 'Test Klaviyo 2', + }, + }, + type: 'track', + userId: 'testKlaviyo2', + event: 'purchase', + properties: { + price: '120', + }, + }, + metadata: generateMetadata(4, 'testKlaviyo2'), + destination, + }, + { + message: { + // for user 3 identify call without anonymousId and subscriptiontraits: + channel: 'web', + traits: { + email: 'testklaviyo3@rs.com', + firstname: 'Test Klaviyo 3', + properties: { + subscribe: true, + listId: 'configListId', + consent: ['email', 'sms'], + }, + }, + context: {}, + type: 'identify', + userId: 'testKlaviyo3', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(5, 'testKlaviyo3'), + destination, + }, + ], + destType: 'klaviyo', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: transformResultBuilder({ + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: commonOutputSubscriptionProps, + relationships: subscriptionRelations, + }, + }, + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: headers, + method: 'POST', + userId: '', + }), + metadata: [generateMetadata(10)], + batched: false, + statusCode: 200, + destination, + }, + { + // user 1 track call with userId and anonymousId + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '12', + }, + profile: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo1', + anonymous_id: 'anonTestKlaviyo1', + email: 'testklaviyo1@email.com', + first_name: 'Test Klaviyo 1', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'purchase', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1, 'testKlaviyo1')], + batched: false, + statusCode: 200, + destination, + }, + { + // anonn event for user 2 + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '120', + }, + profile: { + data: { + type: 'profile', + attributes: { + anonymous_id: 'anonTestKlaviyo2', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'viewed product', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(2)], + batched: false, + statusCode: 200, + destination, + }, + { + // identify call for user 2 and user 3 with subscription + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo2', + anonymous_id: 'anonTestKlaviyo2', + email: 'testklaviyo2@rs.com', + first_name: 'Test Klaviyo 2', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo3', + email: 'testklaviyo3@rs.com', + first_name: 'Test Klaviyo 3', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'testklaviyo2@rs.com', + subscriptions: { + email: { + marketing: { + consent: 'SUBSCRIBED', + }, + }, + }, + }, + }, + { + type: 'profile', + attributes: { + email: 'testklaviyo3@rs.com', + subscriptions: { + email: { + marketing: { + consent: 'SUBSCRIBED', + }, + }, + }, + }, + }, + ], + }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'configListId', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(3, 'testKlaviyo2'), generateMetadata(5, 'testKlaviyo3')], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '120', + }, + profile: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo2', + email: 'testklaviyo2@email.com', + first_name: 'Test Klaviyo 2', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'purchase', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(4, 'testKlaviyo2')], + batched: false, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, + { + id: 'klaviyo-router-150624-test-4', + name: 'klaviyo', + description: '150624 -> Retl Router tests to have retl ', + scenario: 'Framework', + successCriteria: + 'All the subscription events with same message type should be batched and respective profile requests should also be placed in same batched request', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + mappedToDestination: 'true', + externalId: [ + { + id: 'testklaviyo1@email.com', + identifierType: 'email', + type: 'KLAVIYO-profile_v2', + }, + ], + traits: { + properties: { + subscribe: false, + }, + email: 'testklaviyo1@email.com', + firstname: 'Test Klaviyo 1', + }, + }, + type: 'identify', + anonymousId: 'anonTestKlaviyo1', + userId: 'testKlaviyo1', + }, + metadata: generateMetadata(1), + destination, + }, + { + message: { + channel: 'web', + traits: { + email: 'testklaviyo2@rs.com', + firstname: 'Test Klaviyo 2', + properties: { + subscribe: true, + listId: 'configListId', + consent: ['email'], + }, + }, + context: { + mappedToDestination: 'true', + externalId: [ + { + id: 'testklaviyo2@rs.com', + identifierType: 'email', + type: 'KLAVIYO-profile_v2', + }, + ], + }, + anonymousId: 'anonTestKlaviyo2', + type: 'identify', + userId: 'testKlaviyo2', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(2), + destination, + }, + ], + destType: 'klaviyo', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testklaviyo2@rs.com', + anonymous_id: 'anonTestKlaviyo2', + email: 'testklaviyo2@rs.com', + first_name: 'Test Klaviyo 2', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'testklaviyo2@rs.com', + subscriptions: { + email: { + marketing: { + consent: 'SUBSCRIBED', + }, + }, + }, + }, + }, + ], + }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'configListId', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(2)], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testklaviyo1@email.com', + anonymous_id: 'anonTestKlaviyo1', + email: 'testklaviyo1@email.com', + first_name: 'Test Klaviyo 1', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(1)], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, +]; diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index a52f47fa7c..bec79f8570 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -566,11 +566,11 @@ export const validateTestWithZOD = (testPayload: TestCaseData, response: any) => // ----------------------------- // Helper functions -export const generateMetadata = (jobId: number): any => { +export const generateMetadata = (jobId: number, userId?: string): any => { return { jobId, attemptNum: 1, - userId: 'default-userId', + userId: userId || 'default-userId', sourceId: 'default-sourceId', destinationId: 'default-destinationId', workspaceId: 'default-workspaceId', From 5e22fa0555b98e83ca1b11f16e87f367d1f85ca8 Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti <110057617+aanshi07@users.noreply.github.com> Date: Wed, 31 Jul 2024 21:40:24 +0530 Subject: [PATCH 106/201] feat: updated examples for swagger (#3526) --- .../examples/processor/failure.yaml | 50 +++--- .../examples/processor/success.yaml | 79 +++------- .../components/examples/router/failure.yaml | 143 +++--------------- .../components/examples/router/success.yaml | 81 ++++------ swagger/components/schemas/request.yaml | 5 + .../schemas/routerTransformationRequest.yaml | 2 +- 6 files changed, 95 insertions(+), 265 deletions(-) create mode 100644 swagger/components/schemas/request.yaml diff --git a/swagger/components/examples/processor/failure.yaml b/swagger/components/examples/processor/failure.yaml index 3c7f8c13a8..cddfd1cd21 100644 --- a/swagger/components/examples/processor/failure.yaml +++ b/swagger/components/examples/processor/failure.yaml @@ -1,40 +1,26 @@ metadata: - sourceId: '27O0bmEEx3GgfmEhZHUcPwJQVWC' - workspaceId: '27O0bhB6p5ehfOWeeZlOSsSDTLg' - namespace: '' - instanceId: '1' - sourceType: 'HTTP' - sourceCategory: '' - trackingPlanId: '' - trackingPlanVersion: 0 - sourceTpConfig: null - mergedTpConfig: null - destinationId: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - jobRunId: '' + destinationId: '2JIqVoWNvSOHa9ppKOqSoxxx' jobId: 1 - sourceBatchId: '' - sourceJobId: '' - sourceJobRunId: '' - sourceTaskId: '' - sourceTaskRunId: '' - recordId: null - destinationType: 'PINTEREST_TAG' - messageId: 'cededd59-671c-4a2e-a89a-6461ed662ab9' - oauthAccessToken: '' - messageIds: null - rudderId: '<<>>anon-id<<>>testUser' - receivedAt: '2023-01-01T14:15:41.731+05:30' eventName: 'Product Viewed' eventType: 'track' - sourceDefinitionId: '1b6gJdqOPOCadT3cddw8eidV591' - destinationDefinitionId: '' + sourceId: '2ifsnRxzoONtZeIoGxgNWsr4xx' + sourceCategory: '' + attemptNum: 0 + receivedAt: '2024-07-17T16:45:40.114+05:30' + createdAt: '2024-07-17T11:15:41.140Z' + firstAttemptedAt: '' + transformAt: 'router' + workspaceId: '2hSS1hZ8kuCpUZAAYsQucAFdxxx' + secret: null + workerAssignedTime: '2024-07-17T16:45:41.264239+05:30' + dontBatch: false + traceparent: '' statusCode: 400 -error: Random is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting +error: Missing required value from 'userIdOnly' statTags: - errorCategory: 'platform' - implementation: 'cdkV2' - destType: 'PINTEREST_TAG' + errorCategory: 'dataValidation' + implementation: 'native' + destType: 'JUNE' module: 'destination' feature: 'processor' - destinationId: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - workspaceId: '27O0bhB6p5ehfOWeeZlOSsSDTLg' + destinationId: '2JIqVoWNvSOHa9ppKOqSoxxx' diff --git a/swagger/components/examples/processor/success.yaml b/swagger/components/examples/processor/success.yaml index 08924c8813..7d5325ccf5 100644 --- a/swagger/components/examples/processor/success.yaml +++ b/swagger/components/examples/processor/success.yaml @@ -1,72 +1,37 @@ output: body: JSON: - event_time: 1672564081 - event_source_url: https://www.website.com/product/path - action_source: offline - event_id: 6ee69cf1-ce37-4287-9a0f-8b8453219082 - app_id: '' - advertiser_id: 'advertiserId123' - user_data: - em: - - b9ecbd1d999a0f17d442a08971caeea92d770dba89ac900688ecede233d652df - ph: - - 92b5072176e723878b5e06ff3ca61898e4eb74e8c46642a0f2db800b17364ab0 - ge: - - 62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a - ln: - - dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251 - fn: - - 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 - client_ip_address: '[::1]' - custom_data: - num_items: 11 - content_ids: - - '123' - contents: - - quantity: 11 - item_price: '13.49' - event_name: add_to_cart + anonymousId: 'abc123' + userId: '123' + timestamp: '2022-01-20T13:39:21.032Z' JSON_ARRAY: {} XML: {} FORM: {} version: '1' type: REST method: POST - endpoint: https://ct.pinterest.com/events/v3 + endpoint: https://api.june.so/api/identify headers: Content-Type: application/json params: {} files: {} userId: '' -metadata: - sourceId: 27O0bmEEx3GgfmEhZHUcPwJQVWC - workspaceId: 27O0bhB6p5ehfOWeeZlOSsSDTLg - namespace: '' - instanceId: '1' - sourceType: HTTP - sourceCategory: '' - trackingPlanId: '' - trackingPlanVersion: 0 - sourceTpConfig: - mergedTpConfig: - destinationId: 2JIqVoWNvSOHa9ppKOqSo4hPuc0 - jobRunId: '' - jobId: 1 - sourceBatchId: '' - sourceJobId: '' - sourceJobRunId: '' - sourceTaskId: '' - sourceTaskRunId: '' - recordId: - destinationType: PINTEREST_TAG - messageId: 6ee69cf1-ce37-4287-9a0f-8b8453219082 - oauthAccessToken: '' - messageIds: - rudderId: '<<>>anon-id<<>>testUser' - receivedAt: '2023-01-01T14:38:01.482+05:30' - eventName: Product Added - eventType: track - sourceDefinitionId: 1b6gJdqOPOCadT3cddw8eidV591 - destinationDefinitionId: '' + metadata: + userId: '<<>>12345<<>>12345' + jobId: 1 + sourceId: '2ifsnRxzoONtZeIoGxgNWsr4xx' + sourceCategory: '' + destinationId: '2JIqVoWNvSOHa9ppKOqSxxx' + attemptNum: 0 + receivedAt: '2024-07-17T16:45:40.114+05:30' + createdAt: '2024-07-17T11:15:41.140Z' + firstAttemptedAt: '' + transformAt: 'router' + workspaceId: '2hSS1hZ8kuCpUZAAYsQucAFdxxx' + secret: null + workerAssignedTime: '2024-07-17T16:45:41.264239+05:30' + dontBatch: false + traceparent: '' + eventName: 'Product Added' + eventType: 'track' statusCode: 200 diff --git a/swagger/components/examples/router/failure.yaml b/swagger/components/examples/router/failure.yaml index c592bb47cd..4f14d66701 100644 --- a/swagger/components/examples/router/failure.yaml +++ b/swagger/components/examples/router/failure.yaml @@ -1,130 +1,33 @@ metadata: - - sourceId: '27O0bmEEx3GgfmEhZHUcPwJQVWC' - workspaceId: '27O0bhB6p5ehfOWeeZlOSsSDTLg' - namespace: '' - instanceId: '1' - sourceType: 'HTTP' + - jobId: 2 + destinationId: '2JIqVoWNvSOHa9ppKOqSoxxx' + sourceId: '2ifsnRxzoONtZeIoGxgNWsr4xx' sourceCategory: '' - trackingPlanId: '' - trackingPlanVersion: 0 - sourceTpConfig: null - mergedTpConfig: null - destinationId: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - jobRunId: '' - jobId: 1 - sourceBatchId: '' - sourceJobId: '' - sourceJobRunId: '' - sourceTaskId: '' - sourceTaskRunId: '' - recordId: null - destinationType: 'PINTEREST_TAG' - messageId: 'cededd59-671c-4a2e-a89a-6461ed662ab9' - oauthAccessToken: '' - messageIds: null - rudderId: '<<>>anon-id<<>>testUser' - receivedAt: '2023-01-01T14:15:41.731+05:30' - eventName: 'Product Viewed' - eventType: 'track' - sourceDefinitionId: '1b6gJdqOPOCadT3cddw8eidV591' - destinationDefinitionId: '' + attemptNum: 0 + receivedAt: '2024-07-17T16:45:40.114+05:30' + createdAt: '2024-07-17T11:15:41.140Z' + firstAttemptedAt: '' + transformAt: 'router' + workspaceId: '2hSS1hZ8kuCpUZAAYsQucAFdxxx' + secret: null + workerAssignedTime: '2024-07-17T16:45:41.264239+05:30' + dontBatch: false + traceparent: '' destination: - ID: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - Name: 'Pinterest-test' DestinationDefinition: - ID: '1s0w2bMAleYngscZRgH1ExynlpT' - Name: 'PINTEREST_TAG' - DisplayName: 'Pinterest Tag' - Config: - cdkV2TestThreshold: 1 - cdkV2Enabled: true - destConfig: - defaultConfig: - - 'tagId' - - 'appId' - - 'advertiserId' - - 'sendingUnHashedData' - - 'enableDeduplication' - - 'deduplicationKey' - - 'customProperties' - - 'eventsMapping' - - 'enhancedMatch' - - 'blacklistedEvents' - - 'whitelistedEvents' - - 'eventFilteringOption' - web: - - 'useNativeSDK' - - 'oneTrustCookieCategories' - excludeKeys: [] - includeKeys: - - 'tagId' - - 'advertiserId' - - 'appId' - - 'customProperties' - - 'eventsMapping' - - 'enhancedMatch' - - 'enableDeduplication' - - 'deduplicationKey' - - 'blacklistedEvents' - - 'whitelistedEvents' - - 'oneTrustCookieCategories' - - 'eventFilteringOption' - saveDestinationResponse: false - secretKeys: [] - supportedSourceTypes: - - 'android' - - 'ios' - - 'web' - - 'unity' - - 'amp' - - 'cloud' - - 'warehouse' - - 'reactnative' - - 'flutter' - - 'cordova' - transformAt: 'router' - transformAtV1: 'router' - ResponseRules: {} + ID: '1s0w2bMAleYngscZRgH1Exx' + Name: 'abc_tag' Config: - advertiserId: 'advertiserId123' - appId: '' - apiVersion: 'newApi' - adAccountId: 'accountId123' - conversionToken: 'conversionToken123' - sendAsCustomEvent: false - blacklistedEvents: - - eventName: '' - customProperties: - - properties: '' - deduplicationKey: '' - enableDeduplication: false - enhancedMatch: false - eventFilteringOption: 'disable' - eventsMapping: - - from: 'Product Added' - to: 'AddToCart' - - from: 'Product Viewed' - to: 'ViewCategory' - - from: 'Product Seen' - to: 'PageVisit' - sendingUnHashedData: true - tagId: 'Techno@2020' - whitelistedEvents: - - eventName: '' - Enabled: true - WorkspaceID: '27O0bhB6p5ehfOWeeZlOSsSDTLg' - Transformations: [] - IsProcessorEnabled: true - RevisionID: '2JgW8QPyFsDvodPYShZ29XH3sKB' + apiKey: '93AEyDLvfpbRxx12' + ID: 'june123' batched: false statusCode: 400 -error: "Random is not mapped in UI. Make sure to map the event in UI or enable the 'send as custom event' setting" +error: 'Missing required value from "userIdOnly"' statTags: + destType: 'JUNE' errorCategory: 'dataValidation' - errorType: 'configuration' - destType: 'PINTEREST_TAG' - module: 'destination' - implementation: 'cdkV2' + errorType: 'instrumentation' feature: 'router' - destinationId: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - workspaceId: '27O0bhB6p5ehfOWeeZlOSsSDTLg' + implementation: 'native' + module: 'destination' + destinationId: '2JIqVoWNvSOHa9ppKOqSoxxx' diff --git a/swagger/components/examples/router/success.yaml b/swagger/components/examples/router/success.yaml index 9d0f80807d..6eeefbf595 100644 --- a/swagger/components/examples/router/success.yaml +++ b/swagger/components/examples/router/success.yaml @@ -1,71 +1,42 @@ body: JSON: - event_time: 1672564081 - event_source_url: 'https://www.website.com/product/path' - action_source: offline - event_id: '6ee69cf1-ce37-4287-9a0f-8b8453219082' - app_id: '' - advertiser_id: 'advertiserId123' - user_data: - em: - - 'b9ecbd1d999a0f17d442a08971caeea92d770dba89ac900688ecede233d652df' - ph: - - '92b5072176e723878b5e06ff3ca61898e4eb74e8c46642a0f2db800b17364ab0' - ge: - - '62c66a7a5dd70c3146618063c344e531e6d4b59e379808443ce962b3abd63c5a' - ln: - - 'dcf000c2386fb76d22cefc0d118a8511bb75999019cd373df52044bccd1bd251' - fn: - - '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08' - client_ip_address: '[::1]' - custom_data: - num_items: 11 - content_ids: - - '123' - contents: - - quantity: 11 - item_price: '13.49' - event_name: add_to_cart + anonymousId: 'ab12' + timestamp: '2022-01-20T13:39:21.032Z' + traits: + age: 25 + email: 'johndoe@gmail.com' + name: 'John Doe' + userId: '12' JSON_ARRAY: {} XML: {} FORM: {} version: '1' type: REST method: POST -endpoint: 'https://ct.pinterest.com/events/v3' +endpoint: 'https://api.june.so/api/identify' headers: Content-Type: 'application/json' params: {} files: {} userId: '' +destination: + Config: + apiKey: '93AEyDLvfpbRxxx' + ID: 'june123' metadata: - sourceId: '27O0bmEEx3GgfmEhZHUcPwJQVWC' - workspaceId: '27O0bhB6p5ehfOWeeZlOSsSDTLg' - namespace: '' - instanceId: '1' - sourceType: HTTP - sourceCategory: '' - trackingPlanId: '' - trackingPlanVersion: 0 - sourceTpConfig: null - mergedTpConfig: null - destinationId: '2JIqVoWNvSOHa9ppKOqSo4hPuc0' - jobRunId: '' + userId: '<<>>123456<<>>123456' jobId: 1 - sourceBatchId: '' - sourceJobId: '' - sourceJobRunId: '' - sourceTaskId: '' - sourceTaskRunId: '' - recordId: null - destinationType: PINTEREST_TAG - messageId: '6ee69cf1-ce37-4287-9a0f-8b8453219082' - oauthAccessToken: '' - messageIds: null - rudderId: '<<>>anon-id<<>>testUser' - receivedAt: '2023-01-01T14:38:01.482+05:30' - eventName: Product Added - eventType: track - sourceDefinitionId: '1b6gJdqOPOCadT3cddw8eidV591' - destinationDefinitionId: '' + sourceId: '2ifsnRxzoONtZeIoGxgNWsr4xx' + sourceCategory: '' + destinationId: '2JIqVoWNvSOHa9ppKOqSoxxx' + attemptNum: 0 + receivedAt: '2024-07-17T16:45:40.114+05:30' + createdAt: '2024-07-17T11:15:41.140Z' + firstAttemptedAt: '' + transformAt: 'router' + workspaceId: '2hSS1hZ8kuCpUZAAYsQucAFdxxx' + secret: null + workerAssignedTime: '2024-07-17T16:45:41.264239+05:30' + dontBatch: false + traceparent: '' statusCode: 200 diff --git a/swagger/components/schemas/request.yaml b/swagger/components/schemas/request.yaml new file mode 100644 index 0000000000..c0f9117bf8 --- /dev/null +++ b/swagger/components/schemas/request.yaml @@ -0,0 +1,5 @@ +title: request +type: object +parameters: + query: + type: string diff --git a/swagger/components/schemas/routerTransformationRequest.yaml b/swagger/components/schemas/routerTransformationRequest.yaml index 90d29997cc..2ae2380c51 100644 --- a/swagger/components/schemas/routerTransformationRequest.yaml +++ b/swagger/components/schemas/routerTransformationRequest.yaml @@ -7,7 +7,7 @@ properties: type: object properties: request: - type: object + $ref: './request.yaml' message: type: object metadata: From d0e6d80750c8b4b12470d6ea9360bf95a80b6cc3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 31 Jul 2024 16:17:16 +0000 Subject: [PATCH 107/201] chore(release): 1.73.0 --- CHANGELOG.md | 18 ++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6bdbe97920..61b7025202 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.73.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.2...v1.73.0) (2024-07-31) + + +### Features + +* onboard cordial source ([#3593](https://github.com/rudderlabs/rudder-transformer/issues/3593)) ([cdea69c](https://github.com/rudderlabs/rudder-transformer/commit/cdea69c1ad368c236c5a6fba5f475e491e692280)) + + +### Bug Fixes + +* add validation for cordial destination ([#3599](https://github.com/rudderlabs/rudder-transformer/issues/3599)) ([b7860a5](https://github.com/rudderlabs/rudder-transformer/commit/b7860a5b2b87fb61aaff8c68a904ac996d63efd3)) +* added support for ga4 v2 hybrid mode ([#3586](https://github.com/rudderlabs/rudder-transformer/issues/3586)) ([dedca07](https://github.com/rudderlabs/rudder-transformer/commit/dedca0796ee12478d57e020ef3c254afabc6e105)) +* codeowners file ([#3601](https://github.com/rudderlabs/rudder-transformer/issues/3601)) ([3ddf9e2](https://github.com/rudderlabs/rudder-transformer/commit/3ddf9e208702f27cbba80b032c3ed681a70c518f)) +* lint error ([1f9b83f](https://github.com/rudderlabs/rudder-transformer/commit/1f9b83ff6cc24a604c2373f10a1fedb5f879ea3c)) +* queryID aloglia discrepancy ([#3597](https://github.com/rudderlabs/rudder-transformer/issues/3597)) ([ebf9e3f](https://github.com/rudderlabs/rudder-transformer/commit/ebf9e3fa785a2372e680cec65a9a27187d7f0415)) +* update getConversionActionId function for gaoc ([#3594](https://github.com/rudderlabs/rudder-transformer/issues/3594)) ([68367f5](https://github.com/rudderlabs/rudder-transformer/commit/68367f5227c96f2700a773018b991b1e87a0774d)) +* update response handler for array type response ([d74178f](https://github.com/rudderlabs/rudder-transformer/commit/d74178f81911f029d897eed6d33939a0115829ae)) + ### [1.72.4](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.3...v1.72.4) (2024-07-25) diff --git a/package-lock.json b/package-lock.json index 5d5d004837..5433e52331 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.72.4", + "version": "1.73.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.72.4", + "version": "1.73.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 7244147d32..01f2d39470 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.72.4", + "version": "1.73.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 749f74fc443ea74949e7b418a25976675ac06206 Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Wed, 31 Jul 2024 21:53:04 +0530 Subject: [PATCH 108/201] chore: update change log remove irrelevant changes --- CHANGELOG.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61b7025202..132bff6f10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,18 +7,9 @@ All notable changes to this project will be documented in this file. See [standa ### Features -* onboard cordial source ([#3593](https://github.com/rudderlabs/rudder-transformer/issues/3593)) ([cdea69c](https://github.com/rudderlabs/rudder-transformer/commit/cdea69c1ad368c236c5a6fba5f475e491e692280)) - ### Bug Fixes -* add validation for cordial destination ([#3599](https://github.com/rudderlabs/rudder-transformer/issues/3599)) ([b7860a5](https://github.com/rudderlabs/rudder-transformer/commit/b7860a5b2b87fb61aaff8c68a904ac996d63efd3)) -* added support for ga4 v2 hybrid mode ([#3586](https://github.com/rudderlabs/rudder-transformer/issues/3586)) ([dedca07](https://github.com/rudderlabs/rudder-transformer/commit/dedca0796ee12478d57e020ef3c254afabc6e105)) -* codeowners file ([#3601](https://github.com/rudderlabs/rudder-transformer/issues/3601)) ([3ddf9e2](https://github.com/rudderlabs/rudder-transformer/commit/3ddf9e208702f27cbba80b032c3ed681a70c518f)) -* lint error ([1f9b83f](https://github.com/rudderlabs/rudder-transformer/commit/1f9b83ff6cc24a604c2373f10a1fedb5f879ea3c)) -* queryID aloglia discrepancy ([#3597](https://github.com/rudderlabs/rudder-transformer/issues/3597)) ([ebf9e3f](https://github.com/rudderlabs/rudder-transformer/commit/ebf9e3fa785a2372e680cec65a9a27187d7f0415)) -* update getConversionActionId function for gaoc ([#3594](https://github.com/rudderlabs/rudder-transformer/issues/3594)) ([68367f5](https://github.com/rudderlabs/rudder-transformer/commit/68367f5227c96f2700a773018b991b1e87a0774d)) -* update response handler for array type response ([d74178f](https://github.com/rudderlabs/rudder-transformer/commit/d74178f81911f029d897eed6d33939a0115829ae)) ### [1.72.4](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.3...v1.72.4) (2024-07-25) From c2d7555dcea5e476f276eec5926d392f58dbd7fa Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:16:34 +0530 Subject: [PATCH 109/201] fix: fb custom audience version upgrade from v18 to v20 (#3604) fix: fb custom audience version upgrade --- .../destinations/fb_custom_audience/config.js | 2 +- .../fb_custom_audience/util.test.js | 2 +- .../fb_custom_audience/router/data.ts | 20 +++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/v0/destinations/fb_custom_audience/config.js b/src/v0/destinations/fb_custom_audience/config.js index 284ab0d4a4..39ca2d04c4 100644 --- a/src/v0/destinations/fb_custom_audience/config.js +++ b/src/v0/destinations/fb_custom_audience/config.js @@ -1,4 +1,4 @@ -const BASE_URL = 'https://graph.facebook.com/v18.0'; +const BASE_URL = 'https://graph.facebook.com/v20.0'; function getEndPoint(audienceId) { return `${BASE_URL}/${audienceId}/users`; diff --git a/src/v0/destinations/fb_custom_audience/util.test.js b/src/v0/destinations/fb_custom_audience/util.test.js index 60e0aff464..5c8eb15b71 100644 --- a/src/v0/destinations/fb_custom_audience/util.test.js +++ b/src/v0/destinations/fb_custom_audience/util.test.js @@ -18,7 +18,7 @@ const basePayload = { const baseResponse = { version: '1', type: 'REST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', diff --git a/test/integrations/destinations/fb_custom_audience/router/data.ts b/test/integrations/destinations/fb_custom_audience/router/data.ts index 72438e74b0..ab9bfee973 100644 --- a/test/integrations/destinations/fb_custom_audience/router/data.ts +++ b/test/integrations/destinations/fb_custom_audience/router/data.ts @@ -28,7 +28,7 @@ export const data = [ version: '1', type: 'REST', method: 'DELETE', - endpoint: 'https://graph.facebook.com/v18.0/aud1/users', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', headers: {}, params: { access_token: 'ABC', @@ -79,7 +79,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/aud1/users', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', headers: {}, params: { access_token: 'ABC', @@ -187,7 +187,7 @@ export const data = [ version: '1', type: 'REST', method: 'DELETE', - endpoint: 'https://graph.facebook.com/v18.0/aud1/users', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', headers: {}, params: { access_token: 'ABC', @@ -238,7 +238,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/aud1/users', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', headers: {}, params: { access_token: 'ABC', @@ -369,7 +369,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', @@ -558,7 +558,7 @@ export const data = [ version: '1', type: 'REST', method: 'DELETE', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', @@ -647,7 +647,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', @@ -720,7 +720,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', @@ -877,7 +877,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', @@ -907,7 +907,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/23848494844100489/users', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', From 7caf4762be2c527725a2bdfb090a626d40723c36 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:16:48 +0530 Subject: [PATCH 110/201] fix: fb pixel and fb app events version upgrade (#3606) --- src/v0/destinations/facebook_pixel/config.js | 2 +- src/v0/destinations/fb/config.js | 2 +- .../destinations/facebook_pixel/processor/ecommTestData.ts | 6 +++--- .../facebook_pixel/processor/validationTestData.ts | 2 +- .../integrations/destinations/facebook_pixel/router/data.ts | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/v0/destinations/facebook_pixel/config.js b/src/v0/destinations/facebook_pixel/config.js index 17d5887e1b..f259892165 100644 --- a/src/v0/destinations/facebook_pixel/config.js +++ b/src/v0/destinations/facebook_pixel/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const VERSION = 'v18.0'; +const VERSION = 'v20.0'; const CONFIG_CATEGORIES = { USERDATA: { diff --git a/src/v0/destinations/fb/config.js b/src/v0/destinations/fb/config.js index 0e52b42416..d84fa7d672 100644 --- a/src/v0/destinations/fb/config.js +++ b/src/v0/destinations/fb/config.js @@ -1,7 +1,7 @@ const fs = require('fs'); const path = require('path'); -const VERSION = 'v18.0'; +const VERSION = 'v20.0'; const getPath = (file) => path.resolve(__dirname, file); diff --git a/test/integrations/destinations/facebook_pixel/processor/ecommTestData.ts b/test/integrations/destinations/facebook_pixel/processor/ecommTestData.ts index 5d429d297d..8e7f50ec2d 100644 --- a/test/integrations/destinations/facebook_pixel/processor/ecommTestData.ts +++ b/test/integrations/destinations/facebook_pixel/processor/ecommTestData.ts @@ -218,7 +218,7 @@ export const ecommTestData: ProcessorTestData[] = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, FORM: { @@ -572,7 +572,7 @@ export const ecommTestData: ProcessorTestData[] = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, FORM: { @@ -890,7 +890,7 @@ export const ecommTestData: ProcessorTestData[] = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, FORM: { diff --git a/test/integrations/destinations/facebook_pixel/processor/validationTestData.ts b/test/integrations/destinations/facebook_pixel/processor/validationTestData.ts index a0f85e45e3..d242ac990d 100644 --- a/test/integrations/destinations/facebook_pixel/processor/validationTestData.ts +++ b/test/integrations/destinations/facebook_pixel/processor/validationTestData.ts @@ -444,7 +444,7 @@ export const validationTestData = [ JSON_ARRAY: {}, XML: {}, }, - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', files: {}, headers: {}, method: 'POST', diff --git a/test/integrations/destinations/facebook_pixel/router/data.ts b/test/integrations/destinations/facebook_pixel/router/data.ts index c754ffdc61..f3df4506a5 100644 --- a/test/integrations/destinations/facebook_pixel/router/data.ts +++ b/test/integrations/destinations/facebook_pixel/router/data.ts @@ -126,7 +126,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, body: { @@ -165,7 +165,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyPixelId/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyPixelId/events?access_token=09876', headers: {}, params: {}, body: { From 9d065467f376a047d1cebb095de0b33be6e32206 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:17:03 +0530 Subject: [PATCH 111/201] fix: facebook conversion version upgrade (#3607) --- .../facebook_conversions/config.js | 2 +- .../facebook_conversions/processor/data.ts | 24 +++++++++---------- .../facebook_conversions/router/data.ts | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/v0/destinations/facebook_conversions/config.js b/src/v0/destinations/facebook_conversions/config.js index 0c1fc12e15..2bbe9ab017 100644 --- a/src/v0/destinations/facebook_conversions/config.js +++ b/src/v0/destinations/facebook_conversions/config.js @@ -1,7 +1,7 @@ const { getMappingConfig } = require('../../util'); const ENDPOINT = (datasetId, accessToken) => - `https://graph.facebook.com/v18.0/${datasetId}/events?access_token=${accessToken}`; + `https://graph.facebook.com/v20.0/${datasetId}/events?access_token=${accessToken}`; const CONFIG_CATEGORIES = { USERDATA: { diff --git a/test/integrations/destinations/facebook_conversions/processor/data.ts b/test/integrations/destinations/facebook_conversions/processor/data.ts index 3224a15771..d72114c15b 100644 --- a/test/integrations/destinations/facebook_conversions/processor/data.ts +++ b/test/integrations/destinations/facebook_conversions/processor/data.ts @@ -314,7 +314,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -433,7 +433,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -552,7 +552,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -671,7 +671,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -797,7 +797,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -917,7 +917,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1036,7 +1036,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1155,7 +1155,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1283,7 +1283,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1411,7 +1411,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1511,7 +1511,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -1632,7 +1632,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { diff --git a/test/integrations/destinations/facebook_conversions/router/data.ts b/test/integrations/destinations/facebook_conversions/router/data.ts index 9c6759df61..5a9c0c513f 100644 --- a/test/integrations/destinations/facebook_conversions/router/data.ts +++ b/test/integrations/destinations/facebook_conversions/router/data.ts @@ -112,7 +112,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { @@ -150,7 +150,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: 'https://graph.facebook.com/v18.0/dummyID/events?access_token=09876', + endpoint: 'https://graph.facebook.com/v20.0/dummyID/events?access_token=09876', headers: {}, params: {}, body: { From d3a32e8369b0e6e94d5de4323e92b6674b423de3 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Thu, 1 Aug 2024 13:01:35 +0530 Subject: [PATCH 112/201] chore: cancel already existing workflows on pull request update (#3623) --- .github/workflows/build-pr-artifacts.yml | 4 ++++ .github/workflows/check-pr-title.yml | 4 ++++ .github/workflows/commitlint.yml | 4 ++++ .github/workflows/component-test-report.yml | 4 ++++ .github/workflows/dt-test-and-report-code-coverage.yml | 4 ++++ .github/workflows/prepare-for-dev-deploy.yml | 4 ++++ .github/workflows/prepare-for-prod-dt-deploy.yml | 4 ++++ .github/workflows/prepare-for-prod-ut-deploy.yml | 4 ++++ .github/workflows/prepare-for-staging-deploy.yml | 4 ++++ .github/workflows/ut-tests.yml | 4 ++++ .github/workflows/verify-server-start.yml | 4 ++++ .github/workflows/verify.yml | 4 ++++ 12 files changed, 48 insertions(+) diff --git a/.github/workflows/build-pr-artifacts.yml b/.github/workflows/build-pr-artifacts.yml index 9938563bf0..f6aaa18940 100644 --- a/.github/workflows/build-pr-artifacts.yml +++ b/.github/workflows/build-pr-artifacts.yml @@ -7,6 +7,10 @@ on: - reopened - synchronize +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: generate-tag-names: runs-on: ubuntu-latest diff --git a/.github/workflows/check-pr-title.yml b/.github/workflows/check-pr-title.yml index 48098e276c..74c96d70ad 100644 --- a/.github/workflows/check-pr-title.yml +++ b/.github/workflows/check-pr-title.yml @@ -8,6 +8,10 @@ on: - reopened - synchronize +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: check-pr-title: name: Check PR Title diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index 1e8889c011..7f6d068e15 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -2,6 +2,10 @@ name: Commitlint on: [push] +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: commitlint: runs-on: ubuntu-latest diff --git a/.github/workflows/component-test-report.yml b/.github/workflows/component-test-report.yml index 936ec53742..02df1478d4 100644 --- a/.github/workflows/component-test-report.yml +++ b/.github/workflows/component-test-report.yml @@ -7,6 +7,10 @@ on: - reopened - synchronize +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + permissions: id-token: write # allows the JWT to be requested from GitHub's OIDC provider contents: read # This is required for actions/checkout diff --git a/.github/workflows/dt-test-and-report-code-coverage.yml b/.github/workflows/dt-test-and-report-code-coverage.yml index c3fc6150a6..755eb24397 100644 --- a/.github/workflows/dt-test-and-report-code-coverage.yml +++ b/.github/workflows/dt-test-and-report-code-coverage.yml @@ -8,6 +8,10 @@ on: pull_request: types: ['opened', 'reopened', 'synchronize'] +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: coverage: name: Code Coverage diff --git a/.github/workflows/prepare-for-dev-deploy.yml b/.github/workflows/prepare-for-dev-deploy.yml index 9eb705aa52..66020feef0 100644 --- a/.github/workflows/prepare-for-dev-deploy.yml +++ b/.github/workflows/prepare-for-dev-deploy.yml @@ -10,6 +10,10 @@ on: branches: - develop +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: report-coverage: name: Report Code Coverage diff --git a/.github/workflows/prepare-for-prod-dt-deploy.yml b/.github/workflows/prepare-for-prod-dt-deploy.yml index fedbac8ba1..4a4d656e78 100644 --- a/.github/workflows/prepare-for-prod-dt-deploy.yml +++ b/.github/workflows/prepare-for-prod-dt-deploy.yml @@ -10,6 +10,10 @@ on: branches: - main +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: report-coverage: name: Report Code Coverage diff --git a/.github/workflows/prepare-for-prod-ut-deploy.yml b/.github/workflows/prepare-for-prod-ut-deploy.yml index a6f7271d9c..a5afed6dee 100644 --- a/.github/workflows/prepare-for-prod-ut-deploy.yml +++ b/.github/workflows/prepare-for-prod-ut-deploy.yml @@ -10,6 +10,10 @@ on: branches: - main +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: report-coverage: name: Report Code Coverage diff --git a/.github/workflows/prepare-for-staging-deploy.yml b/.github/workflows/prepare-for-staging-deploy.yml index 46cd731d19..4a4bf44f75 100644 --- a/.github/workflows/prepare-for-staging-deploy.yml +++ b/.github/workflows/prepare-for-staging-deploy.yml @@ -9,6 +9,10 @@ on: branches: - main +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: generate-tag-names: runs-on: ubuntu-latest diff --git a/.github/workflows/ut-tests.yml b/.github/workflows/ut-tests.yml index 87e7d1fde8..2f2f303219 100644 --- a/.github/workflows/ut-tests.yml +++ b/.github/workflows/ut-tests.yml @@ -7,6 +7,10 @@ on: - reopened - synchronize +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: ut_tests: name: UT Tests diff --git a/.github/workflows/verify-server-start.yml b/.github/workflows/verify-server-start.yml index 332434c817..f87ed57eb8 100644 --- a/.github/workflows/verify-server-start.yml +++ b/.github/workflows/verify-server-start.yml @@ -4,6 +4,10 @@ on: pull_request: types: ['opened', 'reopened', 'synchronize'] +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: check-health: runs-on: ubuntu-latest diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 1ae1caee23..a03037d4ad 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -3,6 +3,10 @@ name: Verify on: pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + jobs: formatting-lint: name: Check for formatting & lint errors From cd51b9525a1d5422baf0077a601815d3aeefad76 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Thu, 1 Aug 2024 13:51:19 +0530 Subject: [PATCH 113/201] chore: migrate source transform tests (#3553) --- go/go.sum | 1 + go/webhook/testcases/testcases.go | 4 +- .../testcases/adjust/simple_track_call.json | 8 +- ...e_track_call_with_no_query_parameters.json | 11 +- .../testdata/testcases/appcenter/test_0.json | 28 + .../testdata/testcases/appcenter/test_1.json | 82 + .../testdata/testcases/appcenter/test_2.json | 82 + .../testdata/testcases/appcenter/test_3.json | 98 + .../testdata/testcases/appcenter/test_4.json | 81 + .../testdata/testcases/appsflyer/test_0.json | 294 +++ .../testdata/testcases/appsflyer/test_1.json | 294 +++ .../testdata/testcases/appsflyer/test_2.json | 246 ++ .../testdata/testcases/appsflyer/test_3.json | 291 +++ .../testdata/testcases/appsflyer/test_4.json | 292 +++ .../testdata/testcases/appsflyer/test_5.json | 292 +++ .../testdata/testcases/appsflyer/test_6.json | 292 +++ .../testdata/testcases/appsflyer/test_7.json | 292 +++ .../auth0/add_member_to_an_organization.json | 3 +- .../testdata/testcases/auth0/empty_batch.json | 9 +- .../testcases/auth0/missing_user_id.json | 3 +- ...er_id_for_all_the_requests_in_a_batch.json | 3 +- .../testcases/auth0/successful_signup.json | 3 +- .../auth0/update_tenant_settings.json | 3 +- .../braze/event_mapping_done_in_ui.json | 97 + .../the_event_is_not_mapped_in_the_ui.json | 96 + ...ers_behaviors_app_session_start_event.json | 113 + ...haviors_custom_event_any_custom_event.json | 131 + .../braze/users_behaviors_purchase_event.json | 135 + .../users_messages_email_open_event.json | 117 + ...ers_messages_inappmessage_click_event.json | 125 + ..._messages_pushnotification_send_event.json | 121 + .../users_messages_sms_delivery_event.json | 117 + .../users_messages_sms_delivery_send.json | 115 + .../testdata/testcases/canny/test_0.json | 137 + .../testdata/testcases/canny/test_1.json | 135 + .../testdata/testcases/canny/test_10.json | 149 ++ .../testdata/testcases/canny/test_11.json | 140 ++ .../testdata/testcases/canny/test_12.json | 108 + .../testdata/testcases/canny/test_2.json | 133 + .../testdata/testcases/canny/test_3.json | 133 + .../testdata/testcases/canny/test_4.json | 157 ++ .../testdata/testcases/canny/test_5.json | 153 ++ .../testdata/testcases/canny/test_6.json | 149 ++ .../testdata/testcases/canny/test_7.json | 149 ++ .../testdata/testcases/canny/test_8.json | 163 ++ .../testdata/testcases/canny/test_9.json | 137 + .../testcases/close_crm/group_creation.json | 63 +- .../testcases/close_crm/lead_deletion.json | 77 +- .../testcases/close_crm/lead_update.json | 111 +- ...ject_input_event_with_batched_payload.json | 324 +++ ...single_object_input_event_with_no_cid.json | 138 + ..._event_with_normal_channel_and_action.json | 133 + .../testdata/testcases/customerio/test_0.json | 59 + .../testdata/testcases/customerio/test_1.json | 59 + .../testcases/customerio/test_10.json | 75 + .../testcases/customerio/test_11.json | 79 + .../testcases/customerio/test_12.json | 65 + .../testcases/customerio/test_13.json | 73 + .../testcases/customerio/test_14.json | 67 + .../testcases/customerio/test_15.json | 73 + .../testcases/customerio/test_16.json | 65 + .../testcases/customerio/test_17.json | 63 + .../testcases/customerio/test_18.json | 65 + .../testcases/customerio/test_19.json | 67 + .../testdata/testcases/customerio/test_2.json | 61 + .../testcases/customerio/test_20.json | 73 + .../testcases/customerio/test_21.json | 65 + .../testcases/customerio/test_22.json | 79 + .../testdata/testcases/customerio/test_3.json | 61 + .../testdata/testcases/customerio/test_4.json | 63 + .../testdata/testcases/customerio/test_5.json | 71 + .../testdata/testcases/customerio/test_6.json | 75 + .../testdata/testcases/customerio/test_7.json | 74 + .../testdata/testcases/customerio/test_8.json | 69 + .../testdata/testcases/customerio/test_9.json | 65 + .../when_we_receive_finalized_as_false.json | 66 + .../when_we_receive_finalized_as_true.json | 66 + .../gainsightpx/custom_track_call_.json | 182 ++ .../gainsightpx/engagement_track_call_.json | 186 ++ .../feature_match_track_call_.json | 172 ++ .../gainsightpx/feedback_track_call_.json | 179 ++ .../testcases/gainsightpx/identify_call.json | 160 ++ .../gainsightpx/no_match_track_call_.json | 50 + .../segment_io_s2_s_track_call_.json | 222 ++ ..._yes_anonymous_id_as_event_session_id.json | 171 ++ ..._track_call____multi_question_survey_.json | 208 ++ .../survey_track_call____nps_.json | 196 ++ .../testdata/testcases/iterable/test_0.json | 68 + .../testdata/testcases/iterable/test_1.json | 46 + .../testdata/testcases/iterable/test_10.json | 68 + .../testdata/testcases/iterable/test_11.json | 92 + .../testdata/testcases/iterable/test_12.json | 99 + .../testdata/testcases/iterable/test_13.json | 58 + .../testdata/testcases/iterable/test_14.json | 58 + .../testdata/testcases/iterable/test_15.json | 96 + .../testdata/testcases/iterable/test_16.json | 96 + .../testdata/testcases/iterable/test_17.json | 94 + .../testdata/testcases/iterable/test_18.json | 94 + .../testdata/testcases/iterable/test_19.json | 98 + .../testdata/testcases/iterable/test_2.json | 42 + .../testdata/testcases/iterable/test_20.json | 62 + .../testdata/testcases/iterable/test_21.json | 98 + .../testdata/testcases/iterable/test_22.json | 96 + .../testdata/testcases/iterable/test_23.json | 90 + .../testdata/testcases/iterable/test_24.json | 62 + .../testdata/testcases/iterable/test_25.json | 90 + .../testdata/testcases/iterable/test_26.json | 62 + .../testdata/testcases/iterable/test_27.json | 88 + .../testdata/testcases/iterable/test_28.json | 94 + .../testdata/testcases/iterable/test_29.json | 62 + .../testdata/testcases/iterable/test_3.json | 48 + .../testdata/testcases/iterable/test_4.json | 82 + .../testdata/testcases/iterable/test_5.json | 82 + .../testdata/testcases/iterable/test_6.json | 98 + .../testdata/testcases/iterable/test_7.json | 82 + .../testdata/testcases/iterable/test_8.json | 88 + .../testdata/testcases/iterable/test_9.json | 62 + .../mailjet/mail_jet_email_bounce_event.json | 68 + ...e_event_where_input_event_is_of_type_.json | 68 + .../mailjet/mail_jet_email_open_event.json | 73 + .../mailjet/mail_jet_email_sent_event.json | 65 + ...t_multiple_payloads_in_single_request.json | 132 + .../mail_jet_when_no_email_is_present.json | 63 + .../testdata/testcases/mailmodo/test_0.json | 66 + .../testdata/testcases/mailmodo/test_1.json | 87 + .../testdata/testcases/mailmodo/test_2.json | 64 + .../testdata/testcases/mailmodo/test_3.json | 64 + .../testdata/testcases/mailmodo/test_4.json | 90 + .../testdata/testcases/mailmodo/test_5.json | 75 + .../testdata/testcases/mailmodo/test_6.json | 64 + .../testdata/testcases/mailmodo/test_7.json | 74 + .../testdata/testcases/mailmodo/test_8.json | 87 + .../testdata/testcases/monday/test_0.json | 82 + .../testdata/testcases/monday/test_1.json | 72 + .../testdata/testcases/monday/test_2.json | 112 + .../testdata/testcases/monday/test_3.json | 84 + .../testdata/testcases/monday/test_4.json | 88 + .../testdata/testcases/monday/test_5.json | 72 + .../olark/olark_webhook_response.json | 122 + .../pagerduty/incident_escalated.json | 157 ++ .../pagerduty/incident_priority_updated.json | 157 ++ .../pagerduty/incident_resolved.json | 147 ++ .../pagerduty/incident_responder_added.json | 107 + .../pagerduty/incident_triggered.json | 164 ++ ...ias_type____type_and_user_id_is_given.json | 33 + ...oup_type____type_and_user_id_is_given.json | 41 + ...ify_type____type_and_user_id_is_given.json | 67 + .../no_type_or_anonymous_id_is_given.json | 52 + .../no_type_or_user_id_is_given.json | 52 + ...age_type____type_and_user_id_is_given.json | 65 + ...ack_call____type_and_user_id_is_given.json | 101 + .../refiner/refiner_webhook_response.json | 211 ++ ..._fields_check_with_event_as_completed.json | 244 ++ ...n_mapping_response_id_to_anonymous_id.json | 241 ++ .../testdata/testcases/segment/test_0.json | 250 ++ .../testcases/shopify/carts_create.json | 16 - ...tify_call_for_customers_create_event.json} | 13 +- .../testcases/shopify/invalid_topic.json | 20 +- .../shopify/no_query_parameters.json | 21 + .../testcases/shopify/no_query_params.json | 19 - .../testcases/shopify/topic_not_found.json | 35 + .../shopify/track_call____carts_create_.json | 30 + ..._call____fullfillments_updated_event.json} | 16 +- .../shopify/unsupported_checkout_event.json | 14 +- .../shopify/unsupported_event_type.json | 18 +- .../testdata/testcases/signl4/test_0.json | 63 + .../testdata/testcases/signl4/test_1.json | 80 + .../testdata/testcases/signl4/test_2.json | 80 + .../testdata/testcases/signl4/test_3.json | 69 + .../testdata/testcases/signl4/test_4.json | 84 + .../testdata/testcases/signl4/test_5.json | 53 + .../testdata/testcases/signl4/test_6.json | 53 + .../testdata/testcases/signl4/test_7.json | 62 + .../testdata/testcases/signl4/test_8.json | 62 + .../testdata/testcases/slack/msg_event.json | 149 -- .../testdata/testcases/slack/team_joined.json | 89 - .../testcases/slack/verification.json | 31 - src/v0/destinations/af/deleteUsers.js | 6 +- src/v0/sources/appcenter/transform.js | 4 +- test/__tests__/appcenter_source.test.js | 33 - test/__tests__/appsflyer_source.test.js | 31 - test/__tests__/canny_source.test.js | 30 - test/__tests__/customerio_source.test.js | 30 - .../data/appcenter_source_input.json | 78 - .../data/appcenter_source_output.json | 198 -- .../data/appsflyer_source_input.json | 908 ------- .../data/appsflyer_source_output.json | 1092 -------- test/__tests__/data/canny_source_input.json | 667 ----- test/__tests__/data/canny_source_output.json | 789 ------ .../data/customerio_source_input.json | 390 --- .../data/customerio_source_output.json | 651 ----- test/__tests__/data/formsort_source.json | 94 - test/__tests__/data/gainsightpx_source.json | 1519 ----------- .../__tests__/data/iterable_source_input.json | 600 ----- .../data/iterable_source_output.json | 1084 -------- test/__tests__/data/mailjet_source.json | 369 --- .../__tests__/data/mailmodo_source_input.json | 153 -- .../data/mailmodo_source_output.json | 315 --- test/__tests__/data/monday_source_input.json | 125 - test/__tests__/data/monday_source_output.json | 251 -- test/__tests__/data/olark_source.json | 299 --- test/__tests__/data/pagerduty_source.json | 639 ----- test/__tests__/data/pipedream_source.json | 275 -- test/__tests__/data/refiner_source.json | 394 --- test/__tests__/data/satismeter_source.json | 443 ---- test/__tests__/data/segment_source_input.json | 112 - .../__tests__/data/segment_source_output.json | 112 - test/__tests__/data/shopify.json | 515 ---- test/__tests__/data/signl4_source_input.json | 123 - test/__tests__/data/signl4_source_output.json | 269 -- test/__tests__/formsort_source.test.js | 26 - test/__tests__/gpx_source.test.js | 22 - test/__tests__/iterable_source.test.js | 30 - test/__tests__/mailjet_source.test.js | 26 - test/__tests__/mailmodo_source.test.js | 30 - test/__tests__/monday_source.test.js | 30 - test/__tests__/olark_source.test.js | 23 - test/__tests__/pagerduty_source.test.js | 23 - test/__tests__/pipedream_source.test.js | 23 - test/__tests__/refiner_source.test.js | 23 - test/__tests__/satismeter_source.test.js | 22 - test/__tests__/segment_source.test.js | 22 - test/__tests__/shopify_source.test.js | 32 - test/__tests__/signl4_source.test.js | 30 - test/integrations/component.test.ts | 1 + .../destinations/af/deleteUsers/data.ts | 2 +- .../destinations/airship/processor/data.ts | 7 +- .../destinations/airship/router/data.ts | 8 +- .../attentive_tag/processor/data.ts | 4 +- .../destinations/emarsys/deleteUsers/data.ts | 10 +- .../destinations/emarsys/processor/data.ts | 12 +- .../destinations/emarsys/router/data.ts | 10 +- .../facebook_conversions/mocks.ts | 2 +- test/integrations/destinations/ga4/mocks.ts | 6 +- .../ga4/processor/validationTestData.ts | 17 +- .../integrations/destinations/ga4_v2/mocks.ts | 4 +- .../destinations/moengage/processor/data.ts | 6 + .../destinations/moengage/router/data.ts | 5 + test/integrations/destinations/mp/common.ts | 2 +- .../destinations/mp/processor/data.ts | 3 + .../optimizely_fullstack/processor/data.ts | 2 +- .../destinations/pagerduty/processor/data.ts | 1399 +++++------ .../destinations/pagerduty/router/data.ts | 5 + test/integrations/sources/adjust/data.ts | 27 +- test/integrations/sources/appcenter/data.ts | 372 +++ test/integrations/sources/appsflyer/data.ts | 2050 +++++++++++++++ test/integrations/sources/auth0/data.ts | 11 +- test/integrations/sources/braze/data.ts | 25 +- test/integrations/sources/canny/data.ts | 1665 +++++++++++++ test/integrations/sources/customerio/data.ts | 1439 +++++++++++ test/integrations/sources/formsort/data.ts | 126 + test/integrations/sources/gainsightpx/data.ts | 1625 ++++++++++++ test/integrations/sources/iterable/data.ts | 2219 +++++++++++++++++ test/integrations/sources/mailjet/data.ts | 393 +++ test/integrations/sources/mailmodo/data.ts | 589 +++++ test/integrations/sources/monday/data.ts | 454 ++++ test/integrations/sources/olark/data.ts | 301 +++ test/integrations/sources/pagerduty/data.ts | 725 ++++++ test/integrations/sources/pipedream/data.ts | 345 +++ test/integrations/sources/refiner/data.ts | 391 +++ test/integrations/sources/satismeter/data.ts | 426 ++++ test/integrations/sources/segment/data.ts | 240 ++ test/integrations/sources/shopify/data.ts | 609 +++++ test/integrations/sources/signl4/data.ts | 550 ++++ test/integrations/testTypes.ts | 18 + test/scripts/generateJson.ts | 86 +- 266 files changed, 32237 insertions(+), 14199 deletions(-) create mode 100644 go/webhook/testcases/testdata/testcases/appcenter/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/appcenter/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/appcenter/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/appcenter/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/appcenter/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/appsflyer/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/event_mapping_done_in_ui.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/the_event_is_not_mapped_in_the_ui.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_behaviors_app_session_start_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_behaviors_custom_event_any_custom_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_behaviors_purchase_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_messages_email_open_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_messages_inappmessage_click_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_messages_pushnotification_send_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_event.json create mode 100644 go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_send.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_10.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_11.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_12.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_8.json create mode 100644 go/webhook/testcases/testdata/testcases/canny/test_9.json create mode 100644 go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json create mode 100644 go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json create mode 100644 go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_10.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_11.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_12.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_13.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_14.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_15.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_16.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_17.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_18.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_19.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_20.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_21.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_22.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_8.json create mode 100644 go/webhook/testcases/testdata/testcases/customerio/test_9.json create mode 100644 go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_false.json create mode 100644 go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_true.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/custom_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/engagement_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/feature_match_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/feedback_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/identify_call.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/no_match_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/segment_io_s2_s_track_call_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/segment_match_track_call_and_no_user_id_and_yes_anonymous_id_as_event_session_id.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____multi_question_survey_.json create mode 100644 go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____nps_.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_10.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_11.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_12.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_13.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_14.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_15.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_16.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_17.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_18.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_19.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_20.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_21.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_22.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_23.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_24.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_25.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_26.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_27.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_28.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_29.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_8.json create mode 100644 go/webhook/testcases/testdata/testcases/iterable/test_9.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event_where_input_event_is_of_type_.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_open_event.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_sent_event.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_multiple_payloads_in_single_request.json create mode 100644 go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/mailmodo/test_8.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/monday/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/olark/olark_webhook_response.json create mode 100644 go/webhook/testcases/testdata/testcases/pagerduty/incident_escalated.json create mode 100644 go/webhook/testcases/testdata/testcases/pagerduty/incident_priority_updated.json create mode 100644 go/webhook/testcases/testdata/testcases/pagerduty/incident_resolved.json create mode 100644 go/webhook/testcases/testdata/testcases/pagerduty/incident_responder_added.json create mode 100644 go/webhook/testcases/testdata/testcases/pagerduty/incident_triggered.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/group_type____type_and_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/no_type_or_anonymous_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/no_type_or_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/page_type____type_and_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/pipedream/track_call____type_and_user_id_is_given.json create mode 100644 go/webhook/testcases/testdata/testcases/refiner/refiner_webhook_response.json create mode 100644 go/webhook/testcases/testdata/testcases/satismeter/all_fields_check_with_event_as_completed.json create mode 100644 go/webhook/testcases/testdata/testcases/satismeter/neither_reponse_user_id_or_response_user_user_id_is_provided_in_payload_then_mapping_response_id_to_anonymous_id.json create mode 100644 go/webhook/testcases/testdata/testcases/segment/test_0.json delete mode 100644 go/webhook/testcases/testdata/testcases/shopify/carts_create.json rename go/webhook/testcases/testdata/testcases/shopify/{identify_call.json => identify_call_for_customers_create_event.json} (95%) create mode 100644 go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json delete mode 100644 go/webhook/testcases/testdata/testcases/shopify/no_query_params.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json create mode 100644 go/webhook/testcases/testdata/testcases/shopify/track_call____carts_create_.json rename go/webhook/testcases/testdata/testcases/shopify/{fullfillments_updated_event.json => track_call____fullfillments_updated_event.json} (96%) create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_0.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_1.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_2.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_3.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_4.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_5.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_6.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_7.json create mode 100644 go/webhook/testcases/testdata/testcases/signl4/test_8.json delete mode 100644 go/webhook/testcases/testdata/testcases/slack/msg_event.json delete mode 100644 go/webhook/testcases/testdata/testcases/slack/team_joined.json delete mode 100644 go/webhook/testcases/testdata/testcases/slack/verification.json delete mode 100644 test/__tests__/appcenter_source.test.js delete mode 100644 test/__tests__/appsflyer_source.test.js delete mode 100644 test/__tests__/canny_source.test.js delete mode 100644 test/__tests__/customerio_source.test.js delete mode 100644 test/__tests__/data/appcenter_source_input.json delete mode 100644 test/__tests__/data/appcenter_source_output.json delete mode 100644 test/__tests__/data/appsflyer_source_input.json delete mode 100644 test/__tests__/data/appsflyer_source_output.json delete mode 100644 test/__tests__/data/canny_source_input.json delete mode 100644 test/__tests__/data/canny_source_output.json delete mode 100644 test/__tests__/data/customerio_source_input.json delete mode 100644 test/__tests__/data/customerio_source_output.json delete mode 100644 test/__tests__/data/formsort_source.json delete mode 100644 test/__tests__/data/gainsightpx_source.json delete mode 100644 test/__tests__/data/iterable_source_input.json delete mode 100644 test/__tests__/data/iterable_source_output.json delete mode 100644 test/__tests__/data/mailjet_source.json delete mode 100644 test/__tests__/data/mailmodo_source_input.json delete mode 100644 test/__tests__/data/mailmodo_source_output.json delete mode 100644 test/__tests__/data/monday_source_input.json delete mode 100644 test/__tests__/data/monday_source_output.json delete mode 100644 test/__tests__/data/olark_source.json delete mode 100644 test/__tests__/data/pagerduty_source.json delete mode 100644 test/__tests__/data/pipedream_source.json delete mode 100644 test/__tests__/data/refiner_source.json delete mode 100644 test/__tests__/data/satismeter_source.json delete mode 100644 test/__tests__/data/segment_source_input.json delete mode 100644 test/__tests__/data/segment_source_output.json delete mode 100644 test/__tests__/data/shopify.json delete mode 100644 test/__tests__/data/signl4_source_input.json delete mode 100644 test/__tests__/data/signl4_source_output.json delete mode 100644 test/__tests__/formsort_source.test.js delete mode 100644 test/__tests__/gpx_source.test.js delete mode 100644 test/__tests__/iterable_source.test.js delete mode 100644 test/__tests__/mailjet_source.test.js delete mode 100644 test/__tests__/mailmodo_source.test.js delete mode 100644 test/__tests__/monday_source.test.js delete mode 100644 test/__tests__/olark_source.test.js delete mode 100644 test/__tests__/pagerduty_source.test.js delete mode 100644 test/__tests__/pipedream_source.test.js delete mode 100644 test/__tests__/refiner_source.test.js delete mode 100644 test/__tests__/satismeter_source.test.js delete mode 100644 test/__tests__/segment_source.test.js delete mode 100644 test/__tests__/shopify_source.test.js delete mode 100644 test/__tests__/signl4_source.test.js create mode 100644 test/integrations/sources/appcenter/data.ts create mode 100644 test/integrations/sources/appsflyer/data.ts create mode 100644 test/integrations/sources/canny/data.ts create mode 100644 test/integrations/sources/customerio/data.ts create mode 100644 test/integrations/sources/formsort/data.ts create mode 100644 test/integrations/sources/gainsightpx/data.ts create mode 100644 test/integrations/sources/iterable/data.ts create mode 100644 test/integrations/sources/mailjet/data.ts create mode 100644 test/integrations/sources/mailmodo/data.ts create mode 100644 test/integrations/sources/monday/data.ts create mode 100644 test/integrations/sources/olark/data.ts create mode 100644 test/integrations/sources/pagerduty/data.ts create mode 100644 test/integrations/sources/pipedream/data.ts create mode 100644 test/integrations/sources/refiner/data.ts create mode 100644 test/integrations/sources/satismeter/data.ts create mode 100644 test/integrations/sources/segment/data.ts create mode 100644 test/integrations/sources/shopify/data.ts create mode 100644 test/integrations/sources/signl4/data.ts diff --git a/go/go.sum b/go/go.sum index e20fa14b0b..60ce688a04 100644 --- a/go/go.sum +++ b/go/go.sum @@ -4,6 +4,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/webhook/testcases/testcases.go b/go/webhook/testcases/testcases.go index 92a808dcbd..1810fed7b8 100644 --- a/go/webhook/testcases/testcases.go +++ b/go/webhook/testcases/testcases.go @@ -33,7 +33,7 @@ type Input struct { } type Request struct { Method string - RawQuery string `json:"query"` + RawQuery string `json:"query_parameters"` Headers map[string]string Body json.RawMessage } @@ -41,7 +41,7 @@ type Request struct { type Output struct { Response Response Queue []json.RawMessage - ErrQueue []json.RawMessage `json:"err_queue"` + ErrQueue []json.RawMessage `json:"errQueue"` } type Response struct { diff --git a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json index ce508cacff..1a2f5e7b6b 100644 --- a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json +++ b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call.json @@ -19,7 +19,8 @@ }, "headers": { "Content-Type": "application/json" - } + }, + "method": "GET" } }, "output": { @@ -29,6 +30,7 @@ }, "queue": [ { + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", "context": { "library": { "name": "unknown", @@ -54,13 +56,11 @@ "custom": "custom", "tracker_name": "dummy" }, - "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", "receivedAt": "2024-03-03T04:48:29.000Z", "request_ip": "192.0.2.30", "messageId": "00000000-0000-0000-0000-000000000000" } ], "errQueue": [] - }, - "skip": "FIXME" + } } diff --git a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json index f8e5a480a0..e110978b65 100644 --- a/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json +++ b/go/webhook/testcases/testdata/testcases/adjust/simple_track_call_with_no_query_parameters.json @@ -10,7 +10,8 @@ }, "headers": { "Content-Type": "application/json" - } + }, + "method": "GET" } }, "output": { @@ -19,7 +20,13 @@ "body": "Query_parameters is missing" }, "queue": [], - "errQueue": [null] + "errQueue": [ + { + "id": "adjust", + "updated_at": "2023-02-10T12:16:07.251Z", + "created_at": "2023-02-10T12:05:04.402Z" + } + ] }, "skip": "FIXME" } diff --git a/go/webhook/testcases/testdata/testcases/appcenter/test_0.json b/go/webhook/testcases/testdata/testcases/appcenter/test_0.json new file mode 100644 index 0000000000..b458fcc149 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appcenter/test_0.json @@ -0,0 +1,28 @@ +{ + "name": "appcenter", + "description": "test-0", + "input": { + "request": { + "body": { + "text": "Hello from your abc-test app in App Center!", + "sent_at": "2023-01-02T07: 53: 28.3117824Z", + "url": "https://appcenter.ms/users/abc-rudderstack.com/apps/abc-test" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": { + "text": "Hello from your abc-test app in App Center!", + "sent_at": "2023-01-02T07: 53: 28.3117824Z", + "url": "https://appcenter.ms/users/abc-rudderstack.com/apps/abc-test" + } + }, + "queue": [], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appcenter/test_1.json b/go/webhook/testcases/testdata/testcases/appcenter/test_1.json new file mode 100644 index 0000000000..514c484294 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appcenter/test_1.json @@ -0,0 +1,82 @@ +{ + "name": "appcenter", + "description": "test-1", + "input": { + "request": { + "body": { + "app_name": "MSAppCenterTesting", + "branch": "master", + "build_status": "Succeeded", + "build_id": "1", + "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1", + "build_reason": "manual", + "finish_time": "2021-03-02T16:41:29.891411Z", + "icon_link": null, + "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", + "os": "Android", + "start_time": "2021-03-02T16:34:13.9184874Z", + "source_version": "7ed5c7b279316f19e9a0c45bb0fb49c0655471af", + "sent_at": "2021-03-02T16:41:55.8819564Z" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "APPCENTER" + }, + "app": { + "name": "MSAppCenterTesting", + "build": "1" + }, + "device": { + "type": "Android" + }, + "os": { + "name": "Android" + } + }, + "integrations": { + "APPCENTER": false + }, + "properties": { + "app_name": "MSAppCenterTesting", + "branch": "master", + "build_status": "Succeeded", + "build_id": "1", + "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1", + "build_reason": "manual", + "finish_time": "2021-03-02T16:41:29.891411Z", + "icon_link": null, + "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", + "os": "Android", + "start_time": "2021-03-02T16:34:13.9184874Z", + "source_version": "7ed5c7b279316f19e9a0c45bb0fb49c0655471af", + "sent_at": "2021-03-02T16:41:55.8819564Z" + }, + "type": "track", + "event": "Build Succeeded", + "originalTimeStamp": "2021-03-02T16:34:13.9184874Z", + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "sentAt": "2021-03-02T16:41:55.8819564Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appcenter/test_2.json b/go/webhook/testcases/testdata/testcases/appcenter/test_2.json new file mode 100644 index 0000000000..c1ed71362f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appcenter/test_2.json @@ -0,0 +1,82 @@ +{ + "name": "appcenter", + "description": "test-2", + "input": { + "request": { + "body": { + "app_name": "MSAppCenterTesting", + "branch": "master", + "build_status": "Broken", + "build_id": "2", + "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2", + "build_reason": "automatic", + "finish_time": "2021-03-02T16:52:04.2587506Z", + "icon_link": null, + "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", + "os": "Android", + "start_time": "2021-03-02T16:50:52.2584107Z", + "source_version": "0624e1e3e48eaf2371c37316208ff83bdd5c123b", + "sent_at": "2021-03-02T16:52:35.8848052Z" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "APPCENTER" + }, + "app": { + "name": "MSAppCenterTesting", + "build": "2" + }, + "device": { + "type": "Android" + }, + "os": { + "name": "Android" + } + }, + "integrations": { + "APPCENTER": false + }, + "properties": { + "app_name": "MSAppCenterTesting", + "branch": "master", + "build_status": "Broken", + "build_id": "2", + "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2", + "build_reason": "automatic", + "finish_time": "2021-03-02T16:52:04.2587506Z", + "icon_link": null, + "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", + "os": "Android", + "start_time": "2021-03-02T16:50:52.2584107Z", + "source_version": "0624e1e3e48eaf2371c37316208ff83bdd5c123b", + "sent_at": "2021-03-02T16:52:35.8848052Z" + }, + "type": "track", + "event": "Build Failed", + "originalTimeStamp": "2021-03-02T16:50:52.2584107Z", + "sentAt": "2021-03-02T16:52:35.8848052Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appcenter/test_3.json b/go/webhook/testcases/testdata/testcases/appcenter/test_3.json new file mode 100644 index 0000000000..992f160f6e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appcenter/test_3.json @@ -0,0 +1,98 @@ +{ + "name": "appcenter", + "description": "test-3", + "input": { + "request": { + "body": { + "app_name": "MSAppCenterTesting", + "app_display_name": "MSAppCenterTesting", + "release_id": "1", + "platform": "Android", + "uploaded_at": "2021-03-02T17:49:35.463Z", + "fingerprint": "9cbdc86d96c5359d2af3972fdda46624", + "release_notes": "Degraded to 4.0.0", + "version": "1614707021", + "short_version": "1.0", + "min_os": "7.1", + "mandatory_update": true, + "size": 2919106, + "provisioning_profile_name": null, + "provisioning_profile_type": null, + "bundle_identifier": "tech.desusai.msappcentertesting", + "install_link": "https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email", + "icon_link": "https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r", + "distribution_group_id": "00000000-0000-0000-0000-000000000000", + "installable": true, + "sent_at": "2021-03-02T17:49:37.127635Z", + "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "APPCENTER" + }, + "app": { + "name": "MSAppCenterTesting", + "version": "1.0", + "namespace": "tech.desusai.msappcentertesting" + }, + "device": { + "type": "Android" + }, + "os": { + "name": "Android" + } + }, + "integrations": { + "APPCENTER": false + }, + "properties": { + "app_name": "MSAppCenterTesting", + "app_display_name": "MSAppCenterTesting", + "release_id": "1", + "platform": "Android", + "uploaded_at": "2021-03-02T17:49:35.463Z", + "fingerprint": "9cbdc86d96c5359d2af3972fdda46624", + "release_notes": "Degraded to 4.0.0", + "version": "1614707021", + "short_version": "1.0", + "min_os": "7.1", + "mandatory_update": true, + "size": 2919106, + "provisioning_profile_name": null, + "provisioning_profile_type": null, + "bundle_identifier": "tech.desusai.msappcentertesting", + "install_link": "https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email", + "icon_link": "https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r", + "distribution_group_id": "00000000-0000-0000-0000-000000000000", + "installable": true, + "sent_at": "2021-03-02T17:49:37.127635Z", + "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" + }, + "type": "track", + "event": "Released Version 1.0", + "sentAt": "2021-03-02T17:49:37.127635Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appcenter/test_4.json b/go/webhook/testcases/testdata/testcases/appcenter/test_4.json new file mode 100644 index 0000000000..456276a0dd --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appcenter/test_4.json @@ -0,0 +1,81 @@ +{ + "name": "appcenter", + "description": "test-4", + "input": { + "request": { + "body": { + "id": "1139624368u", + "name": "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)", + "reason": "java.lang.ArithmeticException: divide by zero", + "file_name": null, + "line_number": null, + "url": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u", + "app_display_name": "MSAppCenterTesting", + "app_platform": "Java", + "app_version": "1.0(1)", + "stack_trace": [ + "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);" + ], + "affected_users": 0, + "crash_count": 0, + "sent_at": "2021-03-02T18:14:33.9713246Z", + "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "APPCENTER" + }, + "app": { + "name": "MSAppCenterTesting", + "version": "1.0(1)" + } + }, + "integrations": { + "APPCENTER": false + }, + "properties": { + "id": "1139624368u", + "name": "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)", + "reason": "java.lang.ArithmeticException: divide by zero", + "file_name": null, + "line_number": null, + "url": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u", + "app_display_name": "MSAppCenterTesting", + "app_platform": "Java", + "app_version": "1.0(1)", + "stack_trace": [ + "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);" + ], + "affected_users": 0, + "crash_count": 0, + "sent_at": "2021-03-02T18:14:33.9713246Z", + "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" + }, + "type": "track", + "event": "App Crashed", + "sentAt": "2021-03-02T18:14:33.9713246Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_0.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_0.json new file mode 100644 index 0000000000..b75b4a6323 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_0.json @@ -0,0 +1,294 @@ +{ + "name": "appsflyer", + "description": "test-0", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "device_type": "iPhoneXR", + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ios", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "model": "iPhoneXR", + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "ios", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "ios", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_1.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_1.json new file mode 100644 index 0000000000..7487945395 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_1.json @@ -0,0 +1,294 @@ +{ + "name": "appsflyer", + "description": "test-1", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "device_type": "Nokia 5.3", + "idfa": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "android", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "model": "Nokia 5.3", + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "android", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "android", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_2.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_2.json new file mode 100644 index 0000000000..80589c1e47 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_2.json @@ -0,0 +1,246 @@ +{ + "name": "appsflyer", + "description": "test-2", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "device_type": "iPhoneXR", + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ios", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Unknwon event type from Appsflyer\n" + }, + "queue": [], + "errQueue": [ + { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "device_type": "iPhoneXR", + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ios", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_3.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_3.json new file mode 100644 index 0000000000..d12cc9ec36 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_3.json @@ -0,0 +1,291 @@ +{ + "name": "appsflyer", + "description": "test-3", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "device_type": "iPhoneXR", + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ios", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "model": "iPhoneXR", + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "ios", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "type": "track", + "event": "My Apps", + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "ios", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_4.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_4.json new file mode 100644 index 0000000000..ba4f20f690 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_4.json @@ -0,0 +1,292 @@ +{ + "name": "appsflyer", + "description": "test-4", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ios", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "ios", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "ios", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_5.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_5.json new file mode 100644 index 0000000000..b00c4a727e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_5.json @@ -0,0 +1,292 @@ +{ + "name": "appsflyer", + "description": "test-5", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "watchos", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "watchos", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "watchos", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_6.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_6.json new file mode 100644 index 0000000000..1a451c988f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_6.json @@ -0,0 +1,292 @@ +{ + "name": "appsflyer", + "description": "test-6", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "ipados", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "ipados", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "ipados", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/appsflyer/test_7.json b/go/webhook/testcases/testdata/testcases/appsflyer/test_7.json new file mode 100644 index 0000000000..f5f496aeba --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/appsflyer/test_7.json @@ -0,0 +1,292 @@ +{ + "name": "appsflyer", + "description": "test-7", + "input": { + "request": { + "body": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "customer_user_id": "hi.from@appsflyer.example.com", + "is_lat": null, + "contributor_2_af_prt": null, + "bundle_id": "com.appsflyer.AppsFlyer", + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "app_version": "1.4.1", + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "city": "Khu Pho Binh Hoa", + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "app_name": "AppsFlyer", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "postal_code": "823941", + "wifi": true, + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "country_code": "VN", + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "appsflyer_id": "1547985076649-5309999", + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "ip": "1.1.1.1", + "oaid": null, + "event_time": "2020-01-15 14:57:24.898", + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "android_id": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "carrier": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "os_version": "12.3.1", + "platform": "tvos", + "af_sub3": null, + "contributor_3_match_type": null, + "selected_timezone": "UTC", + "af_ad_id": null, + "contributor_3_touch_time": null, + "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "AF" + }, + "ip": "1.1.1.1", + "timezone": "UTC", + "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", + "app": { + "namespace": "com.appsflyer.AppsFlyer", + "version": "1.4.1", + "name": "AppsFlyer" + }, + "device": { + "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", + "adTrackingEnabled": true + }, + "network": { + "wifi": true + }, + "os": { + "name": "tvos", + "version": "12.3.1" + }, + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + }, + "userId": "hi.from@appsflyer.example.com" + }, + "externalId": [ + { + "type": "appsflyerExternalId", + "value": "1547985076649-5309999" + } + ] + }, + "integrations": { + "AF": false + }, + "properties": { + "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", + "device_category": "phone", + "af_sub1": null, + "is_lat": null, + "contributor_2_af_prt": null, + "gp_broadcast_referrer": "", + "contributor_2_touch_time": null, + "contributor_3_touch_type": null, + "event_source": "SDK", + "af_cost_value": null, + "contributor_1_match_type": null, + "contributor_3_af_prt": null, + "custom_data": null, + "contributor_2_touch_type": null, + "gp_install_begin": null, + "amazon_aid": null, + "gp_referrer": null, + "af_cost_model": null, + "af_c_id": null, + "attributed_touch_time_selected_timezone": null, + "selected_currency": "USD", + "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "install_time": "2019-01-20 04:51:16.000", + "operator": null, + "attributed_touch_type": null, + "af_attribution_lookback": null, + "campaign_type": null, + "keyword_match_type": null, + "af_adset_id": null, + "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", + "contributor_2_media_source": null, + "conversion_type": null, + "contributor_2_match_type": null, + "api_version": "2.0", + "attributed_touch_time": null, + "revenue_in_selected_currency": null, + "is_retargeting": false, + "gp_click_time": null, + "contributor_1_af_prt": null, + "match_type": null, + "dma": "None", + "http_referrer": null, + "af_sub5": null, + "af_prt": null, + "event_revenue_currency": "USD", + "store_reinstall": null, + "install_app_store": null, + "media_source": "organic", + "deeplink_url": null, + "campaign": null, + "af_keywords": null, + "region": "AS", + "cost_in_selected_currency": null, + "event_value": "{}", + "oaid": null, + "is_receipt_validated": null, + "contributor_1_campaign": null, + "af_sub4": null, + "imei": null, + "contributor_3_campaign": null, + "event_revenue_usd": null, + "af_sub2": null, + "original_url": null, + "contributor_2_campaign": null, + "contributor_3_media_source": null, + "af_adset": null, + "af_ad": null, + "state": "57", + "network_account_id": null, + "retargeting_conversion_type": null, + "af_channel": null, + "af_cost_currency": null, + "contributor_1_media_source": null, + "keyword_id": null, + "device_download_time": "2019-01-20 04:51:16.000", + "contributor_1_touch_type": null, + "af_reengagement_window": null, + "af_siteid": null, + "language": "en-US", + "app_id": "id1217828636", + "contributor_1_touch_time": null, + "event_revenue": null, + "af_ad_type": null, + "event_name": "My Apps", + "af_sub_siteid": null, + "advertising_id": null, + "af_sub3": null, + "contributor_3_match_type": null, + "af_ad_id": null, + "contributor_3_touch_time": null, + "is_primary_attribution": true, + "sdk_version": "v4.10.0", + "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" + }, + "type": "track", + "event": "My Apps", + "userId": "hi.from@appsflyer.example.com", + "timestamp": "2020-01-15 14:57:24.898", + "originalTimestamp": "2020-01-15 14:57:24.898", + "platform": "tvos", + "traits": { + "address": { + "city": "Khu Pho Binh Hoa", + "zip": "823941", + "country": "VN" + } + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json b/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json index 77fbd643c8..27a230ae26 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json +++ b/go/webhook/testcases/testdata/testcases/auth0/add_member_to_an_organization.json @@ -121,6 +121,5 @@ } ], "errQueue": [] - }, - "skip": "dynamic anonymousId" + } } diff --git a/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json b/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json index 709ee35525..6d87cbb292 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json +++ b/go/webhook/testcases/testdata/testcases/auth0/empty_batch.json @@ -11,11 +11,10 @@ }, "output": { "response": { - "status": 200, - "body": "OK" + "status": 400, + "body": "Empty batch payload\n" }, "queue": [], - "errQueue": [] - }, - "skip": "dynamic anonymousId" + "errQueue": [[]] + } } diff --git a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json index 8dc148b4c2..bed8064f97 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json +++ b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id.json @@ -92,6 +92,5 @@ } ], "errQueue": [] - }, - "skip": "dynamic anonymousId" + } } diff --git a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json index 774ab7e7e2..b9428c4cd2 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json +++ b/go/webhook/testcases/testdata/testcases/auth0/missing_user_id_for_all_the_requests_in_a_batch.json @@ -138,6 +138,5 @@ } ], "errQueue": [] - }, - "skip": "dynamic anonymousId" + } } diff --git a/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json b/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json index 91fba2bd4b..8f5bc96776 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json +++ b/go/webhook/testcases/testdata/testcases/auth0/successful_signup.json @@ -501,6 +501,5 @@ } ], "errQueue": [] - }, - "skip": "dynamic anonymousId" + } } diff --git a/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json b/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json index da005184ad..139d68d69d 100644 --- a/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json +++ b/go/webhook/testcases/testdata/testcases/auth0/update_tenant_settings.json @@ -552,6 +552,5 @@ } ], "errQueue": [] - }, - "skip": "dynamic anonymousId" + } } diff --git a/go/webhook/testcases/testdata/testcases/braze/event_mapping_done_in_ui.json b/go/webhook/testcases/testdata/testcases/braze/event_mapping_done_in_ui.json new file mode 100644 index 0000000000..99260d1b34 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/event_mapping_done_in_ui.json @@ -0,0 +1,97 @@ +{ + "name": "braze", + "description": "event mapping done in UI", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.inappmessage.Click", + "properties": { + "device_model": "samsung" + }, + "user": { + "user_id": "user_id", + "external_user_id": "externalUserId" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "users.messages.inappmessage.Click", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "user_id", + "context": { + "device": { + "model": "samsung" + }, + "integration": { + "name": "Braze" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "In-App Message Clicked", + "integrations": { + "Braze": false + }, + "type": "track", + "userId": "externalUserId", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + }, + "skip": "Custom source config" +} diff --git a/go/webhook/testcases/testdata/testcases/braze/the_event_is_not_mapped_in_the_ui.json b/go/webhook/testcases/testdata/testcases/braze/the_event_is_not_mapped_in_the_ui.json new file mode 100644 index 0000000000..1c0c57d24e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/the_event_is_not_mapped_in_the_ui.json @@ -0,0 +1,96 @@ +{ + "name": "braze", + "description": "The event is not mapped in the UI", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.inappmessage.Click", + "properties": { + "device_model": "samsung" + }, + "user": { + "user_id": "user_id", + "external_user_id": "externalUserId" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "user_id", + "context": { + "device": { + "model": "samsung" + }, + "integration": { + "name": "Braze" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "users.messages.inappmessage.Click", + "integrations": { + "Braze": false + }, + "type": "track", + "userId": "externalUserId", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_behaviors_app_session_start_event.json b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_app_session_start_event.json new file mode 100644 index 0000000000..6bece93f98 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_app_session_start_event.json @@ -0,0 +1,113 @@ +{ + "name": "braze", + "description": "users.behaviors.app.SessionStart event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.behaviors.app.SessionStart", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "device_id": "fedcba87-6543-210f-edc-ba9876543210" + }, + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "platform": "ios", + "os_version": "iOS10.3.1", + "device_model": "iPhone7Plus", + "session_id": "b1234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "device": { + "id": "fedcba87-6543-210f-edc-ba9876543210", + "model": "iPhone7Plus" + }, + "os": { + "version": "iOS10.3.1", + "name": "ios" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.behaviors.app.SessionStart", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "session_id": "b1234567-89ab-cdef-0123-456789abcdef" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_behaviors_custom_event_any_custom_event.json b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_custom_event_any_custom_event.json new file mode 100644 index 0000000000..0e91adba2f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_custom_event_any_custom_event.json @@ -0,0 +1,131 @@ +{ + "name": "braze", + "description": "users.behaviors.CustomEvent any custom event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.behaviors.CustomEvent", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "device_id": "fedcba87-6543-210f-edc-ba9876543210", + "timezone": "America/Chicago" + }, + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "platform": "ios", + "os_version": "iOS10.3.1", + "device_model": "iPhone7Plus", + "name": "customeventname", + "ad_id": "01234567-89ab-cdef-0123-456789abcdef", + "ad_id_type": "roku_ad_id", + "ad_tracking_enabled": true, + "custom_properties": { + "stringpropertyname": "a", + "numberpropertyname": 1, + "listpropertyname": ["a", "b"] + } + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "device": { + "id": "fedcba87-6543-210f-edc-ba9876543210", + "model": "iPhone7Plus", + "advertisingId": "01234567-89ab-cdef-0123-456789abcdef", + "adTrackingEnabled": true + }, + "timezone": "America/Chicago", + "os": { + "version": "iOS10.3.1", + "name": "ios" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.behaviors.CustomEvent", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "name": "customeventname", + "ad_id_type": "roku_ad_id", + "custom_properties": { + "stringpropertyname": "a", + "numberpropertyname": 1, + "listpropertyname": ["a", "b"] + } + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_behaviors_purchase_event.json b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_purchase_event.json new file mode 100644 index 0000000000..a361aecdd0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_behaviors_purchase_event.json @@ -0,0 +1,135 @@ +{ + "name": "braze", + "description": "users.behaviors.Purchase event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.behaviors.Purchase", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "device_id": "fedcba87-6543-210f-edc-ba9876543210", + "timezone": "America/Chicago" + }, + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "platform": "ios", + "os_version": "iOS10.3.1", + "device_model": "iPhone7Plus", + "product_id": "1234", + "price": 12.34, + "currency": "AED", + "ad_id": "01234567-89ab-cdef-0123-456789abcdef", + "ad_id_type": "roku_ad_id", + "ad_tracking_enabled": true, + "purchase_properties": { + "stringpropertyname": "a", + "numberpropertyname": 1, + "listpropertyname": ["a", "b"] + } + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "device": { + "id": "fedcba87-6543-210f-edc-ba9876543210", + "model": "iPhone7Plus", + "advertisingId": "01234567-89ab-cdef-0123-456789abcdef", + "adTrackingEnabled": true + }, + "timezone": "America/Chicago", + "os": { + "version": "iOS10.3.1", + "name": "ios" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.behaviors.Purchase", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "product_id": "1234", + "price": 12.34, + "currency": "AED", + "ad_id_type": "roku_ad_id", + "purchase_properties": { + "stringpropertyname": "a", + "numberpropertyname": 1, + "listpropertyname": ["a", "b"] + } + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_messages_email_open_event.json b/go/webhook/testcases/testdata/testcases/braze/users_messages_email_open_event.json new file mode 100644 index 0000000000..f66795c51b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_messages_email_open_event.json @@ -0,0 +1,117 @@ +{ + "name": "braze", + "description": "users.messages.email.Open event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.email.Open", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "timezone": "America/Chicago" + }, + "properties": { + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Canvas", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "dispatch_id": "12345qwert", + "email_address": "test@test.com", + "send_id": "f123456789abcdef01234567", + "user_agent": "Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "timezone": "America/Chicago", + "userAgent": "Mozilla/5.0(Macintosh;IntelMacOSX10_13_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/67.0.3396.99Safari/537.36" + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.messages.email.Open", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "traits": { + "email": "test@test.com" + }, + "properties": { + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Canvas", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "dispatch_id": "12345qwert", + "send_id": "f123456789abcdef01234567" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_messages_inappmessage_click_event.json b/go/webhook/testcases/testdata/testcases/braze/users_messages_inappmessage_click_event.json new file mode 100644 index 0000000000..51f9655cdf --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_messages_inappmessage_click_event.json @@ -0,0 +1,125 @@ +{ + "name": "braze", + "description": "users.messages.inappmessage.Click event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.inappmessage.Click", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "device_id": "fedcba87-6543-210f-edc-ba9876543210", + "timezone": "America/Chicago" + }, + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Campaign", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "platform": "android", + "os_version": "Android (N)", + "device_model": "Nexus 5X", + "button_id": "0", + "send_id": "f123456789abcdef01234567" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "device": { + "id": "fedcba87-6543-210f-edc-ba9876543210", + "model": "Nexus 5X" + }, + "timezone": "America/Chicago", + "os": { + "version": "Android (N)", + "name": "android" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.messages.inappmessage.Click", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Campaign", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "button_id": "0", + "send_id": "f123456789abcdef01234567" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_messages_pushnotification_send_event.json b/go/webhook/testcases/testdata/testcases/braze/users_messages_pushnotification_send_event.json new file mode 100644 index 0000000000..f2b5ed982e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_messages_pushnotification_send_event.json @@ -0,0 +1,121 @@ +{ + "name": "braze", + "description": "users.messages.pushnotification.Send event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.pushnotification.Send", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "device_id": "fedcba87-6543-210f-edc-ba9876543210", + "timezone": "America/Chicago" + }, + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "platform": "ios", + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Campaign", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "send_id": "f123456789abcdef01234567", + "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Braze" + }, + "device": { + "id": "fedcba87-6543-210f-edc-ba9876543210" + }, + "timezone": "America/Chicago", + "os": { + "name": "ios" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.messages.pushnotification.Send", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "properties": { + "app_id": "01234567-89ab-cdef-0123-456789abcdef", + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "My Cool Campaign", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "send_id": "f123456789abcdef01234567", + "dispatch_id": "01234567-89ab-cdef-0123-456789abcdef" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_event.json b/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_event.json new file mode 100644 index 0000000000..f6fb446f9f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_event.json @@ -0,0 +1,117 @@ +{ + "name": "braze", + "description": "users.messages.sms.Delivery event", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.sms.Delivery", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "timezone": "America/Chicago" + }, + "properties": { + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "MyCoolCanvas", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "dispatch_id": "12345qwert", + "to_phone_number": "+16462345678", + "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", + "from_phone_number": "+12123470922" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "timezone": "America/Chicago", + "integration": { + "name": "Braze" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.messages.sms.Delivery", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "traits": { + "phone": "+16462345678" + }, + "properties": { + "canvas_id": "11234567-89ab-cdef-0123-456789abcdef", + "canvas_name": "MyCoolCanvas", + "canvas_variation_id": "31234567-89ab-cdef-0123-456789abcdef", + "canvas_step_id": "41234567-89ab-cdef-0123-456789abcdef", + "dispatch_id": "12345qwert", + "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", + "from_phone_number": "+12123470922" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_send.json b/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_send.json new file mode 100644 index 0000000000..1700cfaf29 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/braze/users_messages_sms_delivery_send.json @@ -0,0 +1,115 @@ +{ + "name": "braze", + "description": "users.messages.sms.Delivery send", + "input": { + "request": { + "body": { + "events": [ + { + "event_type": "users.messages.sms.Delivery", + "id": "a1234567-89ab-cdef-0123-456789abcdef", + "time": 1477502783, + "user": { + "user_id": "0123456789abcdef01234567", + "external_user_id": "user_id", + "timezone": "America/Chicago" + }, + "properties": { + "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", + "campaign_name": "Test Campaign", + "dispatch_id": "12345qwert", + "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", + "to_phone_number": "+16462345678", + "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", + "from_phone_number": "+12123470922" + } + } + ], + "source": { + "ID": "2hgvYyU5TYaFvVzBge6tF2UKoeG", + "OriginalID": "", + "Name": "Braze source", + "SourceDefinition": { + "ID": "1lh9senY3vrBg4JQXswWzyYBTOO", + "Name": "Braze", + "Category": "webhook", + "Type": "cloud" + }, + "Config": { + "customMapping": [ + { + "from": "randomEvent", + "to": "In-App Message Clicked" + } + ] + }, + "Enabled": true, + "WorkspaceID": "2hSS1hZ8kuCpUZAAYsQucAFdob9", + "Destinations": null, + "WriteKey": "2hgvYykpvMaE5Eg47Au8RWC9Yza", + "DgSourceTrackingPlanConfig": { + "sourceId": "", + "version": 0, + "config": null, + "mergedConfig": null, + "deleted": false, + "trackingPlan": { + "id": "", + "version": 0 + } + }, + "Transient": false, + "GeoEnrichment": { + "Enabled": false + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "timezone": "America/Chicago", + "integration": { + "name": "Braze" + } + }, + "integrations": { + "Braze": false + }, + "type": "track", + "event": "users.messages.sms.Delivery", + "messageId": "a1234567-89ab-cdef-0123-456789abcdef", + "anonymousId": "0123456789abcdef01234567", + "userId": "user_id", + "traits": { + "phone": "+16462345678" + }, + "properties": { + "campaign_id": "11234567-89ab-cdef-0123-456789abcdef", + "campaign_name": "Test Campaign", + "dispatch_id": "12345qwert", + "message_variation_id": "c1234567-89ab-cdef-0123-456789abcdef", + "subscription_group_id": "41234567-89ab-cdef-0123-456789abcdef", + "from_phone_number": "+12123470922" + }, + "timestamp": "2016-10-26T17:26:23.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_0.json b/go/webhook/testcases/testdata/testcases/canny/test_0.json new file mode 100644 index 0000000000..889b38a350 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_0.json @@ -0,0 +1,137 @@ +{ + "name": "canny", + "description": "test-0", + "input": { + "request": { + "body": { + "created": "2022-07-28T10:52:46.294Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 13, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-28T10:52:46.172Z", + "customFields": [ + { + "id": "62e13820d7949d44b92d3876", + "name": "abc", + "value": "123" + } + ], + "details": "Array of images", + "eta": null, + "id": "62e26a7e1d4ea13c124337bd", + "imageURLs": [ + "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", + "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" + ], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Custom Fields Testing", + "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" + }, + "objectType": "post", + "type": "post.created" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "post.created", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-28T10:52:46.294Z", + "originalTimestamp": "2022-07-28T10:52:46.294Z", + "type": "track", + "properties": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 13, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-28T10:52:46.172Z", + "customFields": [ + { + "id": "62e13820d7949d44b92d3876", + "name": "abc", + "value": "123" + } + ], + "details": "Array of images", + "eta": null, + "id": "62e26a7e1d4ea13c124337bd", + "imageURLs": [ + "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", + "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" + ], + "objectType": "post", + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Custom Fields Testing", + "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_1.json b/go/webhook/testcases/testdata/testcases/canny/test_1.json new file mode 100644 index 0000000000..caac99d3d8 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_1.json @@ -0,0 +1,135 @@ +{ + "name": "canny", + "description": "test-1", + "input": { + "request": { + "body": { + "created": "2022-07-26T10:35:16.390Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 10, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-26T08:18:52.459Z", + "deletedBy": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "details": "This is the post's details", + "eta": null, + "id": "62dfa36c9950e94655320fe7", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" + }, + "objectType": "post", + "type": "post.deleted" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "post.deleted", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T10:35:16.390Z", + "originalTimestamp": "2022-07-26T10:35:16.390Z", + "type": "track", + "properties": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 10, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-26T08:18:52.459Z", + "deletedBy": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "details": "This is the post's details", + "eta": null, + "id": "62dfa36c9950e94655320fe7", + "imageURLs": [], + "objectType": "post", + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_10.json b/go/webhook/testcases/testdata/testcases/canny/test_10.json new file mode 100644 index 0000000000..4189302961 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_10.json @@ -0,0 +1,149 @@ +{ + "name": "canny", + "description": "test-10", + "input": { + "request": { + "body": { + "created": "2022-07-26T11:32:31.378Z", + "object": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T11:32:31.263Z", + "id": "62dfd0cfb2870d468c9618f5", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "score": 1, + "voter": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": "123" + } + }, + "objectType": "vote", + "type": "vote.created" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "123", + "event": "vote.created", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T11:32:31.378Z", + "originalTimestamp": "2022-07-26T11:32:31.378Z", + "type": "track", + "properties": { + "objectType": "vote", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T11:32:31.263Z", + "id": "62dfd0cfb2870d468c9618f5", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "score": 1 + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_11.json b/go/webhook/testcases/testdata/testcases/canny/test_11.json new file mode 100644 index 0000000000..45112e7ea4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_11.json @@ -0,0 +1,140 @@ +{ + "name": "canny", + "description": "test-11", + "input": { + "request": { + "body": { + "created": "2022-07-26T18:09:27.358Z", + "object": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T08:22:31.109Z", + "id": "62dfa4479950e9465532a338", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "planned", + "tags": [ + { + "id": "62e02db67ad24c46bc175f56", + "name": "abc-tag", + "postCount": 1, + "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" + } + ], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "score": 0, + "voter": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": null, + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + } + }, + "objectType": "vote", + "type": "vote.deleted" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Missing essential fields from Canny. Error: (TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received null)\n" + }, + "queue": [], + "errQueue": [ + { + "created": "2022-07-26T18:09:27.358Z", + "object": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T08:22:31.109Z", + "id": "62dfa4479950e9465532a338", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "planned", + "tags": [ + { + "id": "62e02db67ad24c46bc175f56", + "name": "abc-tag", + "postCount": 1, + "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" + } + ], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "score": 0, + "voter": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": null, + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + } + }, + "objectType": "vote", + "type": "vote.deleted" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_12.json b/go/webhook/testcases/testdata/testcases/canny/test_12.json new file mode 100644 index 0000000000..73340ab335 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_12.json @@ -0,0 +1,108 @@ +{ + "name": "canny", + "description": "test-12", + "input": { + "request": { + "body": { + "created": "2022-07-26T10:35:16.390Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 10, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-26T08:18:52.459Z", + "deletedBy": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "details": "This is the post's details", + "eta": null, + "id": "62dfa36c9950e94655320fe7", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" + }, + "objectType": "post" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Missing essential fields from Canny\n" + }, + "queue": [], + "errQueue": [ + { + "created": "2022-07-26T10:35:16.390Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 10, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-26T08:18:52.459Z", + "deletedBy": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "details": "This is the post's details", + "eta": null, + "id": "62dfa36c9950e94655320fe7", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" + }, + "objectType": "post" + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_2.json b/go/webhook/testcases/testdata/testcases/canny/test_2.json new file mode 100644 index 0000000000..28050f11ed --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_2.json @@ -0,0 +1,133 @@ +{ + "name": "canny", + "description": "test-2", + "input": { + "request": { + "body": { + "created": "2022-07-26T18:32:28.337Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "category": null, + "commentCount": 0, + "created": "2022-07-26T10:43:43.752Z", + "details": "This is the post's details", + "eta": null, + "id": "62dfc55ffe7f6f465b9b4568", + "imageURLs": [], + "issue": { + "description": "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", + "id": "10001", + "key": "TES-2", + "status": "To Do", + "summary": "Canny Source Testing", + "url": "https://rudderstack-user.atlassian.net/browse/TES-2" + }, + "owner": null, + "score": 2, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-8" + }, + "objectType": "post", + "type": "post.jira_issue_linked" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "post.jira_issue_linked", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T18:32:28.337Z", + "originalTimestamp": "2022-07-26T18:32:28.337Z", + "type": "track", + "properties": { + "by": null, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "category": null, + "commentCount": 0, + "created": "2022-07-26T10:43:43.752Z", + "details": "This is the post's details", + "eta": null, + "id": "62dfc55ffe7f6f465b9b4568", + "imageURLs": [], + "issue": { + "description": "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", + "id": "10001", + "key": "TES-2", + "status": "To Do", + "summary": "Canny Source Testing", + "url": "https://rudderstack-user.atlassian.net/browse/TES-2" + }, + "objectType": "post", + "owner": null, + "score": 2, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-8" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_3.json b/go/webhook/testcases/testdata/testcases/canny/test_3.json new file mode 100644 index 0000000000..526340e90e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_3.json @@ -0,0 +1,133 @@ +{ + "name": "canny", + "description": "test-3", + "input": { + "request": { + "body": { + "created": "2022-07-27T04:08:24.377Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "category": null, + "commentCount": 0, + "created": "2022-07-26T11:32:31.228Z", + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "issue": { + "description": "Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2", + "id": "10002", + "key": "TES-3", + "status": "To Do", + "summary": "Images testing", + "url": "https://rudderstack-user.atlassian.net/browse/TES-3" + }, + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "objectType": "post", + "type": "post.jira_issue_unlinked" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "post.jira_issue_unlinked", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-27T04:08:24.377Z", + "originalTimestamp": "2022-07-27T04:08:24.377Z", + "type": "track", + "properties": { + "objectType": "post", + "by": null, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "category": null, + "commentCount": 0, + "created": "2022-07-26T11:32:31.228Z", + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "issue": { + "description": "Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2", + "id": "10002", + "key": "TES-3", + "status": "To Do", + "summary": "Images testing", + "url": "https://rudderstack-user.atlassian.net/browse/TES-3" + }, + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_4.json b/go/webhook/testcases/testdata/testcases/canny/test_4.json new file mode 100644 index 0000000000..3af2ad99fc --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_4.json @@ -0,0 +1,157 @@ +{ + "name": "canny", + "description": "test-4", + "input": { + "request": { + "body": { + "created": "2022-07-26T18:07:03.143Z", + "object": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "changeComment": { + "imageURLs": ["https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp"], + "value": "" + }, + "changedAt": "2022-07-26T18:07:03.143Z", + "changer": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "commentCount": 1, + "created": "2022-07-26T08:22:31.089Z", + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "jira": { + "linkedIssues": [], + "linkedIssueIDs": [] + }, + "owner": null, + "score": 2, + "status": "planned", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "objectType": "post", + "type": "post.status_changed" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "post.status_changed", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T18:07:03.143Z", + "originalTimestamp": "2022-07-26T18:07:03.143Z", + "type": "track", + "properties": { + "objectType": "post", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "changeComment": { + "imageURLs": ["https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp"], + "value": "" + }, + "changedAt": "2022-07-26T18:07:03.143Z", + "changer": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "commentCount": 1, + "created": "2022-07-26T08:22:31.089Z", + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "jira": { + "linkedIssues": [], + "linkedIssueIDs": [] + }, + "owner": null, + "score": 2, + "status": "planned", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_5.json b/go/webhook/testcases/testdata/testcases/canny/test_5.json new file mode 100644 index 0000000000..6efb211c58 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_5.json @@ -0,0 +1,153 @@ +{ + "name": "canny", + "description": "test-5", + "input": { + "request": { + "body": { + "created": "2022-07-26T10:52:17.712Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 11, + "url": "https://rudder.canny.io/admin/board/features" + }, + "created": "2022-07-26T10:52:17.618Z", + "id": "62dfc761af6e2b467381b103", + "imageURLs": ["https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp"], + "internal": true, + "mentions": [], + "parentID": null, + "post": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 2, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "private": false, + "value": "webhook-test" + }, + "objectType": "comment", + "type": "comment.created" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "comment.created", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T10:52:17.712Z", + "originalTimestamp": "2022-07-26T10:52:17.712Z", + "type": "track", + "properties": { + "objectType": "comment", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 11, + "url": "https://rudder.canny.io/admin/board/features" + }, + "created": "2022-07-26T10:52:17.618Z", + "id": "62dfc761af6e2b467381b103", + "imageURLs": ["https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp"], + "internal": true, + "mentions": [], + "parentID": null, + "post": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 2, + "status": "open", + "tags": [], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "private": false, + "value": "webhook-test" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_6.json b/go/webhook/testcases/testdata/testcases/canny/test_6.json new file mode 100644 index 0000000000..0cd90c97b4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_6.json @@ -0,0 +1,149 @@ +{ + "name": "canny", + "description": "test-6", + "input": { + "request": { + "body": { + "created": "2022-07-27T04:12:09.290Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "created": "2022-07-27T04:11:59.942Z", + "id": "62e0bb0faf6e2b467328b133", + "imageURLs": [], + "parentID": null, + "post": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "private": false, + "value": "good" + }, + "objectType": "comment", + "type": "comment.deleted" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "comment.deleted", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-27T04:12:09.290Z", + "originalTimestamp": "2022-07-27T04:12:09.290Z", + "type": "track", + "properties": { + "objectType": "comment", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "created": "2022-07-27T04:11:59.942Z", + "id": "62e0bb0faf6e2b467328b133", + "imageURLs": [], + "parentID": null, + "post": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "private": false, + "value": "good" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_7.json b/go/webhook/testcases/testdata/testcases/canny/test_7.json new file mode 100644 index 0000000000..fd525def22 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_7.json @@ -0,0 +1,149 @@ +{ + "name": "canny", + "description": "test-7", + "input": { + "request": { + "body": { + "created": "2022-07-26T11:32:31.378Z", + "object": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T11:32:31.263Z", + "id": "62dfd0cfb2870d468c9618f5", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "score": 1, + "voter": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + } + }, + "objectType": "vote", + "type": "vote.created" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "vote.created", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T11:32:31.378Z", + "originalTimestamp": "2022-07-26T11:32:31.378Z", + "type": "track", + "properties": { + "objectType": "vote", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T11:32:31.263Z", + "id": "62dfd0cfb2870d468c9618f5", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 0, + "details": "Array of images", + "eta": null, + "id": "62dfd0cfb2870d468c9618dd", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Images testing", + "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" + }, + "score": 1 + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_8.json b/go/webhook/testcases/testdata/testcases/canny/test_8.json new file mode 100644 index 0000000000..13f1153196 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_8.json @@ -0,0 +1,163 @@ +{ + "name": "canny", + "description": "test-8", + "input": { + "request": { + "body": { + "created": "2022-07-26T18:09:27.358Z", + "object": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T08:22:31.109Z", + "id": "62dfa4479950e9465532a338", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "planned", + "tags": [ + { + "id": "62e02db67ad24c46bc175f56", + "name": "abc-tag", + "postCount": 1, + "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" + } + ], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "score": 0, + "voter": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + } + }, + "objectType": "vote", + "type": "vote.deleted" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "event": "vote.deleted", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-26T18:09:27.358Z", + "originalTimestamp": "2022-07-26T18:09:27.358Z", + "type": "track", + "properties": { + "objectType": "vote", + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 12, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "created": "2022-07-26T08:22:31.109Z", + "id": "62dfa4479950e9465532a338", + "post": { + "author": { + "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": null + }, + "by": null, + "category": null, + "commentCount": 1, + "details": "This is the post's details", + "eta": null, + "id": "62dfa4479950e9465532a31e", + "imageURLs": [], + "owner": null, + "score": 1, + "status": "planned", + "tags": [ + { + "id": "62e02db67ad24c46bc175f56", + "name": "abc-tag", + "postCount": 1, + "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" + } + ], + "title": "Post Title", + "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" + }, + "score": 0 + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/canny/test_9.json b/go/webhook/testcases/testdata/testcases/canny/test_9.json new file mode 100644 index 0000000000..e36cffb52b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/canny/test_9.json @@ -0,0 +1,137 @@ +{ + "name": "canny", + "description": "test-9", + "input": { + "request": { + "body": { + "created": "2022-07-28T10:52:46.294Z", + "object": { + "author": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "id": "62d14c90fff7c80d0ec08375", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser", + "userID": "sampleuserId" + }, + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 13, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-28T10:52:46.172Z", + "customFields": [ + { + "id": "62e13820d7949d44b92d3876", + "name": "abc", + "value": "123" + } + ], + "details": "Array of images", + "eta": null, + "id": "62e26a7e1d4ea13c124337bd", + "imageURLs": [ + "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", + "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" + ], + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Custom Fields Testing", + "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" + }, + "objectType": "post", + "type": "post.created" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "sampleuserId", + "event": "post.created", + "integrations": { + "Canny": false + }, + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Canny", + "version": "1.0.0" + }, + "traits": { + "created": "2022-07-15T11:16:32.648Z", + "email": "test@rudderstack.com", + "isAdmin": true, + "name": "Rudder Test", + "url": "https://rudder.canny.io/admin/users/dummyUser" + }, + "externalId": [ + { + "type": "cannyUserId", + "id": "62d14c90fff7c80d0ec08375" + } + ] + }, + "timestamp": "2022-07-28T10:52:46.294Z", + "originalTimestamp": "2022-07-28T10:52:46.294Z", + "type": "track", + "properties": { + "board": { + "created": "2022-07-25T12:11:19.895Z", + "id": "62de88676bc28b44aaaf25cc", + "name": "features", + "postCount": 13, + "url": "https://rudder.canny.io/admin/board/features" + }, + "by": null, + "category": null, + "commentCount": 0, + "created": "2022-07-28T10:52:46.172Z", + "customFields": [ + { + "id": "62e13820d7949d44b92d3876", + "name": "abc", + "value": "123" + } + ], + "details": "Array of images", + "eta": null, + "id": "62e26a7e1d4ea13c124337bd", + "imageURLs": [ + "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", + "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" + ], + "objectType": "post", + "owner": null, + "score": 1, + "status": "open", + "tags": [], + "title": "Custom Fields Testing", + "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json index bff58cdf04..3bb8d60503 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json @@ -4,40 +4,37 @@ "input": { "request": { "body": { + "subscription_id": "whsub_123", "event": { - "subscription_id": "whsub_123", - "event": { - "id": "ev_123", - "date_created": "2024-06-13T03:53:33.917000", - "date_updated": "2024-06-13T03:53:33.917000", - "organization_id": "orga_123", - "user_id": "user_123", - "request_id": "req_123", - "api_key_id": null, - "oauth_client_id": null, - "oauth_scope": null, - "object_type": "group", - "object_id": "group_123", - "lead_id": null, - "action": "created", - "changed_fields": [], - "meta": { - "request_path": "/api/v1/graphql/", - "request_method": "POST" - }, - "data": { - "id": "group_123", - "name": "Test group", - "members": [ - { - "user_id": "user_123" - } - ] - }, - "previous_data": {} - } - }, - "source": {} + "id": "ev_123", + "date_created": "2024-06-13T03:53:33.917000", + "date_updated": "2024-06-13T03:53:33.917000", + "organization_id": "orga_123", + "user_id": "user_123", + "request_id": "req_123", + "api_key_id": null, + "oauth_client_id": null, + "oauth_scope": null, + "object_type": "group", + "object_id": "group_123", + "lead_id": null, + "action": "created", + "changed_fields": [], + "meta": { + "request_path": "/api/v1/graphql/", + "request_method": "POST" + }, + "data": { + "id": "group_123", + "name": "Test group", + "members": [ + { + "user_id": "user_123" + } + ] + }, + "previous_data": {} + } }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json index 4e7076e03d..34a36a8da8 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json @@ -4,49 +4,46 @@ "input": { "request": { "body": { + "subscription_id": "whsub_123", "event": { - "subscription_id": "whsub_123", - "event": { - "id": "ev_123", - "date_created": "2024-06-14T05:16:04.138000", - "date_updated": "2024-06-14T05:16:04.138000", + "id": "ev_123", + "date_created": "2024-06-14T05:16:04.138000", + "date_updated": "2024-06-14T05:16:04.138000", + "organization_id": "orga_123", + "user_id": "user_123", + "request_id": "req_123", + "api_key_id": "api_123", + "oauth_client_id": null, + "oauth_scope": null, + "object_type": "lead", + "object_id": "lead_123", + "lead_id": "lead_123", + "action": "deleted", + "changed_fields": [], + "meta": { + "request_path": "/api/v1/lead/lead_123/", + "request_method": "DELETE" + }, + "data": {}, + "previous_data": { + "created_by_name": "Rudder User", + "addresses": [], + "description": "", + "url": null, + "date_created": "2024-06-14T05:13:42.239000+00:00", + "status_id": "stat_123", + "contact_ids": ["cont_123"], + "id": "lead_12", + "date_updated": "2024-06-14T05:13:42.262000+00:00", + "updated_by_name": "Rudder User", + "status_label": "Potential", + "name": "test name", + "display_name": "test name", "organization_id": "orga_123", - "user_id": "user_123", - "request_id": "req_123", - "api_key_id": "api_123", - "oauth_client_id": null, - "oauth_scope": null, - "object_type": "lead", - "object_id": "lead_123", - "lead_id": "lead_123", - "action": "deleted", - "changed_fields": [], - "meta": { - "request_path": "/api/v1/lead/lead_123/", - "request_method": "DELETE" - }, - "data": {}, - "previous_data": { - "created_by_name": "Rudder User", - "addresses": [], - "description": "", - "url": null, - "date_created": "2024-06-14T05:13:42.239000+00:00", - "status_id": "stat_123", - "contact_ids": ["cont_123"], - "id": "lead_12", - "date_updated": "2024-06-14T05:13:42.262000+00:00", - "updated_by_name": "Rudder User", - "status_label": "Potential", - "name": "test name", - "display_name": "test name", - "organization_id": "orga_123", - "updated_by": "user_123", - "created_by": "user_123" - } + "updated_by": "user_123", + "created_by": "user_123" } - }, - "source": {} + } }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json index 186724a793..38aeba6468 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json @@ -5,66 +5,63 @@ "request": { "body": { "event": { - "event": { - "date_created": "2019-01-15T12:48:23.395000", - "meta": { - "request_method": "PUT", - "request_path": "/api/v1/opportunity/object_id/" - }, - "id": "ev_123", - "action": "updated", - "date_updated": "2019-01-15T12:48:23.395000", - "changed_fields": [ - "confidence", - "date_updated", - "status_id", - "status_label", - "status_type" - ], - "previous_data": { - "status_type": "active", - "confidence": 70, - "date_updated": "2019-01-15T12:47:39.873000+00:00", - "status_id": "stat_123", - "status_label": "Active" - }, - "organization_id": "orga_123", - "data": { - "contact_name": "Mr. Jones", - "user_name": "Joe Kemp", - "value_period": "one_time", - "updated_by_name": "Joe Kemp", - "date_created": "2019-01-15T12:41:24.496000+00:00", - "user_id": "user_123", - "updated_by": "user_123", - "value_currency": "USD", - "organization_id": "orga_123", - "status_label": "Won", - "contact_id": "cont_123", - "status_type": "won", - "created_by_name": "Joe Kemp", - "id": "id_12", - "lead_name": "KLine", - "date_lost": null, - "note": "", - "date_updated": "2019-01-15T12:48:23.392000+00:00", - "status_id": "stat_12", - "value": 100000, - "created_by": "user_123", - "value_formatted": "$1,000", - "date_won": "2019-01-15", - "lead_id": "lead_123", - "confidence": 100 - }, - "request_id": "req_123", - "object_id": "object_id", + "date_created": "2019-01-15T12:48:23.395000", + "meta": { + "request_method": "PUT", + "request_path": "/api/v1/opportunity/object_id/" + }, + "id": "ev_123", + "action": "updated", + "date_updated": "2019-01-15T12:48:23.395000", + "changed_fields": [ + "confidence", + "date_updated", + "status_id", + "status_label", + "status_type" + ], + "previous_data": { + "status_type": "active", + "confidence": 70, + "date_updated": "2019-01-15T12:47:39.873000+00:00", + "status_id": "stat_123", + "status_label": "Active" + }, + "organization_id": "orga_123", + "data": { + "contact_name": "Mr. Jones", + "user_name": "Joe Kemp", + "value_period": "one_time", + "updated_by_name": "Joe Kemp", + "date_created": "2019-01-15T12:41:24.496000+00:00", "user_id": "user_123", - "object_type": "opportunity", - "lead_id": "lead_123" + "updated_by": "user_123", + "value_currency": "USD", + "organization_id": "orga_123", + "status_label": "Won", + "contact_id": "cont_123", + "status_type": "won", + "created_by_name": "Joe Kemp", + "id": "id_12", + "lead_name": "KLine", + "date_lost": null, + "note": "", + "date_updated": "2019-01-15T12:48:23.392000+00:00", + "status_id": "stat_12", + "value": 100000, + "created_by": "user_123", + "value_formatted": "$1,000", + "date_won": "2019-01-15", + "lead_id": "lead_123", + "confidence": 100 }, - "subscription_id": "whsub_123" + "request_id": "req_123", + "object_id": "object_id", + "user_id": "user_123", + "object_type": "opportunity", + "lead_id": "lead_123" }, - "source": {} + "subscription_id": "whsub_123" }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json b/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json new file mode 100644 index 0000000000..6ab438b077 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json @@ -0,0 +1,324 @@ +{ + "name": "cordial", + "description": "Multiple object Input event with batched payload", + "input": { + "request": { + "body": [ + { + "contact": { + "_id": "633b2fd70a12be027e0b0xxx", + "lang_locale": "EN-US", + "channels": { + "email": { + "address": "johndoe@example.com", + "subscribeStatus": "none" + } + }, + "createdAt": "2022-10-03T18:54:15+0000", + "email_sha256_hash": "f959bdf883831ebb96612eb9xxxx1e0c9481780adf5f70xxx862155531bf61df", + "first_name": "john", + "last_name": "doe", + "lastUpdateSource": "cordial", + "lastModified": "2024-07-24T07:52:46+0000", + "cID": "633b2fd70a12be027e0b0xxx" + }, + "event": { + "_id": "66a0b2ce5344b55fxxxc5a64", + "cID": "633b2fd70a12be027e0b0xxx", + "ts": "2024-07-24T07:52:46+00:00", + "ats": "2024-07-24T07:52:39+0000", + "g": { + "countryISO": "PL", + "country": "Poland", + "state": "MZ", + "city": "Warszawa", + "postalCode": "00-686", + "geoLoc": { + "lat": 52.22744369506836, + "lon": 21.009017944335938 + }, + "tz": "Europe/Warsaw" + }, + "d": { + "type": "computer", + "device": "Macintosh", + "platform": "OS X", + "browser": "Chrome", + "robot": false + }, + "a": "browse", + "UID": "471af949fffe749c2ebfxxx950ea73c", + "sp": { + "bid": "cf6de7f1-cce5-40xx-ac9c-7c82a2xxc09e" + }, + "tzo": -7, + "rl": "6", + "time": "2024-07-24T07:52:39+0000", + "action": "browse", + "bmID": "", + "first": 0, + "properties": { + "url": "https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart", + "product_item_group_id": ["1094269"], + "product_category": ["allproducts"], + "product_name": ["wtp ab"], + "product_group": ["women"] + } + } + }, + { + "contact": { + "_id": "633b2fd12312be027e0b0xxx", + "lang_locale": "EN-US", + "channels": { + "email": { + "address": "johndoe1@example.com", + "subscribeStatus": "none" + } + }, + "createdAt": "2022-10-03T18:54:15+0000", + "email_sha256_hash": "f95912b883831eab11612eb9xxxx1e0c9481780ad45770xxx862155531bf61df", + "first_name": "john", + "last_name": "doe", + "lastUpdateSource": "cordial", + "lastModified": "2024-07-24T07:52:46+0000", + "cID": "633b2fd12312be027e0b0xxx" + }, + "event": { + "_id": "66aku0b2ce527b55fx1xc5a64", + "cID": "633b2fd12312be027e0b0xxx", + "ts": "2024-07-24T07:52:46+00:00", + "ats": "2024-07-24T07:52:39+0000", + "g": { + "countryISO": "PL", + "country": "Poland", + "state": "MZ", + "city": "Warszawa", + "postalCode": "00-686", + "geoLoc": { + "lat": 52.22744369506836, + "lon": 21.009017944335938 + }, + "tz": "Europe/Warsaw" + }, + "d": { + "type": "computer", + "device": "Macintosh", + "platform": "OS X", + "browser": "Chrome", + "robot": false + }, + "a": "browse", + "UID": "471af949fffe74sdh382ebfxxx950ea73c", + "sp": { + "bid": "cf6de7f1-123ce5-20xx-ac9c-7c82a2xxc09e" + }, + "tzo": -7, + "rl": "6", + "time": "2024-07-24T07:52:39+0000", + "action": "browse", + "bmID": "", + "first": 0, + "properties": { + "url": "https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart", + "product_item_group_id": ["1094269"], + "product_category": ["allproducts"], + "product_name": ["wtp ab"], + "product_group": ["women"] + } + } + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Cordial" + }, + "traits": { + "userId": "633b2fd70a12be027e0b0xxx", + "email": "johndoe@example.com", + "_id": "633b2fd70a12be027e0b0xxx", + "lang_locale": "EN-US", + "channels": { + "email": { + "address": "johndoe@example.com", + "subscribeStatus": "none" + } + }, + "createdAt": "2022-10-03T18:54:15+0000", + "email_sha256_hash": "f959bdf883831ebb96612eb9xxxx1e0c9481780adf5f70xxx862155531bf61df", + "first_name": "john", + "last_name": "doe", + "lastUpdateSource": "cordial", + "lastModified": "2024-07-24T07:52:46+0000", + "cID": "633b2fd70a12be027e0b0xxx" + }, + "device": { + "type": "computer", + "device": "Macintosh", + "platform": "OS X", + "browser": "Chrome", + "robot": false + }, + "externalId": [ + { + "id": "633b2fd70a12be027e0b0xxx", + "type": "cordialContactId" + } + ] + }, + "integrations": { + "Cordial": false + }, + "type": "track", + "event": "browse", + "properties": { + "event_id": "66a0b2ce5344b55fxxxc5a64", + "url": "https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart", + "product_item_group_id": ["1094269"], + "product_category": ["allproducts"], + "product_name": ["wtp ab"], + "product_group": ["women"], + "cID": "633b2fd70a12be027e0b0xxx", + "ts": "2024-07-24T07:52:46+00:00", + "ats": "2024-07-24T07:52:39+0000", + "g": { + "countryISO": "PL", + "country": "Poland", + "state": "MZ", + "city": "Warszawa", + "postalCode": "00-686", + "geoLoc": { + "lat": 52.22744369506836, + "lon": 21.009017944335938 + }, + "tz": "Europe/Warsaw" + }, + "a": "browse", + "UID": "471af949fffe749c2ebfxxx950ea73c", + "sp": { + "bid": "cf6de7f1-cce5-40xx-ac9c-7c82a2xxc09e" + }, + "tzo": -7, + "rl": "6", + "time": "2024-07-24T07:52:39+0000", + "action": "browse", + "bmID": "", + "first": 0 + }, + "userId": "633b2fd70a12be027e0b0xxx", + "timestamp": "2024-07-24T07:52:46+00:00", + "sentAt": "2024-07-24T07:52:46+00:00", + "originalTimestamp": "2024-07-24T07:52:46+00:00", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Cordial" + }, + "traits": { + "userId": "633b2fd12312be027e0b0xxx", + "email": "johndoe1@example.com", + "_id": "633b2fd12312be027e0b0xxx", + "lang_locale": "EN-US", + "channels": { + "email": { + "address": "johndoe1@example.com", + "subscribeStatus": "none" + } + }, + "createdAt": "2022-10-03T18:54:15+0000", + "email_sha256_hash": "f95912b883831eab11612eb9xxxx1e0c9481780ad45770xxx862155531bf61df", + "first_name": "john", + "last_name": "doe", + "lastUpdateSource": "cordial", + "lastModified": "2024-07-24T07:52:46+0000", + "cID": "633b2fd12312be027e0b0xxx" + }, + "device": { + "type": "computer", + "device": "Macintosh", + "platform": "OS X", + "browser": "Chrome", + "robot": false + }, + "externalId": [ + { + "id": "633b2fd12312be027e0b0xxx", + "type": "cordialContactId" + } + ] + }, + "integrations": { + "Cordial": false + }, + "type": "track", + "event": "browse", + "properties": { + "event_id": "66aku0b2ce527b55fx1xc5a64", + "url": "https://aaff-008.dx.commercecloud.salesforce.com/s/UGG-US/cart", + "product_item_group_id": ["1094269"], + "product_category": ["allproducts"], + "product_name": ["wtp ab"], + "product_group": ["women"], + "cID": "633b2fd12312be027e0b0xxx", + "ts": "2024-07-24T07:52:46+00:00", + "ats": "2024-07-24T07:52:39+0000", + "g": { + "countryISO": "PL", + "country": "Poland", + "state": "MZ", + "city": "Warszawa", + "postalCode": "00-686", + "geoLoc": { + "lat": 52.22744369506836, + "lon": 21.009017944335938 + }, + "tz": "Europe/Warsaw" + }, + "a": "browse", + "UID": "471af949fffe74sdh382ebfxxx950ea73c", + "sp": { + "bid": "cf6de7f1-123ce5-20xx-ac9c-7c82a2xxc09e" + }, + "tzo": -7, + "rl": "6", + "time": "2024-07-24T07:52:39+0000", + "action": "browse", + "bmID": "", + "first": 0 + }, + "userId": "633b2fd12312be027e0b0xxx", + "timestamp": "2024-07-24T07:52:46+00:00", + "sentAt": "2024-07-24T07:52:46+00:00", + "originalTimestamp": "2024-07-24T07:52:46+00:00", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json new file mode 100644 index 0000000000..eac08aea16 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json @@ -0,0 +1,138 @@ +{ + "name": "cordial", + "description": "Simple Single object Input event with no CId", + "input": { + "request": { + "body": { + "contact": { + "_id": "6690fe3655e334xx028xx1", + "channels": { + "email": { + "address": "jondoe@example.com", + "subscribeStatus": "subscribed", + "subscribedAt": "2024-07-12T09:58:14+0000" + } + }, + "createdAt": "2024-07-12T09:58:14+0000", + "address": { + "city": "San Miego" + }, + "first_name": "John", + "last_name": "Doe", + "lastUpdateSource": "api", + "lastModified": "2024-07-12T13:00:49+0000" + }, + "event": { + "_id": "669141857b8cxxx1ba0da2x1", + "ts": "2024-07-12T14:45:25+00:00", + "ats": "2024-07-12T14:45:25+0000", + "d": { + "type": "computer", + "device": false, + "platform": false, + "browser": false, + "robot": true + }, + "a": "browse", + "tzo": -7, + "rl": "a", + "UID": "4934ee07197xx3f74d5xxxx7b0076", + "time": "2024-07-12T14:45:25+0000", + "action": "browse", + "bmID": "", + "first": 0, + "properties": { + "category": "Shirts", + "url": "http://example.com/shirts", + "description": "A really cool khaki shirt.", + "price": 9.99, + "title": "Khaki Shirt", + "test_key": "value" + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Cordial" + }, + "traits": { + "userId": "6690fe3655e334xx028xx1", + "email": "jondoe@example.com", + "_id": "6690fe3655e334xx028xx1", + "channels": { + "email": { + "address": "jondoe@example.com", + "subscribeStatus": "subscribed", + "subscribedAt": "2024-07-12T09:58:14+0000" + } + }, + "createdAt": "2024-07-12T09:58:14+0000", + "address": { + "city": "San Miego" + }, + "first_name": "John", + "last_name": "Doe", + "lastUpdateSource": "api", + "lastModified": "2024-07-12T13:00:49+0000" + }, + "device": { + "type": "computer", + "device": false, + "platform": false, + "browser": false, + "robot": true + }, + "externalId": [] + }, + "integrations": { + "Cordial": false + }, + "type": "track", + "event": "browse", + "originalTimestamp": "2024-07-12T14:45:25+00:00", + "properties": { + "event_id": "669141857b8cxxx1ba0da2x1", + "category": "Shirts", + "url": "http://example.com/shirts", + "description": "A really cool khaki shirt.", + "price": 9.99, + "title": "Khaki Shirt", + "test_key": "value", + "ts": "2024-07-12T14:45:25+00:00", + "ats": "2024-07-12T14:45:25+0000", + "a": "browse", + "tzo": -7, + "rl": "a", + "UID": "4934ee07197xx3f74d5xxxx7b0076", + "time": "2024-07-12T14:45:25+0000", + "action": "browse", + "bmID": "", + "first": 0 + }, + "userId": "6690fe3655e334xx028xx1", + "timestamp": "2024-07-12T14:45:25+00:00", + "sentAt": "2024-07-12T14:45:25+00:00", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json new file mode 100644 index 0000000000..b7e4cae319 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json @@ -0,0 +1,133 @@ +{ + "name": "cordial", + "description": "Simple Single object Input event with normal channel and action", + "input": { + "request": { + "body": { + "contact": { + "_id": "6690fe3655e334xx028xxx", + "channels": { + "email": { + "address": "jondoe@example.com", + "subscribeStatus": "subscribed", + "subscribedAt": "2024-07-12T09:58:14+0000" + } + }, + "createdAt": "2024-07-12T09:58:14+0000", + "address": { + "city": "San Miego" + }, + "first_name": "John", + "last_name": "Doe", + "lastUpdateSource": "api", + "lastModified": "2024-07-12T13:00:49+0000", + "cID": "6690fe3655e334xx028xxx" + }, + "event": { + "_id": "669141857b8cxxx1ba0da2xx", + "cID": "6690fe3655e334xx028xxx", + "ts": "2024-07-12T14:45:25+00:00", + "ats": "2024-07-12T14:45:25+0000", + "a": "browse", + "tzo": -7, + "rl": "a", + "UID": "4934ee07118197xx3f74d5xxxx7b0076", + "time": "2024-07-12T14:45:25+0000", + "action": "browse", + "bmID": "", + "first": 0, + "properties": { + "category": "Shirts", + "url": "http://example.com/shirts", + "description": "A really cool khaki shirt.", + "price": 9.99, + "title": "Khaki Shirt", + "test_key": "value" + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Cordial" + }, + "traits": { + "userId": "6690fe3655e334xx028xxx", + "email": "jondoe@example.com", + "_id": "6690fe3655e334xx028xxx", + "channels": { + "email": { + "address": "jondoe@example.com", + "subscribeStatus": "subscribed", + "subscribedAt": "2024-07-12T09:58:14+0000" + } + }, + "createdAt": "2024-07-12T09:58:14+0000", + "address": { + "city": "San Miego" + }, + "first_name": "John", + "last_name": "Doe", + "lastUpdateSource": "api", + "lastModified": "2024-07-12T13:00:49+0000", + "cID": "6690fe3655e334xx028xxx" + }, + "externalId": [ + { + "id": "6690fe3655e334xx028xxx", + "type": "cordialContactId" + } + ] + }, + "integrations": { + "Cordial": false + }, + "type": "track", + "event": "browse", + "originalTimestamp": "2024-07-12T14:45:25+00:00", + "properties": { + "event_id": "669141857b8cxxx1ba0da2xx", + "category": "Shirts", + "url": "http://example.com/shirts", + "description": "A really cool khaki shirt.", + "price": 9.99, + "title": "Khaki Shirt", + "test_key": "value", + "cID": "6690fe3655e334xx028xxx", + "ts": "2024-07-12T14:45:25+00:00", + "ats": "2024-07-12T14:45:25+0000", + "a": "browse", + "tzo": -7, + "rl": "a", + "UID": "4934ee07118197xx3f74d5xxxx7b0076", + "time": "2024-07-12T14:45:25+0000", + "action": "browse", + "bmID": "", + "first": 0 + }, + "userId": "6690fe3655e334xx028xxx", + "timestamp": "2024-07-12T14:45:25+00:00", + "sentAt": "2024-07-12T14:45:25+00:00", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_0.json b/go/webhook/testcases/testdata/testcases/customerio/test_0.json new file mode 100644 index 0000000000..3f308c34f0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_0.json @@ -0,0 +1,59 @@ +{ + "name": "customerio", + "description": "test-0", + "input": { + "request": { + "body": { + "data": { + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "email_address": "test@example.com" + }, + "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", + "object_type": "customer", + "metric": "subscribed", + "timestamp": "abc" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Customer Subscribed", + "properties": { + "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" + }, + "userId": "0200102", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_1.json b/go/webhook/testcases/testdata/testcases/customerio/test_1.json new file mode 100644 index 0000000000..aef99f3dac --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_1.json @@ -0,0 +1,59 @@ +{ + "name": "customerio", + "description": "test-1", + "input": { + "request": { + "body": { + "data": { + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "email_address": "test@example.com" + }, + "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", + "object_type": "customer", + "metric": "subscribed", + "timestamp": "1585250199" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Customer Subscribed", + "properties": { + "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" + }, + "userId": "0200102", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_10.json b/go/webhook/testcases/testdata/testcases/customerio/test_10.json new file mode 100644 index 0000000000..4bcba90c80 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_10.json @@ -0,0 +1,75 @@ +{ + "name": "customerio", + "description": "test-10", + "input": { + "request": { + "body": { + "data": { + "action_id": 37, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof", + "device_platform": "android" + } + ] + }, + "event_id": "01E4C4HDQ7P1X9KTKF0ZX7PWHE", + "object_type": "push", + "metric": "sent", + "timestamp": 1585250350 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Push Sent", + "properties": { + "eventId": "01E4C4HDQ7P1X9KTKF0ZX7PWHE", + "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "actionId": 37, + "broadcastId": 9, + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof", + "device_platform": "android" + } + ] + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:19:10.000Z", + "sentAt": "2020-03-26T19:19:10.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_11.json b/go/webhook/testcases/testdata/testcases/customerio/test_11.json new file mode 100644 index 0000000000..e6b025578d --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_11.json @@ -0,0 +1,79 @@ +{ + "name": "customerio", + "description": "test-11", + "input": { + "request": { + "body": { + "data": { + "action_id": 37, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "href": "ciosas://product/2", + "link_id": 1, + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" + } + ] + }, + "event_id": "01E4V2SBHYK4TNTG8WKMP39G9R", + "object_type": "push", + "metric": "clicked", + "timestamp": 1585751829 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Push Link Clicked", + "properties": { + "eventId": "01E4V2SBHYK4TNTG8WKMP39G9R", + "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "actionId": 37, + "broadcastId": 9, + "link": { + "url": "ciosas://product/2", + "id": 1 + }, + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" + } + ] + }, + "userId": "0200102", + "originalTimestamp": "2020-04-01T14:37:09.000Z", + "sentAt": "2020-04-01T14:37:09.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_12.json b/go/webhook/testcases/testdata/testcases/customerio/test_12.json new file mode 100644 index 0000000000..883df1feb9 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_12.json @@ -0,0 +1,65 @@ +{ + "name": "customerio", + "description": "test-12", + "input": { + "request": { + "body": { + "data": { + "action_id": 41, + "campaign_id": 7, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "ROk1AAIBcR4iT6mueuxiDtzO8HXv", + "failure_message": "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309." + }, + "event_id": "01E4F3DCS83P8HT7R3E6DWQN1X", + "object_type": "sms", + "metric": "attempted", + "timestamp": 1234567890 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "SMS Attempted", + "properties": { + "eventId": "01E4F3DCS83P8HT7R3E6DWQN1X", + "deliveryId": "ROk1AAIBcR4iT6mueuxiDtzO8HXv", + "actionId": 41, + "reason": "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309.", + "campaignId": 7 + }, + "userId": "0200102", + "originalTimestamp": "2009-02-13T23:31:30.000Z", + "sentAt": "2009-02-13T23:31:30.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_13.json b/go/webhook/testcases/testdata/testcases/customerio/test_13.json new file mode 100644 index 0000000000..f50ab7bb95 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_13.json @@ -0,0 +1,73 @@ +{ + "name": "customerio", + "description": "test-13", + "input": { + "request": { + "body": { + "data": { + "action_id": 38, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgIBcRh6qzHz-8gKvscP2UZa", + "href": "https://app.com/verify", + "link_id": 1, + "recipient": "+18008675309" + }, + "event_id": "01E4XXPN42JDF4B1ATQKTZ8WHV", + "object_type": "sms", + "metric": "clicked", + "timestamp": 1585847161 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "+18008675309" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "SMS Link Clicked", + "properties": { + "eventId": "01E4XXPN42JDF4B1ATQKTZ8WHV", + "deliveryId": "RPILAgIBcRh6qzHz-8gKvscP2UZa", + "actionId": 38, + "broadcastId": 9, + "link": { + "url": "https://app.com/verify", + "id": 1 + } + }, + "userId": "0200102", + "originalTimestamp": "2020-04-02T17:06:01.000Z", + "sentAt": "2020-04-02T17:06:01.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_14.json b/go/webhook/testcases/testdata/testcases/customerio/test_14.json new file mode 100644 index 0000000000..f123414e90 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_14.json @@ -0,0 +1,67 @@ +{ + "name": "customerio", + "description": "test-14", + "input": { + "request": { + "body": { + "data": { + "action_id": 39, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgQBcRhNAufb0s30bmz5HD7Y", + "recipient": "#signups" + }, + "event_id": "01E4C4TQKD6KJ274870J5DE2HB", + "object_type": "slack", + "metric": "sent", + "timestamp": 1585250655 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "#signups" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Slack Message Sent", + "properties": { + "eventId": "01E4C4TQKD6KJ274870J5DE2HB", + "deliveryId": "RPILAgQBcRhNAufb0s30bmz5HD7Y", + "actionId": 39, + "broadcastId": 9 + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:24:15.000Z", + "sentAt": "2020-03-26T19:24:15.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_15.json b/go/webhook/testcases/testdata/testcases/customerio/test_15.json new file mode 100644 index 0000000000..192cfe8f97 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_15.json @@ -0,0 +1,73 @@ +{ + "name": "customerio", + "description": "test-15", + "input": { + "request": { + "body": { + "data": { + "action_id": 39, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgQBcRhocpCJE3mFfwvRzNe6", + "href": "http://bing.com", + "link_id": 1, + "recipient": "#signups" + }, + "event_id": "01E4C6HJTBNDX18XC4B88M3Y2G", + "object_type": "slack", + "metric": "clicked", + "timestamp": 1585252451 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "#signups" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Slack Message Link Clicked", + "properties": { + "eventId": "01E4C6HJTBNDX18XC4B88M3Y2G", + "deliveryId": "RPILAgQBcRhocpCJE3mFfwvRzNe6", + "actionId": 39, + "broadcastId": 9, + "link": { + "url": "http://bing.com", + "id": 1 + } + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:54:11.000Z", + "sentAt": "2020-03-26T19:54:11.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_16.json b/go/webhook/testcases/testdata/testcases/customerio/test_16.json new file mode 100644 index 0000000000..c62604cab1 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_16.json @@ -0,0 +1,65 @@ +{ + "name": "customerio", + "description": "test-16", + "input": { + "request": { + "body": { + "data": { + "action_id": 39, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgQBcRhIBqRiZAc0fyQiLvkC", + "failure_message": "value passed for channel was invalid" + }, + "event_id": "01E4C4HDQ77BCN0X23Z3WBE764", + "object_type": "slack", + "metric": "failed", + "timestamp": 1585250350 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Slack Message Failed", + "properties": { + "eventId": "01E4C4HDQ77BCN0X23Z3WBE764", + "deliveryId": "RPILAgQBcRhIBqRiZAc0fyQiLvkC", + "actionId": 39, + "broadcastId": 9, + "reason": "value passed for channel was invalid" + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:19:10.000Z", + "sentAt": "2020-03-26T19:19:10.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_17.json b/go/webhook/testcases/testdata/testcases/customerio/test_17.json new file mode 100644 index 0000000000..3cad7de575 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_17.json @@ -0,0 +1,63 @@ +{ + "name": "customerio", + "description": "test-17", + "input": { + "request": { + "body": { + "data": { + "action_id": 40, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgEBcRhIBqSrYcXDr2ks6Pj9" + }, + "event_id": "01E4C4G1S04QCV1NASF4NWMQNR", + "object_type": "webhook", + "metric": "drafted", + "timestamp": 1585250305 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Webhook Message Drafted", + "properties": { + "eventId": "01E4C4G1S04QCV1NASF4NWMQNR", + "deliveryId": "RPILAgEBcRhIBqSrYcXDr2ks6Pj9", + "actionId": 40, + "broadcastId": 9 + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:18:25.000Z", + "sentAt": "2020-03-26T19:18:25.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_18.json b/go/webhook/testcases/testdata/testcases/customerio/test_18.json new file mode 100644 index 0000000000..b61e3ef31e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_18.json @@ -0,0 +1,65 @@ +{ + "name": "customerio", + "description": "test-18", + "input": { + "request": { + "body": { + "data": { + "action_id": 38, + "broadcast_id": 6, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RAECAQFxNeUBx6LqgjqrN1j-BJc=", + "failure_message": "Variable 'customer.test' is missing" + }, + "event_id": "01E4TYA2KA9T0XGHCRJ784B774", + "object_type": "webhook", + "metric": "attempted", + "timestamp": 1585747134 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Webhook Message Attempted", + "properties": { + "eventId": "01E4TYA2KA9T0XGHCRJ784B774", + "deliveryId": "RAECAQFxNeUBx6LqgjqrN1j-BJc=", + "actionId": 38, + "broadcastId": 6, + "reason": "Variable 'customer.test' is missing" + }, + "userId": "0200102", + "originalTimestamp": "2020-04-01T13:18:54.000Z", + "sentAt": "2020-04-01T13:18:54.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_19.json b/go/webhook/testcases/testdata/testcases/customerio/test_19.json new file mode 100644 index 0000000000..6a5dead233 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_19.json @@ -0,0 +1,67 @@ +{ + "name": "customerio", + "description": "test-19", + "input": { + "request": { + "body": { + "data": { + "action_id": 40, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgEBcRhNAufr2aU82jtDZEh6", + "recipient": "https://test.example.com/process" + }, + "event_id": "01E4C6EP0HCKRHKFARMZ5XEH7A", + "object_type": "webhook", + "metric": "sent", + "timestamp": 1585252357 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "https://test.example.com/process" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Webhook Message Sent", + "properties": { + "eventId": "01E4C6EP0HCKRHKFARMZ5XEH7A", + "deliveryId": "RPILAgEBcRhNAufr2aU82jtDZEh6", + "actionId": 40, + "broadcastId": 9 + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:52:37.000Z", + "sentAt": "2020-03-26T19:52:37.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_2.json b/go/webhook/testcases/testdata/testcases/customerio/test_2.json new file mode 100644 index 0000000000..16bfc11a86 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_2.json @@ -0,0 +1,61 @@ +{ + "name": "customerio", + "description": "test-2", + "input": { + "request": { + "body": { + "data": { + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "email_address": "test@example.com" + }, + "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", + "object_type": "customer", + "metric": "subscribed", + "timestamp": 1585250199 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Customer Subscribed", + "properties": { + "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:16:39.000Z", + "sentAt": "2020-03-26T19:16:39.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_20.json b/go/webhook/testcases/testdata/testcases/customerio/test_20.json new file mode 100644 index 0000000000..45e346c553 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_20.json @@ -0,0 +1,73 @@ +{ + "name": "customerio", + "description": "test-20", + "input": { + "request": { + "body": { + "data": { + "action_id": 40, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgEBcRhNAufr2aU82jtDZEh6", + "href": "http://bing.com", + "link_id": 1, + "recipient": "https://test.example.com/process" + }, + "event_id": "01E4C6F5N1Y54TVGJTN64Y1ZS9", + "object_type": "webhook", + "metric": "clicked", + "timestamp": 1585252373 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "https://test.example.com/process" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Webhook Message Link Clicked", + "properties": { + "eventId": "01E4C6F5N1Y54TVGJTN64Y1ZS9", + "deliveryId": "RPILAgEBcRhNAufr2aU82jtDZEh6", + "actionId": 40, + "broadcastId": 9, + "link": { + "url": "http://bing.com", + "id": 1 + } + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:52:53.000Z", + "sentAt": "2020-03-26T19:52:53.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_21.json b/go/webhook/testcases/testdata/testcases/customerio/test_21.json new file mode 100644 index 0000000000..0d7ab767cf --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_21.json @@ -0,0 +1,65 @@ +{ + "name": "customerio", + "description": "test-21", + "input": { + "request": { + "body": { + "data": { + "action_id": 38, + "broadcast_id": 6, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RAECAQFxNeK3bC4SYqhQqFGBQrQ=", + "failure_message": "HTTP 404 Not Found []" + }, + "event_id": "01E4TY5FVB0ZQ4KVDKRME0XSYZ", + "object_type": "webhook", + "metric": "failed", + "timestamp": 1585746984 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Webhook Message Failed", + "properties": { + "eventId": "01E4TY5FVB0ZQ4KVDKRME0XSYZ", + "deliveryId": "RAECAQFxNeK3bC4SYqhQqFGBQrQ=", + "actionId": 38, + "broadcastId": 6, + "reason": "HTTP 404 Not Found []" + }, + "userId": "0200102", + "originalTimestamp": "2020-04-01T13:16:24.000Z", + "sentAt": "2020-04-01T13:16:24.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_22.json b/go/webhook/testcases/testdata/testcases/customerio/test_22.json new file mode 100644 index 0000000000..d68071ef4c --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_22.json @@ -0,0 +1,79 @@ +{ + "name": "customerio", + "description": "test-22", + "input": { + "request": { + "body": { + "data": { + "action_id": 37, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "href": "ciosas://product/2", + "link_id": 1, + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" + } + ] + }, + "event_id": "01E4V2SBHYK4TNTG8WKMP39G9S", + "object_type": "push", + "metric": "delivered", + "timestamp": 1585751830 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Push Delivered", + "properties": { + "eventId": "01E4V2SBHYK4TNTG8WKMP39G9S", + "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", + "actionId": 37, + "broadcastId": 9, + "link": { + "url": "ciosas://product/2", + "id": 1 + }, + "recipients": [ + { + "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" + } + ] + }, + "userId": "0200102", + "originalTimestamp": "2020-04-01T14:37:10.000Z", + "sentAt": "2020-04-01T14:37:10.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_3.json b/go/webhook/testcases/testdata/testcases/customerio/test_3.json new file mode 100644 index 0000000000..680ab4e55e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_3.json @@ -0,0 +1,61 @@ +{ + "name": "customerio", + "description": "test-3", + "input": { + "request": { + "body": { + "data": { + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "email_address": "test@example.com" + }, + "event_id": "01E4C4C6P79C12J5A6KPE6XNFD", + "object_type": "customer", + "metric": "unsubscribed", + "timestamp": 1585250179 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Customer Unsubscribed", + "properties": { + "eventId": "01E4C4C6P79C12J5A6KPE6XNFD" + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:16:19.000Z", + "sentAt": "2020-03-26T19:16:19.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_4.json b/go/webhook/testcases/testdata/testcases/customerio/test_4.json new file mode 100644 index 0000000000..bc152b34fd --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_4.json @@ -0,0 +1,63 @@ +{ + "name": "customerio", + "description": "test-4", + "input": { + "request": { + "body": { + "data": { + "action_id": 36, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgABcRhIBqSp7kiPekGBIeVh" + }, + "event_id": "01E4C4G1S0AMNG0XVF2M7RPH5S", + "object_type": "email", + "metric": "drafted", + "timestamp": 1585250305 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Email Drafted", + "properties": { + "eventId": "01E4C4G1S0AMNG0XVF2M7RPH5S", + "deliveryId": "RPILAgABcRhIBqSp7kiPekGBIeVh", + "actionId": 36, + "broadcastId": 9 + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T19:18:25.000Z", + "sentAt": "2020-03-26T19:18:25.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_5.json b/go/webhook/testcases/testdata/testcases/customerio/test_5.json new file mode 100644 index 0000000000..c8a0aa084e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_5.json @@ -0,0 +1,71 @@ +{ + "name": "customerio", + "description": "test-5", + "input": { + "request": { + "body": { + "data": { + "content_id": 1146, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=", + "failure_message": "550 5.5.0 Requested action not taken: mailbox unavailable", + "newsletter_id": 736, + "recipient": "test@example.com", + "subject": "Thanks for joining!" + }, + "event_id": "12ASDG7S9P6MAZPTJ78DAND9GDC", + "object_type": "email", + "metric": "bounced", + "timestamp": 1234567890 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Email Bounced", + "properties": { + "eventId": "12ASDG7S9P6MAZPTJ78DAND9GDC", + "deliveryId": "RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=", + "contentId": 1146, + "emailSubject": "Thanks for joining!", + "reason": "550 5.5.0 Requested action not taken: mailbox unavailable", + "newsletterId": 736 + }, + "userId": "0200102", + "originalTimestamp": "2009-02-13T23:31:30.000Z", + "sentAt": "2009-02-13T23:31:30.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_6.json b/go/webhook/testcases/testdata/testcases/customerio/test_6.json new file mode 100644 index 0000000000..0d8ab9190b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_6.json @@ -0,0 +1,75 @@ +{ + "name": "customerio", + "description": "test-6", + "input": { + "request": { + "body": { + "data": { + "action_id": 36, + "broadcast_id": 9, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RPILAgABcRhIBqSp7kiPekGBIeVh", + "href": "http://google.com", + "link_id": 1, + "recipient": "test@example.com", + "subject": "hello" + }, + "event_id": "01E4C8BES5XT87ZWRJFTB35YJ3", + "object_type": "email", + "metric": "clicked", + "timestamp": 1585254348 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Email Link Clicked", + "properties": { + "eventId": "01E4C8BES5XT87ZWRJFTB35YJ3", + "deliveryId": "RPILAgABcRhIBqSp7kiPekGBIeVh", + "actionId": 36, + "broadcastId": 9, + "emailSubject": "hello", + "link": { + "url": "http://google.com", + "id": 1 + } + }, + "userId": "0200102", + "originalTimestamp": "2020-03-26T20:25:48.000Z", + "sentAt": "2020-03-26T20:25:48.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_7.json b/go/webhook/testcases/testdata/testcases/customerio/test_7.json new file mode 100644 index 0000000000..870810f187 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_7.json @@ -0,0 +1,74 @@ +{ + "name": "customerio", + "description": "test-7", + "input": { + "request": { + "body": { + "data": { + "action_id": 42, + "campaign_id": 23, + "content": "Welcome to the club, we are with you.", + "customer_id": "user-123", + "delivery_id": "RAECAAFwnUSneIa0ZXkmq8EdkAM==", + "headers": { + "Custom-Header": ["custom-value"] + }, + "identifiers": { + "id": "user-123" + }, + "recipient": "test@example.com", + "subject": "Thanks for signing up" + }, + "event_id": "01E2EMRMM6TZ12TF9WGZN0WJQT", + "metric": "sent", + "object_type": "email", + "timestamp": 1644227937 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Email Sent", + "properties": { + "eventId": "01E2EMRMM6TZ12TF9WGZN0WJQT", + "deliveryId": "RAECAAFwnUSneIa0ZXkmq8EdkAM==", + "actionId": 42, + "content": "Welcome to the club, we are with you.", + "emailSubject": "Thanks for signing up", + "campaignId": 23 + }, + "userId": "user-123", + "originalTimestamp": "2022-02-07T09:58:57.000Z", + "sentAt": "2022-02-07T09:58:57.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_8.json b/go/webhook/testcases/testdata/testcases/customerio/test_8.json new file mode 100644 index 0000000000..bad7038c6d --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_8.json @@ -0,0 +1,69 @@ +{ + "name": "customerio", + "description": "test-8", + "input": { + "request": { + "body": { + "data": { + "customer_id": "user-123", + "delivery_id": "REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==", + "identifiers": { + "cio_id": "7ef807109981", + "id": "user-123" + }, + "recipient": "test@example.com", + "subject": "Thanks for signing up", + "transactional_message_id": 2 + }, + "event_id": "01ER4R5WB62QWCNREKFB4DYXGR", + "metric": "delivered", + "object_type": "email", + "timestamp": 1675196819 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + }, + "traits": { + "cioId": "7ef807109981", + "email": "test@example.com" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Email Delivered", + "properties": { + "eventId": "01ER4R5WB62QWCNREKFB4DYXGR", + "deliveryId": "REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==", + "emailSubject": "Thanks for signing up", + "transactionalMessageId": 2 + }, + "userId": "user-123", + "originalTimestamp": "2023-01-31T20:26:59.000Z", + "sentAt": "2023-01-31T20:26:59.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/customerio/test_9.json b/go/webhook/testcases/testdata/testcases/customerio/test_9.json new file mode 100644 index 0000000000..0685f3fd3e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/customerio/test_9.json @@ -0,0 +1,65 @@ +{ + "name": "customerio", + "description": "test-9", + "input": { + "request": { + "body": { + "data": { + "action_id": 38, + "campaign_id": 6, + "customer_id": "0200102", + "identifiers": { + "id": "0200102" + }, + "delivery_id": "RAEABQFxN56fWzydfV4_EGvfobI=", + "failure_message": "NoDevicesSynced" + }, + "event_id": "01E4VSX8SZ0T9AQMH4Q16NRB89", + "object_type": "push", + "metric": "attempted", + "timestamp": 1585776075 + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Customer.io" + } + }, + "integrations": { + "Customer.io": false + }, + "type": "track", + "event": "Push Attempted", + "properties": { + "eventId": "01E4VSX8SZ0T9AQMH4Q16NRB89", + "deliveryId": "RAEABQFxN56fWzydfV4_EGvfobI=", + "actionId": 38, + "reason": "NoDevicesSynced", + "campaignId": 6 + }, + "userId": "0200102", + "originalTimestamp": "2020-04-01T21:21:15.000Z", + "sentAt": "2020-04-01T21:21:15.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_false.json b/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_false.json new file mode 100644 index 0000000000..77a14c0b74 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_false.json @@ -0,0 +1,66 @@ +{ + "name": "formsort", + "description": "when we receive finalized as false", + "input": { + "request": { + "body": { + "answers": { + "yes": true, + "enter_email": "test@user.com", + "enter_name": "2022-11-17", + "yes_or_no": false + }, + "responder_uuid": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", + "flow_label": "new-flow-2022-11-25", + "variant_label": "main", + "variant_uuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea", + "finalized": false, + "created_at": "2022-11-25T14:41:22+00:00" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Formsort" + }, + "page": { + "title": "new-flow-2022-11-25" + }, + "variantLabel": "main", + "variantUuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea" + }, + "integrations": { + "Formsort": false + }, + "type": "track", + "userId": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", + "originalTimestamp": "2022-11-25T14:41:22+00:00", + "properties": { + "yes": true, + "enter_email": "test@user.com", + "enter_name": "2022-11-17", + "yes_or_no": false + }, + "event": "FlowLoaded", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_true.json b/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_true.json new file mode 100644 index 0000000000..63fe193698 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/formsort/when_we_receive_finalized_as_true.json @@ -0,0 +1,66 @@ +{ + "name": "formsort", + "description": "when we receive finalized as true", + "input": { + "request": { + "body": { + "answers": { + "yes": true, + "enter_email": "test@user.com", + "enter_name": "2022-11-17", + "yes_or_no": false + }, + "responder_uuid": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", + "flow_label": "new-flow-2022-11-25", + "variant_label": "main", + "variant_uuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea", + "finalized": true, + "created_at": "2022-11-25T14:41:22+00:00" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Formsort" + }, + "page": { + "title": "new-flow-2022-11-25" + }, + "variantLabel": "main", + "variantUuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea" + }, + "integrations": { + "Formsort": false + }, + "type": "track", + "userId": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", + "originalTimestamp": "2022-11-25T14:41:22+00:00", + "properties": { + "yes": true, + "enter_email": "test@user.com", + "enter_name": "2022-11-17", + "yes_or_no": false + }, + "event": "FlowFinalized", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/custom_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/custom_track_call_.json new file mode 100644 index 0000000000..049e995900 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/custom_track_call_.json @@ -0,0 +1,182 @@ +{ + "name": "gainsightpx", + "description": "Custom Track Call ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "CUSTOM", + "eventId": "df58cbd6-2736-4f8a-ad26-6049eac2e150", + "propertyKey": "AP-EOXPSEZGC5LA-2-1", + "date": 1665656881448, + "sessionId": "AP-EOXPSEZGC5LA-2-1665656622955-48127533", + "globalContext": {}, + "userType": "USER", + "eventName": "Product Clicked", + "attributes": { + "Audience Size": 5000, + "name": "TESTing TRACK CALL FIRST", + "Launched date": 1520532660000, + "Launched": true + }, + "url": "http://127.0.0.1:5501/GPXTEST2.html", + "referrer": "", + "remoteHost": "122.161.66.140" + }, + "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "ip": "122.161.66.140", + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-EOXPSEZGC5LA-2-1", + "Audience Size": 5000, + "name": "TESTing TRACK CALL FIRST", + "Launched date": 1520532660000, + "Launched": true, + "ip": "122.161.66.140", + "url": "http://127.0.0.1:5501/GPXTEST2.html" + }, + "userId": "New!", + "category": "CUSTOM", + "event": "Product Clicked", + "sentAt": "2022-10-13T10:28:01.448Z", + "originalTimestamp": "2022-10-13T10:28:01.448Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/engagement_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/engagement_track_call_.json new file mode 100644 index 0000000000..986c261281 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/engagement_track_call_.json @@ -0,0 +1,186 @@ +{ + "name": "gainsightpx", + "description": "Engagement Track Call ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "ENGAGEMENT", + "eventId": "6494e73a-976b-4ee5-b8a8-de9effff7e80", + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "date": 1605262539389, + "sessionId": "AP-N6SV00EVMR1E-2-1605262502068-24197555", + "globalContext": { + "role": "Admin" + }, + "userType": "EMPTY_USER_TYPE", + "contentType": "IN_APP_DIALOG", + "engagementId": "83c30d4e-88c3-4054-a0fa-33451a6ea7fc", + "engagementType": "Dialog", + "engagementName": "Release Announcement", + "interaction": "VIEWED", + "stepNumber": 1, + "activation": "Auto", + "executionId": "b633945f-d4a5-404a-ae39-5ced5b542240", + "executionDate": 1605262539389 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "engagementId": "83c30d4e-88c3-4054-a0fa-33451a6ea7fc", + "contentType": "IN_APP_DIALOG", + "engagementType": "Dialog", + "interaction": "VIEWED", + "globalContext": { + "role": "Admin" + }, + "engagement": { + "stepNumber": 1, + "activation": "Auto" + } + }, + "userId": "New!", + "category": "ENGAGEMENT", + "event": "Release Announcement", + "sentAt": "2020-11-13T10:15:39.389Z", + "originalTimestamp": "2020-11-13T10:15:39.389Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/feature_match_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/feature_match_track_call_.json new file mode 100644 index 0000000000..a0c5c0dac0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/feature_match_track_call_.json @@ -0,0 +1,172 @@ +{ + "name": "gainsightpx", + "description": "Feature Match Track Call ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "FEATURE_MATCH", + "eventId": "ae1e5538-1736-4088-86d1-e90a10ffe901-05951b40-944f-4052-9a4a-51c74683f658", + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "date": 1665582808376, + "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", + "globalContext": { + "role": "Admin" + }, + "userType": "USER", + "featureId": "05951b40-944f-4052-9a4a-51c74683f658", + "featureName": "Charts" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "globalContext": { + "role": "Admin" + }, + "featureId": "05951b40-944f-4052-9a4a-51c74683f658" + }, + "userId": "New!", + "category": "FEATURE_MATCH", + "event": "Charts", + "sentAt": "2022-10-12T13:53:28.376Z", + "originalTimestamp": "2022-10-12T13:53:28.376Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/feedback_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/feedback_track_call_.json new file mode 100644 index 0000000000..e79d0da018 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/feedback_track_call_.json @@ -0,0 +1,179 @@ +{ + "name": "gainsightpx", + "description": "Feedback Track Call ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "FEEDBACK", + "eventId": "d007bd76-decb-4a77-8456-d84fb15c6a83", + "propertyKey": "AP-E9VUBBLZ6BIS-2-1", + "date": 1665415753621, + "sessionId": "AP-E9VUBBLZ6BIS-2-1665415678379-45445457", + "globalContext": null, + "userType": "USER", + "subject": "feedback title", + "category": "Labels test", + "description": "feedback body", + "labels": ["492120f5-3573-11ec-bef0-42010a800545"], + "remoteHost": "122.161.66.140", + "source": "Knowledge Center Bot" + }, + "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ], + "ip": "122.161.66.140" + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-E9VUBBLZ6BIS-2-1", + "feedback": { + "labels": ["492120f5-3573-11ec-bef0-42010a800545"], + "description": "feedback body", + "subject": "feedback title", + "source": "Knowledge Center Bot" + }, + "ip": "122.161.66.140" + }, + "userId": "New!", + "category": "FEEDBACK", + "event": "Labels test", + "sentAt": "2022-10-10T15:29:13.621Z", + "originalTimestamp": "2022-10-10T15:29:13.621Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/identify_call.json b/go/webhook/testcases/testdata/testcases/gainsightpx/identify_call.json new file mode 100644 index 0000000000..661ec98ba4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/identify_call.json @@ -0,0 +1,160 @@ +{ + "name": "gainsightpx", + "description": "Identify Call", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "SIGN_UP", + "eventId": "1283c08b-f290-4bc4-9deb-75c7867d69ee", + "propertyKey": "AP-EOXPSEZGC5LA-2-1", + "date": 1665582808376, + "sessionId": "AP-EOXPSEZGC5LA-2-1665582441084-16821368", + "globalContext": {}, + "userType": "USER" + }, + "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "identify", + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "score": 0, + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "id": "New!", + "country": "India", + "account": { + "id": "IBM", + "name": "International Business Machine", + "numberOfEmployees": 0, + "numberOfUsers": 0 + } + }, + "userId": "New!", + "createdAt": "2022-10-12T13:53:11.753Z", + "originalTimestamp": "2022-10-12T13:53:11.753Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/no_match_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/no_match_track_call_.json new file mode 100644 index 0000000000..a86f4d886c --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/no_match_track_call_.json @@ -0,0 +1,50 @@ +{ + "name": "gainsightpx", + "description": "No Match Track Call ", + "input": { + "request": { + "body": { + "event": { + "eventType": "Unavailable", + "eventId": "ddb9ca94-beb1-449c-bdcd-b53190f8e784", + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "date": 1601303075964, + "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", + "globalContext": { + "role": "Admin" + }, + "userType": "USER", + "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845", + "segmentName": "Linux User" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Event type Unavailable not supported\n" + }, + "queue": [], + "errQueue": [ + { + "event": { + "eventType": "Unavailable", + "eventId": "ddb9ca94-beb1-449c-bdcd-b53190f8e784", + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "date": 1601303075964, + "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", + "globalContext": { + "role": "Admin" + }, + "userType": "USER", + "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845", + "segmentName": "Linux User" + } + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/segment_io_s2_s_track_call_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/segment_io_s2_s_track_call_.json new file mode 100644 index 0000000000..bc08b7ab52 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/segment_io_s2_s_track_call_.json @@ -0,0 +1,222 @@ +{ + "name": "gainsightpx", + "description": "SegmentIO S2S Track Call ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "SEGMENT_IO", + "eventId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", + "propertyKey": "AP-EOXPSEZGC5LA-2-1", + "date": 1666687235178, + "sessionId": "31a524fa-1490-48db-9600-adfb1fa95333", + "globalContext": {}, + "userType": "USER", + "segmentIOEvent": { + "pxPropertyKey": "AP-EOXPSEZGC5LA-2", + "type": "group", + "userId": "1001", + "anonymousId": "a4303a13-eb10-46d8-8935-d787daf1cfbd", + "context": { + "ip": "122.161.67.121", + "library": { + "name": "analytics.js", + "version": "next-1.45.0" + }, + "locale": "en-GB", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", + "page": { + "path": "/abc.html", + "title": "Engage Testing", + "url": "http://127.0.0.1:5501/abc.html" + } + }, + "messageId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", + "receivedAt": "2022-10-25T08:40:35.184Z", + "sentAt": "2022-10-25T08:40:34.809Z", + "timestamp": "2022-10-25T08:40:35.178Z", + "traits": { + "name": "International Business Machine" + }, + "version": 2, + "channel": "client", + "groupId": "IBM" + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-EOXPSEZGC5LA-2-1", + "pxPropertyKey": "AP-EOXPSEZGC5LA-2", + "type": "group", + "userId": "1001", + "anonymousId": "a4303a13-eb10-46d8-8935-d787daf1cfbd", + "context": { + "ip": "122.161.67.121", + "library": { + "name": "analytics.js", + "version": "next-1.45.0" + }, + "locale": "en-GB", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", + "page": { + "path": "/abc.html", + "title": "Engage Testing", + "url": "http://127.0.0.1:5501/abc.html" + } + }, + "messageId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", + "receivedAt": "2022-10-25T08:40:35.184Z", + "sentAt": "2022-10-25T08:40:34.809Z", + "timestamp": "2022-10-25T08:40:35.178Z", + "traits": { + "name": "International Business Machine" + }, + "version": 2, + "channel": "client", + "groupId": "IBM" + }, + "userId": "New!", + "category": "SEGMENT_IO", + "event": "SegmentIO Cloud Server", + "sentAt": "2022-10-25T08:40:35.178Z", + "originalTimestamp": "2022-10-25T08:40:35.178Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/segment_match_track_call_and_no_user_id_and_yes_anonymous_id_as_event_session_id.json b/go/webhook/testcases/testdata/testcases/gainsightpx/segment_match_track_call_and_no_user_id_and_yes_anonymous_id_as_event_session_id.json new file mode 100644 index 0000000000..ad2eb03584 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/segment_match_track_call_and_no_user_id_and_yes_anonymous_id_as_event_session_id.json @@ -0,0 +1,171 @@ +{ + "name": "gainsightpx", + "description": "Segment Match Track Call and no userId and yes anonymousId as event.sessionId", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "SEGMENT", + "eventId": "ddb9ca94-beb1-449c-bdcd-b53190f8e784", + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "date": 1665582808376, + "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", + "globalContext": { + "role": "Admin" + }, + "userType": "USER", + "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845", + "segmentName": "Linux User" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-8MF5LPSWUBFW-2-1", + "globalContext": { + "role": "Admin" + }, + "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845" + }, + "category": "SEGMENT", + "event": "Linux User", + "sentAt": "2022-10-12T13:53:28.376Z", + "originalTimestamp": "2022-10-12T13:53:28.376Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____multi_question_survey_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____multi_question_survey_.json new file mode 100644 index 0000000000..20612bd56f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____multi_question_survey_.json @@ -0,0 +1,208 @@ +{ + "name": "gainsightpx", + "description": "Survey Track Call -> Multi Question Survey ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "SURVEY", + "eventId": "c9883e3b-05d4-4f96-8b9c-e2ce10430493", + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "date": 1601303075964, + "sessionId": "AP-N6SV00EVMR1E-2-1605265939566-23853426", + "globalContext": { + "role": "Admin" + }, + "userType": "EMPTY_USER_TYPE", + "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", + "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", + "engagementName": "Quarterly Survey", + "surveyType": "Multi Question", + "interaction": "SINGLE_STEP_SURVEY_RESPONDED", + "score": 0, + "activation": "Auto", + "executionId": "1ad2d383-d1fa-425d-84f0-2a531e17a5d9", + "executionDate": 1605265939965, + "questionType": "Multi choice", + "questionId": "de9e6bf1-351c-46ec-907d-c985bd420c2b", + "questionHtml": "
Favorite travel destinations
", + "questionText": "Favorite travel destinations", + "answers": [ + { + "answerId": "563e2103-2906-4088-869f-bcccd185f288", + "answerHtml": "
Europe
", + "answerText": "Europe" + } + ] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "globalContext": { + "role": "Admin" + }, + "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", + "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", + "surveyType": "Multi Question", + "interaction": "SINGLE_STEP_SURVEY_RESPONDED", + "survey": { + "activation": "Auto", + "questionType": "Multi choice", + "score": 0, + "questionId": "de9e6bf1-351c-46ec-907d-c985bd420c2b", + "questionHtml": "
Favorite travel destinations
", + "questionText": "Favorite travel destinations", + "answers": [ + { + "answerId": "563e2103-2906-4088-869f-bcccd185f288", + "answerHtml": "
Europe
", + "answerText": "Europe" + } + ] + } + }, + "userId": "New!", + "category": "SURVEY", + "event": "Quarterly Survey", + "sentAt": "2020-09-28T14:24:35.964Z", + "originalTimestamp": "2020-09-28T14:24:35.964Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____nps_.json b/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____nps_.json new file mode 100644 index 0000000000..8482f26cdc --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/gainsightpx/survey_track_call____nps_.json @@ -0,0 +1,196 @@ +{ + "name": "gainsightpx", + "description": "Survey Track Call -> NPS ", + "input": { + "request": { + "body": { + "user": { + "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", + "identifyId": "New!", + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "lastSeenDate": 1665582808669, + "signUpDate": 1665582791753, + "firstVisitDate": 1665582791753, + "title": "Mr.", + "phone": "", + "score": 0, + "role": "", + "subscriptionId": "", + "accountId": "IBM", + "numberOfVisits": 1, + "location": { + "countryName": "India", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665582808376, + "lastModifiedDate": 1665582808717, + "customAttributes": null, + "globalUnsubscribe": false, + "sfdcContactId": "", + "lastVisitedUserAgentData": null, + "id": "New!", + "lastInferredLocation": null + }, + "account": { + "id": "IBM", + "name": "International Business Machine", + "trackedSubscriptionId": "", + "sfdcId": "", + "lastSeenDate": 1665582808669, + "dunsNumber": "", + "industry": "", + "numberOfEmployees": 0, + "sicCode": "", + "website": "", + "naicsCode": "", + "plan": "", + "location": { + "countryName": "", + "countryCode": "", + "stateName": "", + "stateCode": "", + "city": "", + "street": "", + "postalCode": "", + "continent": "", + "regionName": "", + "timeZone": "", + "coordinates": { + "latitude": 0, + "longitude": 0 + } + }, + "numberOfUsers": 0, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "createDate": 1665578567565, + "lastModifiedDate": 1665582808669, + "customAttributes": null, + "parentGroupId": "" + }, + "event": { + "eventType": "SURVEY", + "eventId": "c9883e3b-05d4-4f96-8b9c-e2ce10430493", + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "date": 1601303075964, + "sessionId": "AP-N6SV00EVMR1E-2-1605265939566-23853426", + "globalContext": { + "role": "Admin" + }, + "userType": "EMPTY_USER_TYPE", + "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", + "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", + "engagementName": "Quarterly Survey", + "surveyType": "Multi Question", + "interaction": "SINGLE_STEP_SURVEY_RESPONDED", + "score": 0, + "scoreType": null, + "stepNumber": null, + "userInput": "I like new features", + "activation": "Auto", + "executionId": "1ad2d383-d1fa-425d-84f0-2a531e17a5d9", + "executionDate": 1605265939965, + "questionType": "Open text question", + "questionHtml": "
\n
\n How was your experience?\n
\n
\n", + "questionText": "How was your experience?" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "GAINSIGHTPX" + }, + "traits": { + "type": "USER", + "gender": "EMPTY_GENDER", + "email": "userEmail@address.com", + "firstName": "test", + "lastName": "rudderlabs", + "title": "Mr.", + "globalUnsubscribe": false, + "accountId": "IBM", + "numberOfVisits": 1, + "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], + "score": 0, + "id": "New!", + "country": "India", + "account": { + "numberOfEmployees": 0, + "numberOfUsers": 0, + "id": "IBM", + "name": "International Business Machine" + } + }, + "externalId": [ + { + "type": "gainsightpxAptrinsicId", + "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" + } + ] + }, + "integrations": { + "GAINSIGHTPX": false + }, + "type": "track", + "properties": { + "propertyKey": "AP-N6SV00EVMR1E-2-1", + "globalContext": { + "role": "Admin" + }, + "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", + "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", + "surveyType": "Multi Question", + "interaction": "SINGLE_STEP_SURVEY_RESPONDED", + "survey": { + "activation": "Auto", + "userInput": "I like new features", + "questionType": "Open text question", + "score": 0, + "questionHtml": "
\n
\n How was your experience?\n
\n
\n", + "questionText": "How was your experience?" + } + }, + "userId": "New!", + "category": "SURVEY", + "event": "Quarterly Survey", + "sentAt": "2020-09-28T14:24:35.964Z", + "originalTimestamp": "2020-09-28T14:24:35.964Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_0.json b/go/webhook/testcases/testdata/testcases/iterable/test_0.json new file mode 100644 index 0000000000..5d0f8813ed --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_0.json @@ -0,0 +1,68 @@ +{ + "name": "iterable", + "description": "test-0", + "input": { + "request": { + "body": { + "email": "test@rudderstack.com", + "eventName": "emailSubscribe", + "dataFields": { + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm", + "email": "test@rudderstack.com", + "createdAt": "2022-04-19 03:33:50 +00:00", + "messageTypeIds": [], + "emailListIds": [1589748], + "channelIds": [] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test@rudderstack.com" + } + }, + "event": "emailSubscribe", + "integrations": { + "Iterable": false + }, + "properties": { + "channelIds": [], + "createdAt": "2022-04-19 03:33:50 +00:00", + "emailListIds": [1589748], + "messageTypeIds": [], + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm" + }, + "receivedAt": "2022-04-19T03:33:50.000Z", + "timestamp": "2022-04-19T03:33:50.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_1.json b/go/webhook/testcases/testdata/testcases/iterable/test_1.json new file mode 100644 index 0000000000..64ad1c7bd4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_1.json @@ -0,0 +1,46 @@ +{ + "name": "iterable", + "description": "test-1", + "input": { + "request": { + "body": { + "eventName": "emailSubscribe", + "dataFields": { + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm", + "email": "test@abcd.com", + "createdAt": "2022-04-19 03:33:50 +00:00", + "messageTypeIds": [], + "emailListIds": [1589748], + "channelIds": [] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Unknwon event type from Iterable\n" + }, + "queue": [], + "errQueue": [ + { + "eventName": "emailSubscribe", + "dataFields": { + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm", + "email": "test@abcd.com", + "createdAt": "2022-04-19 03:33:50 +00:00", + "messageTypeIds": [], + "emailListIds": [1589748], + "channelIds": [] + } + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_10.json b/go/webhook/testcases/testdata/testcases/iterable/test_10.json new file mode 100644 index 0000000000..fd5e4d68c8 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_10.json @@ -0,0 +1,68 @@ +{ + "name": "iterable", + "description": "test-10", + "input": { + "request": { + "body": { + "email": "test@rudderstack.com", + "eventName": "emailSubscribe", + "dataFields": { + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm", + "email": "test@abcd.com", + "createdAt": "2022-04-19 03:33:50 +00:00", + "messageTypeIds": [], + "emailListIds": [1589748], + "channelIds": [] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test@rudderstack.com" + } + }, + "event": "emailSubscribe", + "integrations": { + "Iterable": false + }, + "properties": { + "channelIds": [], + "createdAt": "2022-04-19 03:33:50 +00:00", + "emailListIds": [1589748], + "messageTypeIds": [], + "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", + "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", + "signupSource": "WebForm" + }, + "receivedAt": "2022-04-19T03:33:50.000Z", + "timestamp": "2022-04-19T03:33:50.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_11.json b/go/webhook/testcases/testdata/testcases/iterable/test_11.json new file mode 100644 index 0000000000..7406688269 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_11.json @@ -0,0 +1,92 @@ +{ + "name": "iterable", + "description": "test-11", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailUnSubscribe", + "dataFields": { + "campaignId": 1089024, + "messageId": "bf008db8ab194b65816398c05bf30f99", + "emailId": "c1089024:t1526112:docs@iterable.com", + "workflowName": "My test workflow", + "messageTypeIds": [], + "locale": null, + "templateId": 1526112, + "emailSubject": "Upcoming events!", + "labels": [], + "unsubSource": "EmailLink", + "createdAt": "2020-03-20 23:34:15 +00:00", + "templateName": "My test template", + "emailListIds": [], + "messageTypeId": 31082, + "experimentId": null, + "channelIds": [27447], + "campaignName": "My test campaign", + "workflowId": 76786, + "email": "docs@iterable.com", + "channelId": 27447 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailUnSubscribe", + "integrations": { + "Iterable": false + }, + "properties": { + "campaignId": 1089024, + "messageId": "bf008db8ab194b65816398c05bf30f99", + "emailId": "c1089024:t1526112:docs@iterable.com", + "workflowName": "My test workflow", + "messageTypeIds": [], + "locale": null, + "templateId": 1526112, + "emailSubject": "Upcoming events!", + "labels": [], + "unsubSource": "EmailLink", + "createdAt": "2020-03-20 23:34:15 +00:00", + "templateName": "My test template", + "emailListIds": [], + "messageTypeId": 31082, + "experimentId": null, + "channelIds": [27447], + "campaignName": "My test campaign", + "workflowId": 76786, + "channelId": 27447 + }, + "receivedAt": "2020-03-20T23:34:15.000Z", + "timestamp": "2020-03-20T23:34:15.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_12.json b/go/webhook/testcases/testdata/testcases/iterable/test_12.json new file mode 100644 index 0000000000..faf0aa1c2b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_12.json @@ -0,0 +1,99 @@ +{ + "name": "iterable", + "description": "test-12", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "userId": "1", + "eventName": "hostedUnsubscribeClick", + "dataFields": { + "country": "United States", + "city": "San Jose", + "campaignId": 1074721, + "ip": "192.168.0.1", + "userAgentDevice": "Mac", + "messageId": "ceb3d4d929fc406ca93b28a0ef1efff1", + "emailId": "c1074721:t1506266:docs@iterable.com", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36", + "workflowName": "My workflow", + "locale": null, + "templateId": 1506266, + "emailSubject": "My email subject", + "url": "https://iterable.com", + "labels": [], + "createdAt": "2020-03-21 00:24:08 +00:00", + "templateName": "My email template", + "messageTypeId": 13406, + "experimentId": null, + "region": "CA", + "campaignName": "My email campaign", + "workflowId": 60102, + "email": "docs@iterable.com", + "channelId": 12466 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "1", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "hostedUnsubscribeClick", + "integrations": { + "Iterable": false + }, + "properties": { + "country": "United States", + "city": "San Jose", + "campaignId": 1074721, + "ip": "192.168.0.1", + "userAgentDevice": "Mac", + "messageId": "ceb3d4d929fc406ca93b28a0ef1efff1", + "emailId": "c1074721:t1506266:docs@iterable.com", + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36", + "workflowName": "My workflow", + "locale": null, + "templateId": 1506266, + "emailSubject": "My email subject", + "url": "https://iterable.com", + "labels": [], + "createdAt": "2020-03-21 00:24:08 +00:00", + "templateName": "My email template", + "messageTypeId": 13406, + "experimentId": null, + "region": "CA", + "campaignName": "My email campaign", + "workflowId": 60102, + "channelId": 12466 + }, + "receivedAt": "2020-03-21T00:24:08.000Z", + "timestamp": "2020-03-21T00:24:08.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_13.json b/go/webhook/testcases/testdata/testcases/iterable/test_13.json new file mode 100644 index 0000000000..1ea97852e1 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_13.json @@ -0,0 +1,58 @@ +{ + "name": "iterable", + "description": "test-13", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "inAppClick", + "dataFields": { + "email": "docs@iterable.com", + "createdAt": "2018-03-27 00:44:40 +00:00", + "campaignId": 269450 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "inAppClick", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2018-03-27 00:44:40 +00:00", + "campaignId": 269450 + }, + "receivedAt": "2018-03-27T00:44:40.000Z", + "timestamp": "2018-03-27T00:44:40.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_14.json b/go/webhook/testcases/testdata/testcases/iterable/test_14.json new file mode 100644 index 0000000000..1cda4ea9e8 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_14.json @@ -0,0 +1,58 @@ +{ + "name": "iterable", + "description": "test-14", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "inAppOpen", + "dataFields": { + "email": "docs@iterable.com", + "createdAt": "2018-03-27 00:44:30 +00:00", + "campaignId": 269450 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "inAppOpen", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2018-03-27 00:44:30 +00:00", + "campaignId": 269450 + }, + "receivedAt": "2018-03-27T00:44:30.000Z", + "timestamp": "2018-03-27T00:44:30.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_15.json b/go/webhook/testcases/testdata/testcases/iterable/test_15.json new file mode 100644 index 0000000000..34ea6dcd74 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_15.json @@ -0,0 +1,96 @@ +{ + "name": "iterable", + "description": "test-15", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "inAppSend", + "dataFields": { + "messageContext": { + "saveToInbox": false, + "trigger": "immediate" + }, + "campaignId": 732678, + "contentId": 18997, + "messageId": "vA16d48VVi4LQ5hMuZuquKzL0BXTdQJJUMJRjKnL1", + "workflowName": null, + "emailId": "c732678:t1032729:docs@iterable.com", + "locale": null, + "templateId": 1032729, + "inAppBody": "", + "email": "docs@iterable.com", + "createdAt": "2016-12-10 01:00:38 +00:00", + "campaignId": 74768, + "templateId": 113554, + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "yourpath/subpath" + }, + "sound": "", + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "pushBounce", + "integrations": { + "Iterable": false + }, + "properties": { + "platformEndpoint": "", + "createdAt": "2016-12-10 01:00:38 +00:00", + "campaignId": 74768, + "templateId": 113554, + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "yourpath/subpath" + }, + "sound": "", + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + }, + "receivedAt": "2016-12-10T01:00:38.000Z", + "timestamp": "2016-12-10T01:00:38.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_18.json b/go/webhook/testcases/testdata/testcases/iterable/test_18.json new file mode 100644 index 0000000000..f407de768b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_18.json @@ -0,0 +1,94 @@ +{ + "name": "iterable", + "description": "test-18", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "pushOpen", + "dataFields": { + "appAlreadyRunning": false, + "email": "docs@iterable.com", + "createdAt": "2016-12-08 01:25:22 +00:00", + "campaignId": 74768, + "templateId": 113554, + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "shop_home" + }, + "sound": null, + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "pushOpen", + "integrations": { + "Iterable": false + }, + "properties": { + "appAlreadyRunning": false, + "createdAt": "2016-12-08 01:25:22 +00:00", + "campaignId": 74768, + "templateId": 113554, + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "shop_home" + }, + "sound": null, + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + }, + "receivedAt": "2016-12-08T01:25:22.000Z", + "timestamp": "2016-12-08T01:25:22.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_19.json b/go/webhook/testcases/testdata/testcases/iterable/test_19.json new file mode 100644 index 0000000000..f55268e5fc --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_19.json @@ -0,0 +1,98 @@ +{ + "name": "iterable", + "description": "test-19", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "pushSend", + "dataFields": { + "contentId": 6724, + "platformEndpoint": "", + "email": "docs@iterable.com", + "createdAt": "2016-12-08 00:53:11 +00:00", + "campaignId": 74758, + "templateId": 113541, + "messageId": "73f2d3f13cd04db0b56c6143b179adc5", + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 1744, + "messageTypeId": 1759, + "experimentId": null, + "payload": { + "a": "2" + }, + "sound": "", + "badge": "", + "contentAvailable": false, + "deeplink": null, + "locale": null + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "pushSend", + "integrations": { + "Iterable": false + }, + "properties": { + "contentId": 6724, + "platformEndpoint": "", + "createdAt": "2016-12-08 00:53:11 +00:00", + "campaignId": 74758, + "templateId": 113541, + "messageId": "73f2d3f13cd04db0b56c6143b179adc5", + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 1744, + "messageTypeId": 1759, + "experimentId": null, + "payload": { + "a": "2" + }, + "sound": "", + "badge": "", + "contentAvailable": false, + "deeplink": null, + "locale": null + }, + "receivedAt": "2016-12-08T00:53:11.000Z", + "timestamp": "2016-12-08T00:53:11.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_2.json b/go/webhook/testcases/testdata/testcases/iterable/test_2.json new file mode 100644 index 0000000000..55ab1f9abe --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_2.json @@ -0,0 +1,42 @@ +{ + "name": "iterable", + "description": "test-2", + "input": { + "request": { + "body": { + "email": "test@ruddstack.com", + "eventTitle": "smsReceived", + "dataFields": { + "fromPhoneNumber": "+16503926753", + "toPhoneNumber": "+14155824541", + "smsMessage": "Message text", + "email": "docs@iterable.com", + "createdAt": "2016-12-05 22:51:25 +00:00" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Unknwon event type from Iterable\n" + }, + "queue": [], + "errQueue": [ + { + "email": "test@ruddstack.com", + "eventTitle": "smsReceived", + "dataFields": { + "fromPhoneNumber": "+16503926753", + "toPhoneNumber": "+14155824541", + "smsMessage": "Message text", + "email": "docs@iterable.com", + "createdAt": "2016-12-05 22:51:25 +00:00" + } + } + ] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_20.json b/go/webhook/testcases/testdata/testcases/iterable/test_20.json new file mode 100644 index 0000000000..6b323852bc --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_20.json @@ -0,0 +1,62 @@ +{ + "name": "iterable", + "description": "test-20", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "pushSendSkip", + "dataFields": { + "createdAt": "2019-08-07 22:28:51 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 732667, + "messageId": "8306ae0c74324635b7554947c5ec0e56", + "email": "docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "pushSendSkip", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2019-08-07 22:28:51 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 732667, + "messageId": "8306ae0c74324635b7554947c5ec0e56" + }, + "receivedAt": "2019-08-07T22:28:51.000Z", + "timestamp": "2019-08-07T22:28:51.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_21.json b/go/webhook/testcases/testdata/testcases/iterable/test_21.json new file mode 100644 index 0000000000..8dee1d695a --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_21.json @@ -0,0 +1,98 @@ +{ + "name": "iterable", + "description": "test-21", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "pushUninstall", + "dataFields": { + "isGhostPush": false, + "platformEndpoint": "", + "email": "docs@iterable.com", + "createdAt": "2016-12-09 20:50:54 +00:00", + "campaignId": 74768, + "templateId": 113554, + "messageId": "73f2d3f13cd04db0b56c6143b179adc5", + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "your_folder/30" + }, + "sound": "", + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "pushUninstall", + "integrations": { + "Iterable": false + }, + "properties": { + "isGhostPush": false, + "platformEndpoint": "", + "createdAt": "2016-12-09 20:50:54 +00:00", + "campaignId": 74768, + "templateId": 113554, + "messageId": "73f2d3f13cd04db0b56c6143b179adc5", + "pushMessage": "Push message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2203, + "messageTypeId": 2439, + "experimentId": null, + "payload": { + "path": "your_folder/30" + }, + "sound": "", + "badge": null, + "contentAvailable": false, + "deeplink": null, + "locale": null + }, + "receivedAt": "2016-12-09T20:50:54.000Z", + "timestamp": "2016-12-09T20:50:54.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_22.json b/go/webhook/testcases/testdata/testcases/iterable/test_22.json new file mode 100644 index 0000000000..7e517aadcb --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_22.json @@ -0,0 +1,96 @@ +{ + "name": "iterable", + "description": "test-22", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "smsBounce", + "dataFields": { + "smsProviderResponse": { + "status": 404, + "message": "The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found", + "code": 20404, + "more_info": "https://www.twilio.com/docs/errors/20404" + }, + "email": "docs@iterable.com", + "createdAt": "2016-12-05 22:43:24 +00:00", + "campaignId": 74003, + "templateId": 112561, + "smsMessage": "Here is example message, please respond with 'received'", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 4270, + "messageTypeId": 4769, + "experimentId": null, + "fromPhoneNumberId": 268, + "imageUrl": null, + "locale": null, + "emailId": "c74003:t112561:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "smsBounce", + "integrations": { + "Iterable": false + }, + "properties": { + "smsProviderResponse": { + "status": 404, + "message": "The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found", + "code": 20404, + "more_info": "https://www.twilio.com/docs/errors/20404" + }, + "createdAt": "2016-12-05 22:43:24 +00:00", + "campaignId": 74003, + "templateId": 112561, + "smsMessage": "Here is example message, please respond with 'received'", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 4270, + "messageTypeId": 4769, + "experimentId": null, + "fromPhoneNumberId": 268, + "imageUrl": null, + "locale": null, + "emailId": "c74003:t112561:docs@iterable.com" + }, + "receivedAt": "2016-12-05T22:43:24.000Z", + "timestamp": "2016-12-05T22:43:24.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_23.json b/go/webhook/testcases/testdata/testcases/iterable/test_23.json new file mode 100644 index 0000000000..760c3cb3e0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_23.json @@ -0,0 +1,90 @@ +{ + "name": "iterable", + "description": "test-23", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "smsClick", + "dataFields": { + "campaignId": 1234567, + "campaignName": "My test campaign", + "workflowId": null, + "workflowName": null, + "templateName": "My template", + "locale": null, + "channelId": 98765, + "messageTypeId": 43210, + "experimentId": null, + "labels": [], + "smsMessage": "Test SMS! https://www.example.com", + "fromPhoneNumberId": 1234, + "imageUrl": null, + "clickedUrl": "https://www.example.com", + "email": "docs@iterable.com", + "createdAt": "2022-03-10 05:00:14 +00:00", + "templateId": 1112222, + "messageId": "ebd8f3cfc1f74353b423c5e0f3dd8b39", + "emailId": "c1234567:t9876543:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "smsClick", + "integrations": { + "Iterable": false + }, + "properties": { + "campaignId": 1234567, + "campaignName": "My test campaign", + "workflowId": null, + "workflowName": null, + "templateName": "My template", + "locale": null, + "channelId": 98765, + "messageTypeId": 43210, + "experimentId": null, + "labels": [], + "smsMessage": "Test SMS! https://www.example.com", + "fromPhoneNumberId": 1234, + "imageUrl": null, + "clickedUrl": "https://www.example.com", + "createdAt": "2022-03-10 05:00:14 +00:00", + "templateId": 1112222, + "messageId": "ebd8f3cfc1f74353b423c5e0f3dd8b39", + "emailId": "c1234567:t9876543:docs@iterable.com" + }, + "receivedAt": "2022-03-10T05:00:14.000Z", + "timestamp": "2022-03-10T05:00:14.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_24.json b/go/webhook/testcases/testdata/testcases/iterable/test_24.json new file mode 100644 index 0000000000..635ac0fd4f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_24.json @@ -0,0 +1,62 @@ +{ + "name": "iterable", + "description": "test-24", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "smsReceived", + "dataFields": { + "fromPhoneNumber": "+16503926753", + "toPhoneNumber": "+14155824541", + "smsMessage": "Message text", + "email": "docs@iterable.com", + "createdAt": "2016-12-05 22:51:25 +00:00" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "smsReceived", + "integrations": { + "Iterable": false + }, + "properties": { + "fromPhoneNumber": "+16503926753", + "toPhoneNumber": "+14155824541", + "smsMessage": "Message text", + "createdAt": "2016-12-05 22:51:25 +00:00" + }, + "receivedAt": "2016-12-05T22:51:25.000Z", + "timestamp": "2016-12-05T22:51:25.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_25.json b/go/webhook/testcases/testdata/testcases/iterable/test_25.json new file mode 100644 index 0000000000..ce7bec52e5 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_25.json @@ -0,0 +1,90 @@ +{ + "name": "iterable", + "description": "test-25", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "smsSend", + "dataFields": { + "toPhoneNumber": "+16503926753", + "fromSMSSenderId": 258, + "contentId": 2086, + "email": "docs@iterable.com", + "createdAt": "2016-12-05 21:50:32 +00:00", + "campaignId": 73974, + "templateId": 112523, + "smsMessage": "Message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 4270, + "messageTypeId": 4769, + "experimentId": null, + "fromPhoneNumberId": 258, + "imageUrl": null, + "locale": null, + "emailId": "c73974:t112523:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "smsSend", + "integrations": { + "Iterable": false + }, + "properties": { + "toPhoneNumber": "+16503926753", + "fromSMSSenderId": 258, + "contentId": 2086, + "createdAt": "2016-12-05 21:50:32 +00:00", + "campaignId": 73974, + "templateId": 112523, + "smsMessage": "Message text", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 4270, + "messageTypeId": 4769, + "experimentId": null, + "fromPhoneNumberId": 258, + "imageUrl": null, + "locale": null, + "emailId": "c73974:t112523:docs@iterable.com" + }, + "receivedAt": "2016-12-05T21:50:32.000Z", + "timestamp": "2016-12-05T21:50:32.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_26.json b/go/webhook/testcases/testdata/testcases/iterable/test_26.json new file mode 100644 index 0000000000..0089d3ecf2 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_26.json @@ -0,0 +1,62 @@ +{ + "name": "iterable", + "description": "test-26", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "smsSendSkip", + "dataFields": { + "createdAt": "2019-08-07 18:49:48 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 729390, + "messageId": "2c780bf42f26485db0fc6571d2e0f6a0", + "email": "docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "smsSendSkip", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2019-08-07 18:49:48 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 729390, + "messageId": "2c780bf42f26485db0fc6571d2e0f6a0" + }, + "receivedAt": "2019-08-07T18:49:48.000Z", + "timestamp": "2019-08-07T18:49:48.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_27.json b/go/webhook/testcases/testdata/testcases/iterable/test_27.json new file mode 100644 index 0000000000..1b9b8b8d7f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_27.json @@ -0,0 +1,88 @@ +{ + "name": "iterable", + "description": "test-27", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailSend", + "dataFields": { + "contentId": 274222, + "email": "docs@iterable.com", + "createdAt": "2016-12-02 18:51:40 +00:00", + "campaignId": 49313, + "transactionalData": { + "__comment": "transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total." + }, + "templateId": 79190, + "messageId": "210badf49fe54f2591d64ad0d055f4fb", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailSend", + "integrations": { + "Iterable": false + }, + "properties": { + "contentId": 274222, + "createdAt": "2016-12-02 18:51:40 +00:00", + "campaignId": 49313, + "transactionalData": { + "__comment": "transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total." + }, + "templateId": 79190, + "messageId": "210badf49fe54f2591d64ad0d055f4fb", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + }, + "receivedAt": "2016-12-02T18:51:40.000Z", + "timestamp": "2016-12-02T18:51:40.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_28.json b/go/webhook/testcases/testdata/testcases/iterable/test_28.json new file mode 100644 index 0000000000..b66f76aec3 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_28.json @@ -0,0 +1,94 @@ +{ + "name": "iterable", + "description": "test-28", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "webPushSend", + "dataFields": { + "campaignId": 723636, + "browserToken": "cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b", + "contentId": 3681, + "messageId": "af4c726ae76b48c7871b6d0d7760d47c", + "workflowName": "My workflow name", + "emailId": "c723636:t1020396:docs@iterable.com", + "locale": null, + "webPushIcon": null, + "templateId": 1020396, + "labels": [], + "createdAt": "2019-08-07 23:43:02 +00:00", + "templateName": "My template name", + "webPushMessage": "", + "messageTypeId": 9106, + "webPushBody": null, + "experimentId": null, + "webPushClickAction": null, + "campaignName": "My campaign name", + "workflowId": 53505, + "channelId": 8539, + "email": "docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "webPushSend", + "integrations": { + "Iterable": false + }, + "properties": { + "campaignId": 723636, + "browserToken": "cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b", + "contentId": 3681, + "messageId": "af4c726ae76b48c7871b6d0d7760d47c", + "workflowName": "My workflow name", + "emailId": "c723636:t1020396:docs@iterable.com", + "locale": null, + "webPushIcon": null, + "templateId": 1020396, + "labels": [], + "createdAt": "2019-08-07 23:43:02 +00:00", + "templateName": "My template name", + "webPushMessage": "", + "messageTypeId": 9106, + "webPushBody": null, + "experimentId": null, + "webPushClickAction": null, + "campaignName": "My campaign name", + "workflowId": 53505, + "channelId": 8539 + }, + "receivedAt": "2019-08-07T23:43:02.000Z", + "timestamp": "2019-08-07T23:43:02.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_29.json b/go/webhook/testcases/testdata/testcases/iterable/test_29.json new file mode 100644 index 0000000000..e8f0b2498d --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_29.json @@ -0,0 +1,62 @@ +{ + "name": "iterable", + "description": "test-29", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "webPushSendSkip", + "dataFields": { + "createdAt": "2019-08-07 23:43:48 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 723636, + "messageId": "4238c918b20a41dfbe9a910275b76f12", + "email": "docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "webPushSendSkip", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2019-08-07 23:43:48 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 723636, + "messageId": "4238c918b20a41dfbe9a910275b76f12" + }, + "receivedAt": "2019-08-07T23:43:48.000Z", + "timestamp": "2019-08-07T23:43:48.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_3.json b/go/webhook/testcases/testdata/testcases/iterable/test_3.json new file mode 100644 index 0000000000..b575206541 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_3.json @@ -0,0 +1,48 @@ +{ + "name": "iterable", + "description": "test-3", + "input": { + "request": { + "body": { + "email": "test@rudderstack.com", + "eventName": "inAppSendSkip" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test@rudderstack.com" + } + }, + "event": "inAppSendSkip", + "integrations": { + "Iterable": false + }, + "type": "track", + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_4.json b/go/webhook/testcases/testdata/testcases/iterable/test_4.json new file mode 100644 index 0000000000..bf99d104d0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_4.json @@ -0,0 +1,82 @@ +{ + "name": "iterable", + "description": "test-4", + "input": { + "request": { + "body": { + "email": "test@rudderstack.com", + "eventName": "emailSend", + "dataFields": { + "contentId": 331201, + "email": "test@rudderstack.com", + "createdAt": "2016-12-02 20:21:04 +00:00", + "campaignId": 59667, + "templateId": 93849, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c59667:t93849:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test@rudderstack.com" + } + }, + "event": "emailSend", + "integrations": { + "Iterable": false + }, + "properties": { + "contentId": 331201, + "createdAt": "2016-12-02 20:21:04 +00:00", + "campaignId": 59667, + "templateId": 93849, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c59667:t93849:docs@iterable.com" + }, + "receivedAt": "2016-12-02T20:21:04.000Z", + "timestamp": "2016-12-02T20:21:04.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_5.json b/go/webhook/testcases/testdata/testcases/iterable/test_5.json new file mode 100644 index 0000000000..71396c46be --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_5.json @@ -0,0 +1,82 @@ +{ + "name": "iterable", + "description": "test-5", + "input": { + "request": { + "body": { + "email": "invalid_email@iterable.com", + "eventName": "emailBounce", + "dataFields": { + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2598, + "messageTypeId": 2870, + "experimentId": null, + "recipientState": "HardBounce", + "templateId": 167484, + "email": "invalid_email@iterable.com", + "createdAt": "2017-05-15 23:59:47 +00:00", + "campaignId": 114746, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailId": "c114746:t167484:invalid_email@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "b053765f5d0d23b0d5e4dd960be9513f", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "invalid_email@iterable.com" + } + }, + "event": "emailBounce", + "integrations": { + "Iterable": false + }, + "properties": { + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 2598, + "messageTypeId": 2870, + "experimentId": null, + "recipientState": "HardBounce", + "templateId": 167484, + "createdAt": "2017-05-15 23:59:47 +00:00", + "campaignId": 114746, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailId": "c114746:t167484:invalid_email@iterable.com" + }, + "receivedAt": "2017-05-15T23:59:47.000Z", + "timestamp": "2017-05-15T23:59:47.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_6.json b/go/webhook/testcases/testdata/testcases/iterable/test_6.json new file mode 100644 index 0000000000..a676b2c342 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_6.json @@ -0,0 +1,98 @@ +{ + "name": "iterable", + "description": "test-6", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailClick", + "dataFields": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36", + "ip": "162.245.22.184", + "templateId": 93849, + "userAgentDevice": "Mac", + "url": "https://www.iterable.com", + "canonicalUrlId": "3145668988", + "city": "San Francisco", + "region": "CA", + "email": "docs@iterable.com", + "createdAt": "2016-12-02 20:31:39 +00:00", + "campaignId": 59667, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "linkUrl": "https://www.iterable.com", + "linkId": "3145668988", + "emailId": "c59667:t93849:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailClick", + "integrations": { + "Iterable": false + }, + "properties": { + "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36", + "ip": "162.245.22.184", + "templateId": 93849, + "userAgentDevice": "Mac", + "url": "https://www.iterable.com", + "canonicalUrlId": "3145668988", + "city": "San Francisco", + "region": "CA", + "createdAt": "2016-12-02 20:31:39 +00:00", + "campaignId": 59667, + "messageId": "d0aa7801f91f4824997a631f3ed583c3", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "linkUrl": "https://www.iterable.com", + "linkId": "3145668988", + "emailId": "c59667:t93849:docs@iterable.com" + }, + "receivedAt": "2016-12-02T20:31:39.000Z", + "timestamp": "2016-12-02T20:31:39.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_7.json b/go/webhook/testcases/testdata/testcases/iterable/test_7.json new file mode 100644 index 0000000000..b07112dcee --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_7.json @@ -0,0 +1,82 @@ +{ + "name": "iterable", + "description": "test-7", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailComplaint", + "dataFields": { + "recipientState": "Complaint", + "templateId": 79190, + "email": "docs@iterable.com", + "createdAt": "2016-12-09 18:52:19 +00:00", + "campaignId": 49313, + "messageId": "d3c44d47b4994306b4db8d16a94db025", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "test template", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailComplaint", + "integrations": { + "Iterable": false + }, + "properties": { + "recipientState": "Complaint", + "templateId": 79190, + "createdAt": "2016-12-09 18:52:19 +00:00", + "campaignId": 49313, + "messageId": "d3c44d47b4994306b4db8d16a94db025", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "test template", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + }, + "receivedAt": "2016-12-09T18:52:19.000Z", + "timestamp": "2016-12-09T18:52:19.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_8.json b/go/webhook/testcases/testdata/testcases/iterable/test_8.json new file mode 100644 index 0000000000..11f700b740 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_8.json @@ -0,0 +1,88 @@ +{ + "name": "iterable", + "description": "test-8", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailOpen", + "dataFields": { + "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", + "proxySource": "Gmail", + "ip": "66.249.84.204", + "templateId": 79190, + "device": "Gmail", + "email": "docs@iterable.com", + "createdAt": "2016-12-02 18:51:45 +00:00", + "campaignId": 49313, + "messageId": "210badf49fe54f2591d64ad0d055f4fb", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailOpen", + "integrations": { + "Iterable": false + }, + "properties": { + "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", + "proxySource": "Gmail", + "ip": "66.249.84.204", + "templateId": 79190, + "device": "Gmail", + "createdAt": "2016-12-02 18:51:45 +00:00", + "campaignId": 49313, + "messageId": "210badf49fe54f2591d64ad0d055f4fb", + "emailSubject": "My subject", + "campaignName": "My campaign name", + "workflowId": null, + "workflowName": null, + "templateName": "My template name", + "channelId": 3420, + "messageTypeId": 3866, + "experimentId": null, + "emailId": "c49313:t79190:docs@iterable.com" + }, + "receivedAt": "2016-12-02T18:51:45.000Z", + "timestamp": "2016-12-02T18:51:45.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/iterable/test_9.json b/go/webhook/testcases/testdata/testcases/iterable/test_9.json new file mode 100644 index 0000000000..5a9331cbe7 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/iterable/test_9.json @@ -0,0 +1,62 @@ +{ + "name": "iterable", + "description": "test-9", + "input": { + "request": { + "body": { + "email": "docs@iterable.com", + "eventName": "emailSendSkip", + "dataFields": { + "createdAt": "2019-08-07 18:56:10 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 721398, + "messageId": "98430abe1b9842c991ce221010121553", + "email": "docs@iterable.com" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "0e13848b1c7e27eb5d88c5d35b70783e", + "context": { + "integration": { + "name": "Iterable", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "docs@iterable.com" + } + }, + "event": "emailSendSkip", + "integrations": { + "Iterable": false + }, + "properties": { + "createdAt": "2019-08-07 18:56:10 +00:00", + "reason": "DuplicateMarketingMessage", + "campaignId": 721398, + "messageId": "98430abe1b9842c991ce221010121553" + }, + "receivedAt": "2019-08-07T18:56:10.000Z", + "timestamp": "2019-08-07T18:56:10.000Z", + "type": "track", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event.json new file mode 100644 index 0000000000..81c569e82b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event.json @@ -0,0 +1,68 @@ +{ + "name": "mailjet", + "description": "MailJet email bounce event", + "input": { + "request": { + "body": { + "event": "bounce", + "time": 1664444170, + "MessageID": 56013522696710744, + "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", + "email": "test@rudderstack.com", + "mj_campaign_id": 108892, + "mj_contact_id": 373142182, + "customcampaign": "mj.nl=58486", + "blocked": false, + "hard_bounce": false, + "error_related_to": "system", + "error": "connection issue" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "test@rudderstack.com" + }, + "externalId": [ + { + "type": "mailjetContactId", + "id": 373142182 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "bounce", + "properties": { + "customcampaign": "mj.nl=58486", + "mj_campaign_id": 108892 + }, + "originalTimestamp": "2022-09-29T09:36:10.000Z", + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event_where_input_event_is_of_type_.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event_where_input_event_is_of_type_.json new file mode 100644 index 0000000000..95e9781a8b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_bounce_event_where_input_event_is_of_type_.json @@ -0,0 +1,68 @@ +{ + "name": "mailjet", + "description": "MailJet email bounce event where input event is of type ", + "input": { + "request": { + "body": { + "event": "bounce", + "time": 1664444171, + "MessageID": 55169098999352350, + "Message_GUID": "447d7eab-3335-4aba-9a51-09454bc14b81", + "email": "test@rudderstack.com", + "mj_campaign_id": 108892, + "mj_contact_id": 373142816, + "customcampaign": "mj.nl=58486", + "blocked": false, + "hard_bounce": false, + "error_related_to": "system", + "error": "connection issue" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "test@rudderstack.com" + }, + "externalId": [ + { + "type": "mailjetContactId", + "id": 373142816 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "bounce", + "properties": { + "customcampaign": "mj.nl=58486", + "mj_campaign_id": 108892 + }, + "originalTimestamp": "2022-09-29T09:36:11.000Z", + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_open_event.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_open_event.json new file mode 100644 index 0000000000..41a6e76edc --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_open_event.json @@ -0,0 +1,73 @@ +{ + "name": "mailjet", + "description": "MailJet email open event", + "input": { + "request": { + "body": { + "event": "open", + "time": 1664443614, + "MessageID": 94857068804950690, + "Message_GUID": "54d6cdec-f659-4547-8926-13d9c4126b82", + "email": "test@rudderstack.com", + "mj_campaign_id": 108760, + "mj_contact_id": 399962859, + "customcampaign": "mj.nl=58424", + "ip": "66.249.84.231", + "geo": "US", + "agent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", + "CustomID": "", + "Payload": "" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "test@rudderstack.com" + }, + "ip": "66.249.84.231", + "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", + "externalId": [ + { + "type": "mailjetContactId", + "id": 399962859 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "open", + "properties": { + "ip": "66.249.84.231", + "customcampaign": "mj.nl=58424", + "mj_campaign_id": 108760, + "Payload": "" + }, + "originalTimestamp": "2022-09-29T09:26:54.000Z", + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_sent_event.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_sent_event.json new file mode 100644 index 0000000000..af2fc8dea1 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_email_sent_event.json @@ -0,0 +1,65 @@ +{ + "name": "mailjet", + "description": "MailJet email sent event", + "input": { + "request": { + "body": { + "event": "sent", + "time": 1664444171, + "MessageID": 92886743924596480, + "Message_GUID": "0230c73a-2b77-4aea-8ef2-ed15d0edc5fd", + "email": "test@rudderstack.com", + "mj_campaign_id": 108892, + "mj_contact_id": 372651182, + "customcampaign": "mj.nl=58486", + "smtp_reply": "250 2.0.0 OK DMARC:Quarantine 1664444171 u17-20020adfdd51000000b0022cc3f2bf13si3225188wrm.271 - gsmtp" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "test@rudderstack.com" + }, + "externalId": [ + { + "type": "mailjetContactId", + "id": 372651182 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "sent", + "properties": { + "customcampaign": "mj.nl=58486", + "mj_campaign_id": 108892 + }, + "originalTimestamp": "2022-09-29T09:36:11.000Z", + "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_multiple_payloads_in_single_request.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_multiple_payloads_in_single_request.json new file mode 100644 index 0000000000..f7b8993e32 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_multiple_payloads_in_single_request.json @@ -0,0 +1,132 @@ +{ + "name": "mailjet", + "description": "MailJet Multiple payloads in single request", + "input": { + "request": { + "body": [ + { + "event": "open", + "time": 1704458040, + "MessageID": 987654, + "Message_GUID": "876r-oihugyf-7tfygh", + "email": "abc@r.com", + "mj_campaign_id": 321, + "mj_contact_id": 123, + "customcampaign": "test_campaign", + "url": "https://www.example.com/", + "ip": "ip_info", + "geo": "some geo info", + "agent": "mailjet api test" + }, + { + "event": "click", + "time": 1704458041, + "MessageID": 12345234567, + "Message_GUID": "12345-kjhgfd-2efv", + "email": "abc@r.com", + "mj_campaign_id": 12, + "mj_contact_id": 32532, + "customcampaign": "test_campaign", + "url": "https://www.example.com/", + "ip": "ip_info", + "geo": "some geo info", + "agent": "mailjet api test" + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "ip": "ip_info", + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "abc@r.com" + }, + "page": { + "url": "https://www.example.com/" + }, + "userAgent": "mailjet api test", + "externalId": [ + { + "type": "mailjetContactId", + "id": 123 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "open", + "properties": { + "customcampaign": "test_campaign", + "mj_campaign_id": 321, + "ip": "ip_info", + "url": "https://www.example.com/" + }, + "userId": "593a5aff0b445b3b77a6d9676b7ec86e", + "originalTimestamp": "2024-01-05T12:34:00.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "page": { + "url": "https://www.example.com/" + }, + "integration": { + "name": "MailJet" + }, + "traits": { + "email": "abc@r.com" + }, + "userAgent": "mailjet api test", + "ip": "ip_info", + "externalId": [ + { + "type": "mailjetContactId", + "id": 32532 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "click", + "properties": { + "customcampaign": "test_campaign", + "mj_campaign_id": 12, + "ip": "ip_info", + "url": "https://www.example.com/" + }, + "userId": "593a5aff0b445b3b77a6d9676b7ec86e", + "originalTimestamp": "2024-01-05T12:34:01.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json new file mode 100644 index 0000000000..301cf0a780 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json @@ -0,0 +1,63 @@ +{ + "name": "mailjet", + "description": "MailJet when no email is present", + "input": { + "request": { + "body": { + "event": "bounce", + "time": 1664444170, + "MessageID": 56013522696710744, + "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", + "mj_campaign_id": 108892, + "mj_contact_id": 373142182, + "customcampaign": "mj.nl=58486", + "blocked": false, + "hard_bounce": false, + "error_related_to": "system", + "error": "connection issue" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "MailJet" + }, + "externalId": [ + { + "type": "mailjetContactId", + "id": 373142182 + } + ] + }, + "integrations": { + "MailJet": false + }, + "type": "track", + "event": "bounce", + "properties": { + "customcampaign": "mj.nl=58486", + "mj_campaign_id": 108892 + }, + "originalTimestamp": "2022-09-29T09:36:10.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_0.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_0.json new file mode 100644 index 0000000000..cfc80d1a59 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_0.json @@ -0,0 +1,66 @@ +{ + "name": "mailmodo", + "description": "test-0", + "input": { + "request": { + "body": { + "triggerData": { + "data": {}, + "triggerSource": "CsvList", + "email": "gouhgc@mailmodo.com", + "triggerDetails": "file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e", + "userId": "d3775892hvh4f2f-b9d5-e49810eb2cae", + "journeyId": "1a69df39hgvh4e0b-8b5c-73776157aa37", + "eventProperty": {} + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "f43848cce166e51b097cbed2851adc16ed9d4c341928f1c790215c50cefb59b0", + "context": { + "externalId": [ + { + "id": "d3775892hvh4f2f-b9d5-e49810eb2cae", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gouhgc@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "CsvList", + "integrations": { + "Mailmodo": false + }, + "properties": { + "triggerData.triggerSource": "CsvList", + "triggerData.triggerDetails": "file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e", + "triggerData.journeyId": "1a69df39hgvh4e0b-8b5c-73776157aa37" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_1.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_1.json new file mode 100644 index 0000000000..969f657e54 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_1.json @@ -0,0 +1,87 @@ +{ + "name": "mailmodo", + "description": "test-1", + "input": { + "request": { + "body": { + "fuuid": "27905", + "next-step-id": "success", + "total-steps": "3", + "responseId": "b9a5d224-cc5a-4e64-9800-5a3db9515fdf", + "recipientEmail": "test.rudderlabs21997@gmail.com", + "formId": "formosztd5", + "recordedAt": { + "ts": 1662695704, + "date": "2022-09-09", + "hour": 9, + "minute": 25 + }, + "submissionSource": "amp", + "elementjbtz42": "Everything ", + "element8jzo13": ["Reliable", "High Quality", "Useful"], + "recipientData": { + "email": "test.rudderlabs21997@gmail.com" + }, + "recommend": "9", + "liking": "upvote", + "satisfaction": "4", + "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", + "campaignName": "Campaign-testing" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "a80b34ec43ca959c7b8e5116ac626c3cf8561f62616e000a01729a8a900cc0a0", + "context": { + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test.rudderlabs21997@gmail.com" + } + }, + "event": "Form Submitted", + "integrations": { + "Mailmodo": false + }, + "originalTimestamp": "2022-09-09T03:55:04.000Z", + "properties": { + "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", + "campaignName": "Campaign-testing", + "element8jzo13[0]": "Reliable", + "element8jzo13[1]": "High Quality", + "element8jzo13[2]": "Useful", + "elementjbtz42": "Everything ", + "formId": "formosztd5", + "fuuid": "27905", + "liking": "upvote", + "next-step-id": "success", + "recommend": "9", + "responseId": "b9a5d224-cc5a-4e64-9800-5a3db9515fdf", + "satisfaction": "4", + "submissionSource": "amp", + "total-steps": "3" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_2.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_2.json new file mode 100644 index 0000000000..67a40cc4b4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_2.json @@ -0,0 +1,64 @@ +{ + "name": "mailmodo", + "description": "test-2", + "input": { + "request": { + "body": { + "triggerData": { + "data": {}, + "triggerSource": "Manual Add To List", + "email": "gou****@mailmodo.com", + "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "journeyId": "349e986e-f56c-****-bc3b-b5f13c3e34da", + "eventProperty": {} + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "Manual Add To List", + "integrations": { + "Mailmodo": false + }, + "properties": { + "triggerData.triggerSource": "Manual Add To List", + "triggerData.journeyId": "349e986e-f56c-****-bc3b-b5f13c3e34da" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_3.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_3.json new file mode 100644 index 0000000000..c8fc230de0 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_3.json @@ -0,0 +1,64 @@ +{ + "name": "mailmodo", + "description": "test-3", + "input": { + "request": { + "body": { + "triggerData": { + "data": {}, + "triggerSource": "Dashboard-change in property: first_name", + "email": "gou****@mailmodo.com", + "userId": "cc56708d-****-****-8c07-a4bfa5a7b79b", + "journeyId": "a78d7221-de34-47d8-81c6-5ad70cf4ee38", + "eventProperty": {} + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "cc56708d-****-****-8c07-a4bfa5a7b79b", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "Dashboard-change in property: first_name", + "integrations": { + "Mailmodo": false + }, + "properties": { + "triggerData.triggerSource": "Dashboard-change in property: first_name", + "triggerData.journeyId": "a78d7221-de34-47d8-81c6-5ad70cf4ee38" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_4.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_4.json new file mode 100644 index 0000000000..588e7c6da8 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_4.json @@ -0,0 +1,90 @@ +{ + "name": "mailmodo", + "description": "test-4", + "input": { + "request": { + "body": { + "triggerData": { + "data": {}, + "formSubmissionData": { + "element6ehxt3": "Te**", + "element6jkcy4": "Bang****", + "fuuid": "47949", + "next-step-id": "step7tr7n2", + "total-steps": "3", + "responseId": "4a8bfda7-****-4a8c-9cd1-a30d30a6dab9", + "recipientEmail": "gou****@mailmodo.com", + "formId": "formmqxnu2", + "recordedAt": { + "ts": 1657097786, + "date": "2022-07-06", + "hour": 14, + "minute": 26 + }, + "submissionSource": "amp" + }, + "email": "gou****@mailmodo.com", + "triggerSource": "form submission", + "userId": "11bff3e8-****-4e93-a533-fd8f9defc768", + "journeyId": "03664747-****-412e-8790-de9e9abe96a5", + "eventProperty": {} + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "11bff3e8-****-4e93-a533-fd8f9defc768", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "form submission", + "integrations": { + "Mailmodo": false + }, + "originalTimestamp": "2022-07-06T08:56:26.000Z", + "properties": { + "triggerData.triggerSource": "form submission", + "triggerData.formSubmissionData.element6ehxt3": "Te**", + "triggerData.formSubmissionData.element6jkcy4": "Bang****", + "triggerData.formSubmissionData.formId": "formmqxnu2", + "triggerData.formSubmissionData.fuuid": "47949", + "triggerData.formSubmissionData.next-step-id": "step7tr7n2", + "triggerData.formSubmissionData.responseId": "4a8bfda7-****-4a8c-9cd1-a30d30a6dab9", + "triggerData.formSubmissionData.submissionSource": "amp", + "triggerData.formSubmissionData.total-steps": "3", + "triggerData.journeyId": "03664747-****-412e-8790-de9e9abe96a5" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_5.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_5.json new file mode 100644 index 0000000000..8c4abcc945 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_5.json @@ -0,0 +1,75 @@ +{ + "name": "mailmodo", + "description": "test-5", + "input": { + "request": { + "body": { + "triggerData": { + "data": {}, + "eventProperty": { + "Name": "APPLE iPhone 13 (Blue, 128 GB)", + "Category": "Mobiles", + "Is Purchased": "false", + "Price": "829", + "Currency": "USD" + }, + "triggerSource": "New Custom Event Trigger - Product Viewed", + "email": "gou****@mailmodo.com", + "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "journeyId": "3f135bf7-****-4e31-b265-f61cfe1bd423" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "New Custom Event Trigger - Product Viewed", + "integrations": { + "Mailmodo": false + }, + "properties": { + "triggerData.eventProperty.Category": "Mobiles", + "triggerData.eventProperty.Currency": "USD", + "triggerData.eventProperty.Is Purchased": "false", + "triggerData.eventProperty.Name": "APPLE iPhone 13 (Blue, 128 GB)", + "triggerData.eventProperty.Price": "829", + "triggerData.journeyId": "3f135bf7-****-4e31-b265-f61cfe1bd423", + "triggerData.triggerSource": "New Custom Event Trigger - Product Viewed" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_6.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_6.json new file mode 100644 index 0000000000..e256cd683e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_6.json @@ -0,0 +1,64 @@ +{ + "name": "mailmodo", + "description": "test-6", + "input": { + "request": { + "body": { + "triggerData": { + "email": "gou****@mailmodo.com", + "data": {}, + "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "journeyId": "b1ee6bf6-****-4b5a-b7b5-0637853cd8c3", + "triggerSource": "Api", + "eventProperty": {} + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "Api", + "integrations": { + "Mailmodo": false + }, + "properties": { + "triggerData.triggerSource": "Api", + "triggerData.journeyId": "b1ee6bf6-****-4b5a-b7b5-0637853cd8c3" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_7.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_7.json new file mode 100644 index 0000000000..ccba1a0884 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_7.json @@ -0,0 +1,74 @@ +{ + "name": "mailmodo", + "description": "test-7", + "input": { + "request": { + "body": { + "eventData": { + "type": "html" + }, + "triggerData": { + "data": {}, + "triggerSource": "CsvList", + "email": "gou****@mailmodo.com", + "triggerDetails": "file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af", + "userId": "cc56708d-****-4fea-8c07-a4bfa5a7b79b", + "journeyId": "5d31c2b4-****-4a84-acd3-834cae80231b", + "eventProperty": {} + }, + "lastCampaignEmailRef": "064c76e7-****-4780-a001-226c066aaa12", + "lastCampaignId": "31422f76-****-4a72-a630-dd6f9f615bc3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", + "context": { + "externalId": [ + { + "id": "cc56708d-****-4fea-8c07-a4bfa5a7b79b", + "type": "mailmodoUserId" + } + ], + "traits": { + "email": "gou****@mailmodo.com" + }, + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "event": "CsvList", + "integrations": { + "Mailmodo": false + }, + "properties": { + "eventData.type": "html", + "lastCampaignEmailRef": "064c76e7-****-4780-a001-226c066aaa12", + "lastCampaignId": "31422f76-****-4a72-a630-dd6f9f615bc3", + "triggerData.journeyId": "5d31c2b4-****-4a84-acd3-834cae80231b", + "triggerData.triggerDetails": "file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af", + "triggerData.triggerSource": "CsvList" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/mailmodo/test_8.json b/go/webhook/testcases/testdata/testcases/mailmodo/test_8.json new file mode 100644 index 0000000000..b71b22a708 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/mailmodo/test_8.json @@ -0,0 +1,87 @@ +{ + "name": "mailmodo", + "description": "test-8", + "input": { + "request": { + "body": { + "fuuid": "98255", + "next-step-id": "success", + "total-steps": "3", + "responseId": "ad20a980-4fce-44b6-887d-2236df514a76", + "recipientEmail": "test@rudderstack.com", + "formId": "formosztd5", + "recordedAt": { + "ts": 1662695887, + "date": "2022-09-09", + "hour": 9, + "minute": 28 + }, + "submissionSource": "amp", + "elementjbtz42": "peace", + "element8jzo13": ["Useful"], + "recipientData": { + "email": "test@rudderstack.com", + "first_name": "abcda" + }, + "recommend": "1", + "liking": "downvote", + "satisfaction": "1", + "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", + "campaignName": "Campaign-testing" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", + "context": { + "integration": { + "name": "Mailmodo", + "version": "1.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "email": "test@rudderstack.com", + "first_name": "abcda" + } + }, + "event": "Form Submitted", + "integrations": { + "Mailmodo": false + }, + "originalTimestamp": "2022-09-09T03:58:07.000Z", + "properties": { + "fuuid": "98255", + "next-step-id": "success", + "total-steps": "3", + "responseId": "ad20a980-4fce-44b6-887d-2236df514a76", + "formId": "formosztd5", + "submissionSource": "amp", + "elementjbtz42": "peace", + "element8jzo13[0]": "Useful", + "recommend": "1", + "liking": "downvote", + "satisfaction": "1", + "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", + "campaignName": "Campaign-testing" + }, + "type": "track", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_0.json b/go/webhook/testcases/testdata/testcases/monday/test_0.json new file mode 100644 index 0000000000..91087521ba --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_0.json @@ -0,0 +1,82 @@ +{ + "name": "monday", + "description": "test-0", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3139815405, + "pulseId": 3160188786, + "pulseName": "New Sprint Item", + "groupId": "topics", + "groupName": "Group Title", + "groupColor": "#579bfc", + "isTopGroup": true, + "columnValues": {}, + "app": "monday", + "type": "create_pulse", + "triggerTime": "2022-08-30T09:02:39.191Z", + "subscriptionId": 150881106, + "triggerUuid": "049869226bf6711705c62e301a2c3eee" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Create Pulse", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T09:02:39.191Z", + "properties": { + "app": "monday", + "type": "create_pulse", + "boardId": 3139815405, + "groupId": "topics", + "pulseId": 3160188786, + "groupName": "Group Title", + "pulseName": "New Sprint Item", + "groupColor": "#579bfc", + "isTopGroup": true, + "triggerUuid": "049869226bf6711705c62e301a2c3eee", + "columnValues": {}, + "subscriptionId": 150881106, + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T09:02:39.191Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_1.json b/go/webhook/testcases/testdata/testcases/monday/test_1.json new file mode 100644 index 0000000000..6ecba956cf --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_1.json @@ -0,0 +1,72 @@ +{ + "name": "monday", + "description": "test-1", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3139815405, + "itemId": 3160188786, + "itemName": "New Sprint Item", + "app": "monday", + "type": "delete_pulse", + "triggerTime": "2022-08-30T09:06:09.176Z", + "subscriptionId": 150882006, + "triggerUuid": "4e4f87c8255c4ba4ba2f5e9934cb6d40" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Delete Pulse", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T09:06:09.176Z", + "properties": { + "app": "monday", + "type": "delete_pulse", + "itemId": 3160188786, + "boardId": 3139815405, + "itemName": "New Sprint Item", + "triggerUuid": "4e4f87c8255c4ba4ba2f5e9934cb6d40", + "subscriptionId": 150882006, + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T09:06:09.176Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_2.json b/go/webhook/testcases/testdata/testcases/monday/test_2.json new file mode 100644 index 0000000000..fbd8618b3c --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_2.json @@ -0,0 +1,112 @@ +{ + "name": "monday", + "description": "test-2", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3139815405, + "groupId": "topics", + "pulseId": 3160181387, + "pulseName": "New Sprint Item", + "columnId": "status", + "columnType": "color", + "columnTitle": "Status", + "value": { + "label": { + "index": 1, + "text": "Done", + "style": { + "color": "#00c875", + "border": "#00B461", + "var_name": "green-shadow" + }, + "is_done": true + }, + "post_id": null + }, + "previousValue": null, + "changedAt": 1661859406.8970098, + "isTopGroup": true, + "app": "monday", + "type": "update_column_value", + "triggerTime": "2022-08-30T11:36:47.406Z", + "subscriptionId": 150894742, + "triggerUuid": "51730730740a9d00ec45203bd392a9bd" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Update Column Value", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T11:36:47.406Z", + "properties": { + "app": "monday", + "type": "update_column_value", + "value": { + "label": { + "text": "Done", + "index": 1, + "style": { + "color": "#00c875", + "border": "#00B461", + "var_name": "green-shadow" + }, + "is_done": true + }, + "post_id": null + }, + "boardId": 3139815405, + "groupId": "topics", + "pulseId": 3160181387, + "columnId": "status", + "changedAt": 1661859406.8970098, + "pulseName": "New Sprint Item", + "columnType": "color", + "isTopGroup": true, + "columnTitle": "Status", + "triggerUuid": "51730730740a9d00ec45203bd392a9bd", + "previousValue": null, + "subscriptionId": 150894742, + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T11:36:47.406Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_3.json b/go/webhook/testcases/testdata/testcases/monday/test_3.json new file mode 100644 index 0000000000..b73fbf0ca4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_3.json @@ -0,0 +1,84 @@ +{ + "name": "monday", + "description": "test-3", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3139815405, + "groupId": "topics", + "pulseId": 3160181387, + "value": { + "name": "New Sprint Item renamed" + }, + "previousValue": { + "name": "New Sprint Item" + }, + "app": "monday", + "type": "update_name", + "triggerTime": "2022-08-30T11:40:17.351Z", + "subscriptionId": 150910867, + "triggerUuid": "05ce13d32d0256c4fb7dd5de25b1a1ba" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Update Name", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T11:40:17.351Z", + "properties": { + "app": "monday", + "type": "update_name", + "value": { + "name": "New Sprint Item renamed" + }, + "boardId": 3139815405, + "groupId": "topics", + "pulseId": 3160181387, + "triggerUuid": "05ce13d32d0256c4fb7dd5de25b1a1ba", + "previousValue": { + "name": "New Sprint Item" + }, + "subscriptionId": 150910867, + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T11:40:17.351Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_4.json b/go/webhook/testcases/testdata/testcases/monday/test_4.json new file mode 100644 index 0000000000..6e0c11ca26 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_4.json @@ -0,0 +1,88 @@ +{ + "name": "monday", + "description": "test-4", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3160805239, + "pulseId": 3161163765, + "pulseName": "new subitem", + "groupId": "topics", + "groupName": "Subitems", + "groupColor": "#579bfc", + "isTopGroup": true, + "columnValues": {}, + "app": "monday", + "type": "create_pulse", + "triggerTime": "2022-08-30T12:56:27.281Z", + "subscriptionId": 150911592, + "triggerUuid": "70a2219427804e47a508a91b5c244543", + "parentItemId": "3160181387", + "parentItemBoardId": "3139815405", + "itemId": 3161163765 + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Create Pulse", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T12:56:27.281Z", + "properties": { + "app": "monday", + "type": "create_pulse", + "itemId": 3161163765, + "boardId": 3160805239, + "groupId": "topics", + "pulseId": 3161163765, + "groupName": "Subitems", + "pulseName": "new subitem", + "groupColor": "#579bfc", + "isTopGroup": true, + "triggerUuid": "70a2219427804e47a508a91b5c244543", + "columnValues": {}, + "parentItemId": "3160181387", + "subscriptionId": 150911592, + "parentItemBoardId": "3139815405", + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T12:56:27.281Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/monday/test_5.json b/go/webhook/testcases/testdata/testcases/monday/test_5.json new file mode 100644 index 0000000000..0c41c845dd --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/monday/test_5.json @@ -0,0 +1,72 @@ +{ + "name": "monday", + "description": "test-5", + "input": { + "request": { + "body": { + "event": { + "userId": 33556506, + "originalTriggerUuid": null, + "boardId": 3139815405, + "itemId": 3160181387, + "itemName": "New Sprint Item renamed", + "app": "monday", + "type": "archive_pulse", + "triggerTime": "2022-08-30T12:58:15.844Z", + "subscriptionId": 150925947, + "triggerUuid": "aa8bd5dbb6fd592aedd57322dd776379" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Archive Pulse", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "externalId": [ + { + "id": 33556506, + "type": "mondayUserId" + } + ], + "integration": { + "name": "MONDAY" + } + }, + "timestamp": "2022-08-30T12:58:15.844Z", + "properties": { + "app": "monday", + "type": "archive_pulse", + "itemId": 3160181387, + "boardId": 3139815405, + "itemName": "New Sprint Item renamed", + "triggerUuid": "aa8bd5dbb6fd592aedd57322dd776379", + "subscriptionId": 150925947, + "originalTriggerUuid": null + }, + "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", + "integrations": { + "MONDAY": false + }, + "originalTimestamp": "2022-08-30T12:58:15.844Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/olark/olark_webhook_response.json b/go/webhook/testcases/testdata/testcases/olark/olark_webhook_response.json new file mode 100644 index 0000000000..031940996c --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/olark/olark_webhook_response.json @@ -0,0 +1,122 @@ +{ + "name": "olark", + "description": "Olark webhook response", + "input": { + "request": { + "body": { + "kind": "Conversation", + "id": "ho6HrHxoabmm6q0G103JU0JFaor0BobA", + "manuallySubmitted": false, + "items": [ + { + "kind": "OfflineMessage", + "timestamp": "1669288532.567071", + "body": "name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv" + } + ], + "tags": [], + "groups": [ + { + "kind": "Group", + "id": "ca77f4296fb7568909ad864aebf48201", + "name": "Group 1" + } + ], + "visitor": { + "kind": "Visitor", + "id": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", + "fullName": "test rudderstack", + "emailAddress": "rudder14@gmail.com", + "ip": "", + "country": "India", + "countryCode": "IN", + "browser": "Chrome 105.0.0.0", + "operatingSystem": "Macintosh", + "conversationBeginPage": "http://localhost:5503/" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Conversation", + "traits": {}, + "userId": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", + "context": { + "os": { + "name": "Macintosh" + }, + "page": { + "url": "http://localhost:5503/" + }, + "traits": { + "name": "test rudderstack", + "email": "rudder14@gmail.com", + "country": "India" + }, + "browser": { + "name": "Chrome", + "version": "105.0.0.0" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Olark" + } + }, + "properties": { + "tags": [], + "items": [ + { + "body": "name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv", + "kind": "OfflineMessage", + "timestamp": "1669288532.567071" + } + ] + }, + "integrations": { + "Olark": false + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "name": "Group 1", + "type": "group", + "traits": { + "kind": "Group" + }, + "userId": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Olark" + } + }, + "groupId": "ca77f4296fb7568909ad864aebf48201", + "integrations": { + "Olark": false + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pagerduty/incident_escalated.json b/go/webhook/testcases/testdata/testcases/pagerduty/incident_escalated.json new file mode 100644 index 0000000000..eb7c31251b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pagerduty/incident_escalated.json @@ -0,0 +1,157 @@ +{ + "name": "pagerduty", + "description": "Incident Escalated", + "input": { + "request": { + "body": { + "event": { + "id": "01DFU77KTKK9UUYX779UX0N1ZP", + "event_type": "incident.escalated", + "resource_type": "incident", + "occurred_at": "2022-12-20T11:49:35.385Z", + "agent": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "client": null, + "data": { + "id": "Q1KRTY75EUMGM0", + "type": "incident", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "number": 7, + "status": "triggered", + "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", + "created_at": "2022-12-20T11:37:19Z", + "title": "Event Stream Failure", + "service": { + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "summary": "Database", + "type": "service_reference" + }, + "assignees": [ + { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + } + ], + "escalation_policy": { + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "summary": "Default", + "type": "escalation_policy_reference" + }, + "teams": [], + "priority": { + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "summary": "P1", + "type": "priority_reference" + }, + "urgency": "high", + "conference_bridge": null, + "resolve_reason": null + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Incident Escalated", + "userId": "PXZZD2E", + "context": { + "traits": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "PagerDuty" + } + }, + "messageId": "01DFU77KTKK9UUYX779UX0N1ZP", + "properties": { + "data": { + "id": "Q1KRTY75EUMGM0", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "type": "incident", + "teams": [], + "title": "Event Stream Failure", + "number": 7, + "status": "triggered", + "service": { + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "type": "service_reference", + "summary": "Database", + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" + }, + "urgency": "high", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "priority": { + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "type": "priority_reference", + "summary": "P1", + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" + }, + "assignees": [ + { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + } + ], + "created_at": "2022-12-20T11:37:19Z", + "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", + "resolve_reason": null, + "conference_bridge": null, + "escalation_policy": { + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "type": "escalation_policy_reference", + "summary": "Default", + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" + } + }, + "resourceType": "incident" + }, + "integrations": { + "PagerDuty": false + }, + "originalTimestamp": "2022-12-20T11:49:35.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pagerduty/incident_priority_updated.json b/go/webhook/testcases/testdata/testcases/pagerduty/incident_priority_updated.json new file mode 100644 index 0000000000..846efe5749 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pagerduty/incident_priority_updated.json @@ -0,0 +1,157 @@ +{ + "name": "pagerduty", + "description": "Incident Priority Updated", + "input": { + "request": { + "body": { + "event": { + "id": "01DFU6P4VDDZCIHVQ5Q0ME99OE", + "event_type": "incident.priority_updated", + "resource_type": "incident", + "occurred_at": "2022-12-20T11:43:24.342Z", + "agent": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "client": null, + "data": { + "id": "Q1KRTY75EUMGM0", + "type": "incident", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "number": 7, + "status": "acknowledged", + "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", + "created_at": "2022-12-20T11:37:19Z", + "title": "Event Stream Failure", + "service": { + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "summary": "Database", + "type": "service_reference" + }, + "assignees": [ + { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + } + ], + "escalation_policy": { + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "summary": "Default", + "type": "escalation_policy_reference" + }, + "teams": [], + "priority": { + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "summary": "P1", + "type": "priority_reference" + }, + "urgency": "high", + "conference_bridge": null, + "resolve_reason": null + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Incident Priority Updated", + "userId": "PXZZD2E", + "context": { + "traits": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "PagerDuty" + } + }, + "messageId": "01DFU6P4VDDZCIHVQ5Q0ME99OE", + "properties": { + "data": { + "id": "Q1KRTY75EUMGM0", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "type": "incident", + "teams": [], + "title": "Event Stream Failure", + "number": 7, + "status": "acknowledged", + "service": { + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "type": "service_reference", + "summary": "Database", + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" + }, + "urgency": "high", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "priority": { + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "type": "priority_reference", + "summary": "P1", + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" + }, + "assignees": [ + { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + } + ], + "created_at": "2022-12-20T11:37:19Z", + "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", + "resolve_reason": null, + "conference_bridge": null, + "escalation_policy": { + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "type": "escalation_policy_reference", + "summary": "Default", + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" + } + }, + "resourceType": "incident" + }, + "integrations": { + "PagerDuty": false + }, + "originalTimestamp": "2022-12-20T11:43:24.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pagerduty/incident_resolved.json b/go/webhook/testcases/testdata/testcases/pagerduty/incident_resolved.json new file mode 100644 index 0000000000..c4766e3722 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pagerduty/incident_resolved.json @@ -0,0 +1,147 @@ +{ + "name": "pagerduty", + "description": "Incident Resolved", + "input": { + "request": { + "body": { + "event": { + "id": "01DEN1HNLBC1VITK192ETJ1MPJ", + "event_type": "incident.resolved", + "resource_type": "incident", + "occurred_at": "2022-12-07T11:04:27.459Z", + "agent": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "client": null, + "data": { + "id": "Q3S7IX2U5KTCOY", + "type": "incident", + "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "number": 2, + "status": "resolved", + "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", + "created_at": "2022-12-07T10:56:52Z", + "title": "Server Crashed", + "service": { + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "summary": "Database", + "type": "service_reference" + }, + "assignees": [], + "escalation_policy": { + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "summary": "Default", + "type": "escalation_policy_reference" + }, + "teams": [], + "priority": { + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", + "id": "P5DBC3A", + "self": "https://api.pagerduty.com/priorities/P5DBC3A", + "summary": "P3", + "type": "priority_reference" + }, + "urgency": "high", + "conference_bridge": { + "conference_number": "", + "conference_url": "" + }, + "resolve_reason": null + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Incident Resolved", + "userId": "PXZZD2E", + "context": { + "traits": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "PagerDuty" + } + }, + "messageId": "01DEN1HNLBC1VITK192ETJ1MPJ", + "properties": { + "data": { + "id": "Q3S7IX2U5KTCOY", + "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "type": "incident", + "teams": [], + "title": "Server Crashed", + "number": 2, + "status": "resolved", + "service": { + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "type": "service_reference", + "summary": "Database", + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" + }, + "urgency": "high", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "priority": { + "id": "P5DBC3A", + "self": "https://api.pagerduty.com/priorities/P5DBC3A", + "type": "priority_reference", + "summary": "P3", + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" + }, + "assignees": [], + "created_at": "2022-12-07T10:56:52Z", + "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", + "resolve_reason": null, + "conference_bridge": { + "conference_url": "", + "conference_number": "" + }, + "escalation_policy": { + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "type": "escalation_policy_reference", + "summary": "Default", + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" + } + }, + "resourceType": "incident" + }, + "integrations": { + "PagerDuty": false + }, + "originalTimestamp": "2022-12-07T11:04:27.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pagerduty/incident_responder_added.json b/go/webhook/testcases/testdata/testcases/pagerduty/incident_responder_added.json new file mode 100644 index 0000000000..b78369162b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pagerduty/incident_responder_added.json @@ -0,0 +1,107 @@ +{ + "name": "pagerduty", + "description": "Incident Responder Added", + "input": { + "request": { + "body": { + "event": { + "id": "01DFU6Z1ZCLMV9SEK3X5JZ5WLW", + "event_type": "incident.responder.added", + "resource_type": "incident", + "occurred_at": "2022-12-20T11:46:44.213Z", + "agent": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "client": null, + "data": { + "incident": { + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "id": "Q1KRTY75EUMGM0", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "summary": "Event Stream Failure", + "type": "incident_reference" + }, + "user": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "escalation_policy": null, + "message": "Please help with \"Event Stream Failure\"", + "state": "pending", + "type": "incident_responder" + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Incident Responder Added", + "userId": "PXZZD2E", + "context": { + "traits": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "PagerDuty" + } + }, + "messageId": "01DFU6Z1ZCLMV9SEK3X5JZ5WLW", + "properties": { + "data": { + "type": "incident_responder", + "user": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "state": "pending", + "message": "Please help with \"Event Stream Failure\"", + "incident": { + "id": "Q1KRTY75EUMGM0", + "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", + "type": "incident_reference", + "summary": "Event Stream Failure", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0" + }, + "escalation_policy": null + }, + "resourceType": "incident" + }, + "integrations": { + "PagerDuty": false + }, + "originalTimestamp": "2022-12-20T11:46:44.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pagerduty/incident_triggered.json b/go/webhook/testcases/testdata/testcases/pagerduty/incident_triggered.json new file mode 100644 index 0000000000..bfb4c1e86f --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pagerduty/incident_triggered.json @@ -0,0 +1,164 @@ +{ + "name": "pagerduty", + "description": "Incident Triggered", + "input": { + "request": { + "body": { + "event": { + "id": "01DEN0V2VIFEN5871PQGX72URP", + "event_type": "incident.triggered", + "resource_type": "incident", + "occurred_at": "2022-12-07T10:56:52.337Z", + "agent": { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + }, + "client": { + "name": "Monitoring Service", + "url": "https://monitoring.service.com" + }, + "data": { + "id": "Q3S7IX2U5KTCOY", + "type": "incident", + "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "number": 2, + "status": "triggered", + "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", + "created_at": "2022-12-07T10:56:52Z", + "title": "Server Crashed", + "service": { + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "summary": "Database", + "type": "service_reference" + }, + "assignees": [ + { + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "summary": "rudder test", + "type": "user_reference" + } + ], + "escalation_policy": { + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "summary": "Default", + "type": "escalation_policy_reference" + }, + "teams": [], + "priority": { + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "summary": "P1", + "type": "priority_reference" + }, + "urgency": "high", + "conference_bridge": null, + "resolve_reason": null + } + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "track", + "event": "Incident Triggered", + "userId": "PXZZD2E", + "context": { + "traits": { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "PagerDuty" + } + }, + "messageId": "01DEN0V2VIFEN5871PQGX72URP", + "properties": { + "data": { + "id": "Q3S7IX2U5KTCOY", + "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "type": "incident", + "teams": [], + "title": "Server Crashed", + "number": 2, + "status": "triggered", + "service": { + "id": "PAJBUTT", + "self": "https://api.pagerduty.com/services/PAJBUTT", + "type": "service_reference", + "summary": "Database", + "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" + }, + "urgency": "high", + "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", + "priority": { + "id": "PPMNDVQ", + "self": "https://api.pagerduty.com/priorities/PPMNDVQ", + "type": "priority_reference", + "summary": "P1", + "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" + }, + "assignees": [ + { + "id": "PXZZD2E", + "self": "https://api.pagerduty.com/users/user@1", + "type": "user_reference", + "summary": "rudder test", + "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" + } + ], + "created_at": "2022-12-07T10:56:52Z", + "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", + "resolve_reason": null, + "conference_bridge": null, + "escalation_policy": { + "id": "PB7HKU4", + "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", + "type": "escalation_policy_reference", + "summary": "Default", + "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" + } + }, + "client": { + "url": "https://monitoring.service.com", + "name": "Monitoring Service" + }, + "resourceType": "incident" + }, + "integrations": { + "PagerDuty": false + }, + "originalTimestamp": "2022-12-07T10:56:52.000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json new file mode 100644 index 0000000000..d28c468cb7 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json @@ -0,0 +1,33 @@ +{ + "name": "pipedream", + "description": "Alias type -> type and userId is given", + "input": { + "request": { + "body": { + "type": "alias", + "previousId": "name@surname.com", + "userId": "12345" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "alias", + "previousId": "name@surname.com", + "userId": "12345", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/group_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/group_type____type_and_user_id_is_given.json new file mode 100644 index 0000000000..9f65d0a516 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/group_type____type_and_user_id_is_given.json @@ -0,0 +1,41 @@ +{ + "name": "pipedream", + "description": "Group type -> type and userId is given", + "input": { + "request": { + "body": { + "userId": "user123", + "groupId": "17", + "context": {}, + "traits": { + "operation": "add" + }, + "type": "group" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "user123", + "groupId": "17", + "context": {}, + "traits": { + "operation": "add" + }, + "type": "group", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json new file mode 100644 index 0000000000..a8ddaecf11 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json @@ -0,0 +1,67 @@ +{ + "name": "pipedream", + "description": "Identify type -> type and userId is given", + "input": { + "request": { + "body": { + "userId": "1", + "originalTimestamp": "2020-09-28T19:53:31.900Z", + "traits": { + "firstName": "John", + "lastName": "doe", + "email": "John@r.com", + "hasPurchased": "yes", + "address": { + "Home": { + "city": "iudcb" + }, + "Office": { + "abc": "jbc" + } + }, + "state": "Delhi", + "title": "Mr" + }, + "timestamp": "2020-09-29T14:50:29.907+05:30", + "type": "identify" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "userId": "1", + "originalTimestamp": "2020-09-28T19:53:31.900Z", + "traits": { + "firstName": "John", + "lastName": "doe", + "email": "John@r.com", + "hasPurchased": "yes", + "address": { + "Home": { + "city": "iudcb" + }, + "Office": { + "abc": "jbc" + } + }, + "state": "Delhi", + "title": "Mr" + }, + "timestamp": "2020-09-29T14:50:29.907+05:30", + "type": "identify", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_anonymous_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_anonymous_id_is_given.json new file mode 100644 index 0000000000..2933fe5d0a --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_anonymous_id_is_given.json @@ -0,0 +1,52 @@ +{ + "name": "pipedream", + "description": "No type or anonymousId is given", + "input": { + "request": { + "body": { + "userId": "12", + "artist": "Gautam", + "genre": "Jazz", + "song": "Take Five" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "event": "pipedream_source_event", + "anonymousId": "12", + "context": { + "integration": { + "name": "PIPEDREAM" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "integrations": { + "PIPEDREAM": false + }, + "type": "track", + "properties": { + "userId": "12", + "artist": "Gautam", + "genre": "Jazz", + "song": "Take Five" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_user_id_is_given.json new file mode 100644 index 0000000000..1c66c40795 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/no_type_or_user_id_is_given.json @@ -0,0 +1,52 @@ +{ + "name": "pipedream", + "description": "No type or userId is given", + "input": { + "request": { + "body": { + "anonymousId": "63767499ca6fb1b7c988d5bb", + "artist": "Gautam", + "genre": "Jazz", + "song": "Take Five" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "event": "pipedream_source_event", + "anonymousId": "63767499ca6fb1b7c988d5bb", + "context": { + "integration": { + "name": "PIPEDREAM" + }, + "library": { + "name": "unknown", + "version": "unknown" + } + }, + "integrations": { + "PIPEDREAM": false + }, + "type": "track", + "properties": { + "anonymousId": "63767499ca6fb1b7c988d5bb", + "artist": "Gautam", + "genre": "Jazz", + "song": "Take Five" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/page_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/page_type____type_and_user_id_is_given.json new file mode 100644 index 0000000000..62cf4d27a2 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/page_type____type_and_user_id_is_given.json @@ -0,0 +1,65 @@ +{ + "name": "pipedream", + "description": "Page type -> type and userId is given", + "input": { + "request": { + "body": { + "anonymousId": "21e13f4bc7ceddad", + "channel": "mobile", + "context": { + "os": { + "name": "Android", + "version": "9" + }, + "timezone": "Asia/Kolkata", + "traits": { + "customProp": "customValue" + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" + }, + "name": "Home", + "properties": { + "title": "Home | RudderStack", + "url": "http://www.rudderstack.com" + }, + "type": "page" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "anonymousId": "21e13f4bc7ceddad", + "channel": "mobile", + "context": { + "os": { + "name": "Android", + "version": "9" + }, + "timezone": "Asia/Kolkata", + "traits": { + "customProp": "customValue" + }, + "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" + }, + "name": "Home", + "properties": { + "title": "Home | RudderStack", + "url": "http://www.rudderstack.com" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "type": "page", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/pipedream/track_call____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/track_call____type_and_user_id_is_given.json new file mode 100644 index 0000000000..7da284c456 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/pipedream/track_call____type_and_user_id_is_given.json @@ -0,0 +1,101 @@ +{ + "name": "pipedream", + "description": "Track Call -> type and userId is given", + "input": { + "request": { + "body": { + "event": "Song Played", + "userId": "R1234", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe", + "userDeleted": false + }, + "locale": "en", + "location": { + "country": "IN", + "countryName": "India", + "short": "India", + "long": "India" + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "page": { + "referrer": "http://127.0.0.1:5500/testSm.html" + } + }, + "type": "track", + "properties": { + "artist": "John", + "Album": "ABCD" + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "event": "Song Played", + "userId": "R1234", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe", + "userDeleted": false + }, + "locale": "en", + "location": { + "country": "IN", + "countryName": "India", + "short": "India", + "long": "India" + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "page": { + "referrer": "http://127.0.0.1:5500/testSm.html" + } + }, + "type": "track", + "properties": { + "artist": "John", + "Album": "ABCD" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/refiner/refiner_webhook_response.json b/go/webhook/testcases/testdata/testcases/refiner/refiner_webhook_response.json new file mode 100644 index 0000000000..e6d72fa7c4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/refiner/refiner_webhook_response.json @@ -0,0 +1,211 @@ +{ + "name": "refiner", + "description": "Refiner webhook response", + "input": { + "request": { + "body": { + "uuid": "69b83e20-4ea2-11ed-941c-e1cb6c7a3870", + "cookie_uuid": "2f9b7e6a-9ba8-1c68-d474-48d719d92a60", + "project_uuid": "0d8759d0-401c-11ed-8ded-9757c4929b55", + "remote_id": "sdk@30", + "email": "sdk30@gmail.com", + "display_name": "", + "first_seen_at": "2022-10-18T05:04:58.000000Z", + "last_seen_at": "2022-10-18T05:04:58.000000Z", + "attributes": { + "address": null, + "address_city": null, + "address_state": null, + "age": null, + "another_attribute": null, + "city": null, + "country": null, + "created_at": null, + "email": "sdk30@gmail.com", + "event": null, + "first_name": null, + "first_seen_at": "2022-10-18T05:04:58.000000Z", + "form_submissions_count": "1", + "form_views_count": "1", + "gender": null, + "last_form_submission_at": "2022-10-18T05:05:45.000000Z", + "last_form_view_at": "2022-10-18T05:05:29.000000Z", + "last_name": null, + "last_seen_at": "2022-10-18T05:04:58.000000Z", + "name": null, + "phone": null, + "some_attribute": null, + "status": null, + "student": null, + "tag": null, + "trait1": null, + "trait2": null, + "trait3": null, + "url": null, + "user_address_city": null, + "user_address_state": null, + "user_country": null, + "user_id": null, + "username": null, + "useroccupation": null, + "why_did_you_cancel_your_subscription": "Missing features" + }, + "segments": [ + { + "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", + "name": "All Users", + "created_at": "2022-10-18T05:04:58.000000Z", + "updated_at": "2022-10-18T05:04:58.000000Z" + }, + { + "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", + "name": "test-segment", + "created_at": "2022-10-18T05:04:58.000000Z", + "updated_at": "2022-10-18T05:04:58.000000Z" + } + ], + "account": { + "uuid": "69ba2030-4ea2-11ed-adfc-595e70c7ab07", + "remote_id": null, + "domain": null, + "display_name": "", + "first_seen_at": "2022-10-18T05:04:58.000000Z", + "last_seen_at": "2022-10-18T05:04:58.000000Z", + "attributes": { + "1": null, + "2": null, + "3": null, + "4": null, + "a_date_at": null, + "business_email": null, + "company": null, + "email": null, + "isfunded": null, + "location": null, + "name": null, + "revenue": null, + "some_account_data": null, + "trait1": null, + "trait2": null, + "trait3": null, + "user_id": null + } + }, + "triggered_event": "Completed Survey", + "form": { + "uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", + "name": "Customer Churn Survey" + }, + "response": { + "uuid": "7c508c60-4ea2-11ed-9302-57708fe11d26", + "first_shown_at": "2022-10-18T05:05:29.000000Z", + "last_shown_at": "2022-10-18T05:05:29.000000Z", + "show_counter": null, + "first_data_reception_at": "2022-10-18T05:05:45.000000Z", + "last_data_reception_at": "2022-10-18T05:05:45.000000Z", + "completed_at": "2022-10-18T05:05:45.000000Z", + "dismissed_at": null, + "received_at": "2022-10-18T05:05:45.000000Z", + "data": { + "why_did_you_cancel_your_subscription": "Missing features" + }, + "tags": [] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "type": "identify", + "traits": { + "why_did_you_cancel_your_subscription": "Missing features" + }, + "userId": "sdk@30", + "context": { + "traits": { + "email": "sdk30@gmail.com", + "segments": [ + { + "name": "All Users", + "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", + "created_at": "2022-10-18T05:04:58.000000Z", + "updated_at": "2022-10-18T05:04:58.000000Z" + }, + { + "name": "test-segment", + "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", + "created_at": "2022-10-18T05:04:58.000000Z", + "updated_at": "2022-10-18T05:04:58.000000Z" + } + ] + }, + "library": { + "name": "unknown", + "version": "unknown" + }, + "formName": "Customer Churn Survey", + "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", + "integration": { + "name": "Refiner" + } + }, + "integrations": { + "Refiner": false + }, + "originalTimestamp": "2022-10-18T05:05:45.000000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "type": "track", + "event": "Completed Survey", + "userId": "sdk@30", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "formName": "Customer Churn Survey", + "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", + "integration": { + "name": "Refiner" + } + }, + "properties": { + "response": { + "data": { + "why_did_you_cancel_your_subscription": "Missing features" + }, + "tags": [], + "uuid": "7c508c60-4ea2-11ed-9302-57708fe11d26", + "received_at": "2022-10-18T05:05:45.000000Z", + "completed_at": "2022-10-18T05:05:45.000000Z", + "last_shown_at": "2022-10-18T05:05:29.000000Z", + "first_shown_at": "2022-10-18T05:05:29.000000Z", + "last_data_reception_at": "2022-10-18T05:05:45.000000Z", + "first_data_reception_at": "2022-10-18T05:05:45.000000Z" + }, + "refiner_form_name": "Customer Churn Survey", + "refiner_form_uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae" + }, + "integrations": { + "Refiner": false + }, + "originalTimestamp": "2022-10-18T05:05:45.000000Z", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/satismeter/all_fields_check_with_event_as_completed.json b/go/webhook/testcases/testdata/testcases/satismeter/all_fields_check_with_event_as_completed.json new file mode 100644 index 0000000000..ed8ad4e0da --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/satismeter/all_fields_check_with_event_as_completed.json @@ -0,0 +1,244 @@ +{ + "name": "satismeter", + "description": " All fields Check with event as completed", + "input": { + "request": { + "body": { + "response": { + "id": "63767499ca6fb1b7c988d5bb", + "created": "2022-11-17T17:51:21.764Z", + "rating": 5, + "feedback": "Many things to imporve\n", + "dismissed": false, + "pending": false, + "answers": [ + { + "label": "How likely are you to recommend us to your friends and colleagues?", + "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", + "value": 5, + "name": "SM_rating", + "type": "scale", + "metric": "nps" + }, + { + "label": "What could we do to improve?", + "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", + "value": "Many things to imporve\n", + "name": "SM_comment", + "type": "long-text" + }, + { + "label": "The company made it easy for me to handle my issue.", + "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "scale", + "metric": "ces" + }, + { + "label": "How satisfied were you with the service you received?", + "id": "24c5b290-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "smiley", + "metric": "csat" + }, + { + "label": "How you like to rate the surevy?", + "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", + "value": 4, + "type": "scale" + }, + { + "label": "Your Name (Single Answer)", + "id": "37a8c000-66a0-11ed-856c-6f39711bf041", + "value": "a", + "type": "single-choice" + }, + { + "label": "Your Name (Multiple Answer)", + "id": "4b435da0-66a0-11ed-856c-6f39711bf041", + "value": ["a1", "b1"], + "type": "multiple-choice" + } + ], + "category": "detractor", + "score": -100, + "user": { + "id": "63766fbb7ac7b72676145338", + "name": "John Doe", + "email": "john@doe.com", + "userId": "No response", + "deleted": false, + "groups": { + "group1": "grooupId" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe" + } + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "location": { + "country": "IN", + "countryName": "India", + "region": "", + "city": "", + "short": "India", + "long": "India" + }, + "referrer": "http://127.0.0.1:5500/testSm.html", + "method": "In-app", + "language": "en", + "project": "6372247a764986ebee62bf66", + "campaign": "6373271b764986ebee62bfca" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe" + }, + "campaign": { + "id": "6373271b764986ebee62bfca", + "name": "NPS Survey" + }, + "event": "completed" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "event": "Survey completed", + "anonymousId": "63766fbb7ac7b72676145338", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe", + "userDeleted": false + }, + "locale": "en", + "campaign": { + "id": "6373271b764986ebee62bfca", + "name": "NPS Survey" + }, + "integration": { + "name": "SATISMETER" + }, + "location": { + "country": "IN", + "countryName": "India", + "short": "India", + "long": "India" + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "page": { + "referrer": "http://127.0.0.1:5500/testSm.html" + } + }, + "integrations": { + "SATISMETER": false + }, + "type": "track", + "traits": { + "groups": { + "group1": "grooupId" + } + }, + "userId": "No response", + "properties": { + "category": "detractor", + "answers": [ + { + "label": "How likely are you to recommend us to your friends and colleagues?", + "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", + "value": 5, + "name": "SM_rating", + "type": "scale", + "metric": "nps" + }, + { + "label": "What could we do to improve?", + "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", + "value": "Many things to imporve\n", + "name": "SM_comment", + "type": "long-text" + }, + { + "label": "The company made it easy for me to handle my issue.", + "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "scale", + "metric": "ces" + }, + { + "label": "How satisfied were you with the service you received?", + "id": "24c5b290-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "smiley", + "metric": "csat" + }, + { + "label": "How you like to rate the surevy?", + "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", + "value": 4, + "type": "scale" + }, + { + "label": "Your Name (Single Answer)", + "id": "37a8c000-66a0-11ed-856c-6f39711bf041", + "value": "a", + "type": "single-choice" + }, + { + "label": "Your Name (Multiple Answer)", + "id": "4b435da0-66a0-11ed-856c-6f39711bf041", + "value": ["a1", "b1"], + "type": "multiple-choice" + } + ], + "surveyDismissed": false, + "surveyPending": false, + "receivedAt": "2022-11-17T17:51:21.764Z" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/satismeter/neither_reponse_user_id_or_response_user_user_id_is_provided_in_payload_then_mapping_response_id_to_anonymous_id.json b/go/webhook/testcases/testdata/testcases/satismeter/neither_reponse_user_id_or_response_user_user_id_is_provided_in_payload_then_mapping_response_id_to_anonymous_id.json new file mode 100644 index 0000000000..9906523298 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/satismeter/neither_reponse_user_id_or_response_user_user_id_is_provided_in_payload_then_mapping_response_id_to_anonymous_id.json @@ -0,0 +1,241 @@ +{ + "name": "satismeter", + "description": " Neither reponse.user.id or response.user.userId is provided in payload then mapping response.id to anonymousId", + "input": { + "request": { + "body": { + "response": { + "id": "63767499ca6fb1b7c988d5bb", + "created": "2022-11-17T17:51:21.764Z", + "rating": 5, + "feedback": "Many things to imporve\n", + "dismissed": false, + "pending": false, + "answers": [ + { + "label": "How likely are you to recommend us to your friends and colleagues?", + "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", + "value": 5, + "name": "SM_rating", + "type": "scale", + "metric": "nps" + }, + { + "label": "What could we do to improve?", + "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", + "value": "Many things to imporve\n", + "name": "SM_comment", + "type": "long-text" + }, + { + "label": "The company made it easy for me to handle my issue.", + "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "scale", + "metric": "ces" + }, + { + "label": "How satisfied were you with the service you received?", + "id": "24c5b290-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "smiley", + "metric": "csat" + }, + { + "label": "How you like to rate the surevy?", + "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", + "value": 4, + "type": "scale" + }, + { + "label": "Your Name (Single Answer)", + "id": "37a8c000-66a0-11ed-856c-6f39711bf041", + "value": "a", + "type": "single-choice" + }, + { + "label": "Your Name (Multiple Answer)", + "id": "4b435da0-66a0-11ed-856c-6f39711bf041", + "value": ["a1", "b1"], + "type": "multiple-choice" + } + ], + "category": "detractor", + "score": -100, + "user": { + "name": "John Doe", + "email": "john@doe.com", + "deleted": false, + "groups": { + "group1": "grooupId" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe" + } + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "location": { + "country": "IN", + "countryName": "India", + "region": "", + "city": "", + "short": "India", + "long": "India" + }, + "referrer": "http://127.0.0.1:5500/testSm.html", + "method": "In-app", + "language": "en", + "project": "6372247a764986ebee62bf66", + "campaign": "6373271b764986ebee62bfca" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe" + }, + "campaign": { + "id": "6373271b764986ebee62bfca", + "name": "NPS Survey" + }, + "event": "completed" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "event": "Survey completed", + "anonymousId": "63767499ca6fb1b7c988d5bb", + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "traits": { + "createdAt": "2022-10-15T05:41:06.016Z", + "custom": { + "key1": "v1", + "key2": "V2" + }, + "email": "john@doe.com", + "name": "John Doe", + "userDeleted": false + }, + "locale": "en", + "campaign": { + "id": "6373271b764986ebee62bfca", + "name": "NPS Survey" + }, + "integration": { + "name": "SATISMETER" + }, + "location": { + "country": "IN", + "countryName": "India", + "short": "India", + "long": "India" + }, + "device": { + "os": "macOS", + "type": "desktop" + }, + "page": { + "referrer": "http://127.0.0.1:5500/testSm.html" + } + }, + "integrations": { + "SATISMETER": false + }, + "type": "track", + "traits": { + "groups": { + "group1": "grooupId" + } + }, + "properties": { + "category": "detractor", + "answers": [ + { + "label": "How likely are you to recommend us to your friends and colleagues?", + "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", + "value": 5, + "name": "SM_rating", + "type": "scale", + "metric": "nps" + }, + { + "label": "What could we do to improve?", + "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", + "value": "Many things to imporve\n", + "name": "SM_comment", + "type": "long-text" + }, + { + "label": "The company made it easy for me to handle my issue.", + "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "scale", + "metric": "ces" + }, + { + "label": "How satisfied were you with the service you received?", + "id": "24c5b290-66a0-11ed-856c-6f39711bf041", + "value": 4, + "name": null, + "type": "smiley", + "metric": "csat" + }, + { + "label": "How you like to rate the surevy?", + "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", + "value": 4, + "type": "scale" + }, + { + "label": "Your Name (Single Answer)", + "id": "37a8c000-66a0-11ed-856c-6f39711bf041", + "value": "a", + "type": "single-choice" + }, + { + "label": "Your Name (Multiple Answer)", + "id": "4b435da0-66a0-11ed-856c-6f39711bf041", + "value": ["a1", "b1"], + "type": "multiple-choice" + } + ], + "surveyDismissed": false, + "surveyPending": false, + "receivedAt": "2022-11-17T17:51:21.764Z" + }, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/segment/test_0.json b/go/webhook/testcases/testdata/testcases/segment/test_0.json new file mode 100644 index 0000000000..d3103126c9 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/segment/test_0.json @@ -0,0 +1,250 @@ +{ + "name": "segment", + "description": "test-0", + "input": { + "request": { + "body": [ + { + "date": "2020-07-10T07:43:07.766Z", + "type": "s", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true + }, + { + "date": "2020-07-10T07:43:09.620Z", + "type": "seacft", + "description": "", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "okhttp 2.7.5 / Other 0.0.0", + "details": { + "code": "*************Xst" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": false + }, + { + "date": "2020-07-10T07:43:07.766Z", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true + }, + { + "type": "s", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true + } + ], + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "date": "2020-07-10T07:43:07.766Z", + "type": "s", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "date": "2020-07-10T07:43:09.620Z", + "type": "seacft", + "description": "", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "okhttp 2.7.5 / Other 0.0.0", + "details": { + "code": "*************Xst" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": false, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "date": "2020-07-10T07:43:07.766Z", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + }, + { + "type": "s", + "connection_id": "", + "client_id": "********************************", + "client_name": "My App", + "ip": "47.15.6.58", + "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", + "details": { + "prompts": [], + "completedAt": 1594366987765, + "elapsedTime": null, + "session_id": "**************_***************" + }, + "hostname": "************.us.auth0.com", + "user_id": "auth0|************************", + "user_name": "example@test.com", + "auth0_client": { + "name": "Auth0.Android", + "env": { + "android": "28" + }, + "version": "1.23.0" + }, + "log_id": "********************************************************", + "_id": "********************************************************", + "isMobile": true, + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30", + "messageId": "00000000-0000-0000-0000-000000000000" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/carts_create.json b/go/webhook/testcases/testdata/testcases/shopify/carts_create.json deleted file mode 100644 index 6c37baa443..0000000000 --- a/go/webhook/testcases/testdata/testcases/shopify/carts_create.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "shopify", - "description": "Track Call -> carts_create ", - "input": { - "request": { - "query": "topic=carts_create" - } - }, - "output": { - "response": { - "status": 200, - "contentType": "text/plain", - "body": "OK" - } - } -} diff --git a/go/webhook/testcases/testdata/testcases/shopify/identify_call.json b/go/webhook/testcases/testdata/testcases/shopify/identify_call_for_customers_create_event.json similarity index 95% rename from go/webhook/testcases/testdata/testcases/shopify/identify_call.json rename to go/webhook/testcases/testdata/testcases/shopify/identify_call_for_customers_create_event.json index 90c741862a..821748094e 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/identify_call.json +++ b/go/webhook/testcases/testdata/testcases/shopify/identify_call_for_customers_create_event.json @@ -3,8 +3,12 @@ "description": "Identify Call for customers create event", "input": { "request": { - "query": "topic=customers_create&signature=rudderstack", "body": { + "query_parameters": { + "topic": ["customers_create"], + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] + }, "id": 5747017285820, "email": "anuraj@rudderstack.com", "accepts_marketing": false, @@ -74,6 +78,9 @@ "country_name": "India", "default": true } + }, + "headers": { + "Content-Type": "application/json" } } }, @@ -166,9 +173,9 @@ "timestamp": "2021-12-29T09:45:20.000Z", "receivedAt": "2024-03-03T04:48:29.000Z", "request_ip": "192.0.2.30", - "rudderId": "56ad0483-e7e8-438d-958f-676fcbf3ed49", "messageId": "00000000-0000-0000-0000-000000000000" } - ] + ], + "errQueue": [] } } diff --git a/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json index f4048a0783..5e176d4e5b 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json +++ b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json @@ -3,20 +3,28 @@ "description": "Invalid topic", "input": { "request": { - "query": "signature=rudderstack" + "body": { + "query_parameters": { + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] + } + }, + "headers": { + "Content-Type": "application/json" + } } }, "output": { "response": { "status": 400, - "contentType": "text/plain", - "body": "Invalid topic in query_parameters\n" + "body": "Invalid topic in query_parameters" }, - "err_queue": [ + "queue": [], + "errQueue": [ { "query_parameters": { - "writeKey": ["{{.WriteKey}}"], - "signature": ["rudderstack"] + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] } } ] diff --git a/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json b/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json new file mode 100644 index 0000000000..6466693059 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json @@ -0,0 +1,21 @@ +{ + "name": "shopify", + "description": "No Query Parameters", + "input": { + "request": { + "body": {}, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Query_parameters is missing" + }, + "queue": [], + "errQueue": [{}] + }, + "skip": "not possible" +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json b/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json deleted file mode 100644 index c9eda9924f..0000000000 --- a/go/webhook/testcases/testdata/testcases/shopify/no_query_params.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "shopify", - "description": "No Query Parameters", - "input": {}, - "output": { - "response": { - "status": 400, - "contentType": "text/plain", - "body": "Invalid topic in query_parameters\n" - }, - "err_queue": [ - { - "query_parameters": { - "writeKey": ["{{.WriteKey}}"] - } - } - ] - } -} diff --git a/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json b/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json new file mode 100644 index 0000000000..bd0e37ab98 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json @@ -0,0 +1,35 @@ +{ + "name": "shopify", + "description": "Topic Not found", + "input": { + "request": { + "body": { + "query_parameters": { + "topic": [], + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] + } + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 400, + "body": "Topic not found" + }, + "queue": [], + "errQueue": [ + { + "query_parameters": { + "topic": [], + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] + } + } + ] + }, + "skip": "not possible" +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/track_call____carts_create_.json b/go/webhook/testcases/testdata/testcases/shopify/track_call____carts_create_.json new file mode 100644 index 0000000000..4c7237db1b --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/shopify/track_call____carts_create_.json @@ -0,0 +1,30 @@ +{ + "name": "shopify", + "description": "Track Call -> carts_create ", + "input": { + "request": { + "body": { + "id": "shopify_test3", + "query_parameters": { + "topic": ["carts_create"] + }, + "token": "shopify_test3", + "line_items": [], + "note": null, + "updated_at": "2023-02-10T12:16:07.251Z", + "created_at": "2023-02-10T12:05:04.402Z" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json b/go/webhook/testcases/testdata/testcases/shopify/track_call____fullfillments_updated_event.json similarity index 96% rename from go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json rename to go/webhook/testcases/testdata/testcases/shopify/track_call____fullfillments_updated_event.json index a7d9717c3d..81fb98322e 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/fullfillments_updated_event.json +++ b/go/webhook/testcases/testdata/testcases/shopify/track_call____fullfillments_updated_event.json @@ -1,10 +1,14 @@ { "name": "shopify", - "description": "Fulfillment updated event", + "description": "Track Call -> Fullfillments updated event", "input": { "request": { - "query": "signature=rudderstack&topic=fulfillments_update", "body": { + "query_parameters": { + "topic": ["fulfillments_update"], + "writeKey": ["sample-write-key"], + "signature": ["rudderstack"] + }, "shipping_address": { "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" }, @@ -108,13 +112,15 @@ "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" ], "updated_at": "2022-01-05T18:16:48+05:30" + }, + "headers": { + "Content-Type": "application/json" } } }, "output": { "response": { "status": 200, - "contentType": "text/plain", "body": "OK" }, "queue": [ @@ -243,9 +249,9 @@ }, "receivedAt": "2024-03-03T04:48:29.000Z", "request_ip": "192.0.2.30", - "rudderId": "f4ff065d-11d0-4411-b6be-1d0540687f04", "messageId": "00000000-0000-0000-0000-000000000000" } - ] + ], + "errQueue": [] } } diff --git a/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json b/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json index 2a6f6c6642..37ec9c03dc 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json +++ b/go/webhook/testcases/testdata/testcases/shopify/unsupported_checkout_event.json @@ -3,8 +3,12 @@ "description": "Unsupported checkout event", "input": { "request": { - "query": "signature=rudderstack&topic=checkout_delete", "body": { + "query_parameters": { + "topic": ["checkout_delete"], + "writeKey": ["sample-write-key"], + "signature": ["rudderstack"] + }, "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", "created_at": "2022-01-05T18:13:02+05:30", "destination": null, @@ -37,14 +41,18 @@ "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" ], "updated_at": "2022-01-05T18:16:48+05:30" + }, + "headers": { + "Content-Type": "application/json" } } }, "output": { "response": { "status": 200, - "contentType": "text/plain", "body": "OK" - } + }, + "queue": [], + "errQueue": [] } } diff --git a/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json b/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json index 26c08e9c4f..c2dfe7f584 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json +++ b/go/webhook/testcases/testdata/testcases/shopify/unsupported_event_type.json @@ -1,16 +1,26 @@ { "name": "shopify", - "description": "Unsupported event type", + "description": "Unsupported Event Type", "input": { "request": { - "query": "signature=rudderstack&topic=random_event" + "body": { + "query_parameters": { + "topic": ["random_event"], + "signature": ["rudderstack"], + "writeKey": ["sample-write-key"] + } + }, + "headers": { + "Content-Type": "application/json" + } } }, "output": { "response": { "status": 200, - "contentType": "text/plain", "body": "OK" - } + }, + "queue": [], + "errQueue": [] } } diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_0.json b/go/webhook/testcases/testdata/testcases/signl4/test_0.json new file mode 100644 index 0000000000..aedf7026d3 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_0.json @@ -0,0 +1,63 @@ +{ + "name": "signl4", + "description": "test-0", + "input": { + "request": { + "body": { + "eventType": 200, + "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", + "subscription": { + "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" + }, + "alert": { + "statusCode": 1, + "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "externalEventId": "INC091210", + "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", + "originalTimestamp": "2017-09-01T08:11:37.000Z", + "event": "New Alert Created", + "properties": { + "eventType": 200, + "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", + "alert.statusCode": 1, + "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "alert.externalEventId": "INC091210", + "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_1.json b/go/webhook/testcases/testdata/testcases/signl4/test_1.json new file mode 100644 index 0000000000..5959deb4e1 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_1.json @@ -0,0 +1,80 @@ +{ + "name": "signl4", + "description": "test-1", + "input": { + "request": { + "body": { + "eventType": 201, + "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", + "subscription": { + "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" + }, + "user": { + "username": "Rene", + "mailaddress": "rene@signl4.com", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + }, + "alert": { + "statusCode": 2, + "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "acknowledgedUserIds": ["f0bd5063-9588-51cf-b3d9-94e5647dedc5"], + "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + }, + "externalId": [ + { + "type": "signl4UserId", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + } + ], + "traits": { + "email": "rene@signl4.com", + "name": "Rene" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", + "originalTimestamp": "2017-09-01T08:11:37.000Z", + "event": "Alert Confirmed", + "properties": { + "eventType": 201, + "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", + "alert.statusCode": 2, + "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "alert.acknowledgedUserIds[0]": "f0bd5063-9588-51cf-b3d9-94e5647dedc5", + "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_2.json b/go/webhook/testcases/testdata/testcases/signl4/test_2.json new file mode 100644 index 0000000000..ac16f256e7 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_2.json @@ -0,0 +1,80 @@ +{ + "name": "signl4", + "description": "test-2", + "input": { + "request": { + "body": { + "eventType": 201, + "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", + "subscription": { + "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" + }, + "user": { + "username": "Rene", + "mailaddress": "rene@signl4.com", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + }, + "alert": { + "statusCode": 4, + "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "acknowledgedUserIds": ["f0bd5063-9588-51cf-b3d9-94e5647dedc5"], + "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + }, + "externalId": [ + { + "type": "signl4UserId", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + } + ], + "traits": { + "email": "rene@signl4.com", + "name": "Rene" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", + "originalTimestamp": "2017-09-01T08:11:37.000Z", + "event": "Alert Resolved", + "properties": { + "eventType": 201, + "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", + "alert.statusCode": 4, + "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "alert.acknowledgedUserIds[0]": "f0bd5063-9588-51cf-b3d9-94e5647dedc5", + "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_3.json b/go/webhook/testcases/testdata/testcases/signl4/test_3.json new file mode 100644 index 0000000000..e77d3ecf67 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_3.json @@ -0,0 +1,69 @@ +{ + "name": "signl4", + "description": "test-3", + "input": { + "request": { + "body": { + "eventType": 202, + "eventRaisedUtc": "2020-01-10T12:27:19Z", + "subscription": { + "id": "b8fdd850-e2ad-45ff-924d-9c332a063200" + }, + "team": { + "id": "0e8979f7-0c6a-472d-8918-ecfd339252f8" + }, + "alert": { + "statusCode": 1, + "eventId": "2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9", + "externalEventId": "INC091210", + "acknowledgedUserIds": [], + "id": "2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2" + }, + "id": "27283793-47c8-4da2-9767-d37be224338d" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "27283793-47c8-4da2-9767-d37be224338d", + "originalTimestamp": "2020-01-10T12:27:19.000Z", + "event": "Alert Escalated", + "properties": { + "eventType": 202, + "subscription.id": "b8fdd850-e2ad-45ff-924d-9c332a063200", + "team.id": "0e8979f7-0c6a-472d-8918-ecfd339252f8", + "alert.statusCode": 1, + "alert.eventId": "2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9", + "alert.externalEventId": "INC091210", + "alert.id": "2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2", + "alert.acknowledgedUserIds": [] + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_4.json b/go/webhook/testcases/testdata/testcases/signl4/test_4.json new file mode 100644 index 0000000000..47cde8a6e6 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_4.json @@ -0,0 +1,84 @@ +{ + "name": "signl4", + "description": "test-4", + "input": { + "request": { + "body": { + "eventType": 203, + "eventRaisedUtc": "2018-04-17T15:00:32Z", + "subscription": { + "id": "1578ebd9-0a27-44ab-bc8e-52cd7d32e81d" + }, + "user": { + "username": "Rene", + "mailaddress": "rene@signl4.com", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + }, + "alert": { + "statusCode": 0, + "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "id": "2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2" + }, + "annotation": { + "message": "OK, I'll take care about it.", + "id": "2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761" + }, + "id": "141c0f88-7831-4d5e-b055-f6e83c269770" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + }, + "externalId": [ + { + "type": "signl4UserId", + "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" + } + ], + "traits": { + "email": "rene@signl4.com", + "name": "Rene" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "141c0f88-7831-4d5e-b055-f6e83c269770", + "originalTimestamp": "2018-04-17T15:00:32.000Z", + "event": "Alert Annotated", + "properties": { + "eventType": 203, + "subscription.id": "1578ebd9-0a27-44ab-bc8e-52cd7d32e81d", + "alert.statusCode": 0, + "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", + "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", + "alert.id": "2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2", + "annotation.message": "OK, I'll take care about it.", + "annotation.id": "2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_5.json b/go/webhook/testcases/testdata/testcases/signl4/test_5.json new file mode 100644 index 0000000000..af7bbd19b1 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_5.json @@ -0,0 +1,53 @@ +{ + "name": "signl4", + "description": "test-5", + "input": { + "request": { + "body": { + "eventType": 300, + "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", + "team": { + "id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", + "originalTimestamp": "2017-09-01T09:16:17.000Z", + "event": "Duty Period Started", + "properties": { + "eventType": 300, + "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_6.json b/go/webhook/testcases/testdata/testcases/signl4/test_6.json new file mode 100644 index 0000000000..21bf9c94e4 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_6.json @@ -0,0 +1,53 @@ +{ + "name": "signl4", + "description": "test-6", + "input": { + "request": { + "body": { + "eventType": 301, + "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", + "team": { + "id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + } + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", + "originalTimestamp": "2017-09-01T09:16:17.000Z", + "event": "Duty Period Ended", + "properties": { + "eventType": 301, + "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_7.json b/go/webhook/testcases/testdata/testcases/signl4/test_7.json new file mode 100644 index 0000000000..942da4b48e --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_7.json @@ -0,0 +1,62 @@ +{ + "name": "signl4", + "description": "test-7", + "input": { + "request": { + "body": { + "eventType": 302, + "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", + "team": { + "id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "user": { + "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" + }, + "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + }, + "externalId": [ + { + "type": "signl4UserId", + "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" + } + ] + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", + "originalTimestamp": "2017-09-01T09:16:17.000Z", + "event": "Somebody Punched-In", + "properties": { + "eventType": 302, + "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/signl4/test_8.json b/go/webhook/testcases/testdata/testcases/signl4/test_8.json new file mode 100644 index 0000000000..a746a28862 --- /dev/null +++ b/go/webhook/testcases/testdata/testcases/signl4/test_8.json @@ -0,0 +1,62 @@ +{ + "name": "signl4", + "description": "test-8", + "input": { + "request": { + "body": { + "eventType": 303, + "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", + "team": { + "id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "user": { + "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" + }, + "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" + }, + "headers": { + "Content-Type": "application/json" + } + } + }, + "output": { + "response": { + "status": 200, + "body": "OK" + }, + "queue": [ + { + "context": { + "library": { + "name": "unknown", + "version": "unknown" + }, + "integration": { + "name": "Signl4" + }, + "externalId": [ + { + "type": "signl4UserId", + "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" + } + ] + }, + "integrations": { + "Signl4": false + }, + "type": "track", + "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", + "originalTimestamp": "2017-09-01T09:16:17.000Z", + "event": "Somebody Punched-Out", + "properties": { + "eventType": 303, + "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" + }, + "anonymousId": "97fcd7b2-cc24-47d7-b776-057b7b199513", + "receivedAt": "2024-03-03T04:48:29.000Z", + "request_ip": "192.0.2.30" + } + ], + "errQueue": [] + } +} diff --git a/go/webhook/testcases/testdata/testcases/slack/msg_event.json b/go/webhook/testcases/testdata/testcases/slack/msg_event.json deleted file mode 100644 index 9ca194858c..0000000000 --- a/go/webhook/testcases/testdata/testcases/slack/msg_event.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "name": "slack", - "description": "Message event", - "module": "source", - "version": "v0", - "input": { - "request": { - "body": { - "event": { - "user": "U04G7H550", - "type": "message", - "ts": "1709441309.308399", - "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", - "text": "What is the pricing of product X", - "team": "T0GFJL5J7", - "thread_ts": "1709407304.839329", - "parent_user_id": "U06P6LQTPV", - "blocks": [ - { - "type": "rich_text", - "block_id": "xGKJl", - "elements": [ - { - "type": "rich_text_section", - "elements": [ - { - "type": "text", - "text": "What is the pricing of product X" - }, - { - "type": "channel", - "channel_id": "C03CDQTPI65" - }, - { - "type": "text", - "text": " to do this" - } - ] - } - ] - } - ], - "channel": "C03CDQTPI65", - "event_ts": "1709441309.308399", - "channel_type": "channel" - }, - "type": "event_callback", - "event_id": "EvY5JTJ0NG5", - "event_time": 1709441309, - "token": "REm2987dqtpi72Lq", - "team_id": "T0GFJL5J7", - "context_team_id": "T01gqtPIL5J7", - "context_enterprise_id": null, - "api_app_id": "A04QTPIHRR", - "authorizations": [ - { - "enterprise_id": null, - "team_id": "T0GFJL5J7", - "user_id": "W012CDE", - "is_bot": true, - "is_enterprise_install": false - } - ], - "is_ext_shared_channel": false, - "event_context": "4-wd6joiQfdgTRQTpIzdfifQ" - }, - "method": "POST", - "headers": { - "Content-Type": "application/json" - } - }, - "pathSuffix": "" - }, - "output": { - "response": { - "status": 200, - "body": "OK" - }, - "queue": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "SLACK" - }, - "externalId": [ - { - "type": "slackUserId", - "id": "U04G7H550" - } - ] - }, - "integrations": { - "SLACK": false - }, - "type": "track", - "event": "Message", - "anonymousId": "7509c04f547b05afb6838aa742f4910263d6", - "originalTimestamp": "2024-03-03T04:48:29.308Z", - "sentAt": "2024-03-03T04:48:29.000Z", - "properties": { - "user": "U04G7H550", - "type": "message", - "ts": "1709441309.308399", - "client_msg_id": "834r664e-ec75-445d-t5c6-b873a07y9c81", - "text": "What is the pricing of product X", - "team": "T0GFJL5J7", - "thread_ts": "1709407304.839329", - "parent_user_id": "U06P6LQTPV", - "blocks": [ - { - "type": "rich_text", - "block_id": "xGKJl", - "elements": [ - { - "type": "rich_text_section", - "elements": [ - { - "type": "text", - "text": "What is the pricing of product X" - }, - { - "type": "channel", - "channel_id": "C03CDQTPI65" - }, - { - "type": "text", - "text": " to do this" - } - ] - } - ] - } - ], - "channel": "C03CDQTPI65", - "event_ts": "1709441309.308399", - "channel_type": "channel" - }, - "request_ip": "192.0.2.30", - "receivedAt": "2024-03-03T04:48:29.000Z", - "rudderId": "5540ba39-3df8-4970-8b50-b329182c9bd5", - "messageId": "00000000-0000-0000-0000-000000000000" - } - ] - } -} diff --git a/go/webhook/testcases/testdata/testcases/slack/team_joined.json b/go/webhook/testcases/testdata/testcases/slack/team_joined.json deleted file mode 100644 index 114872a76a..0000000000 --- a/go/webhook/testcases/testdata/testcases/slack/team_joined.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "slack", - "description": "Team joined event", - "module": "source", - "version": "v0", - "input": { - "request": { - "body": { - "event": { - "type": "team_join", - "user": { - "id": "W012CDE", - "name": "johnd", - "real_name": "John Doe" - } - }, - "type": "event_callback", - "event_id": "Ev06TJ0NG5", - "event_time": 1709441309, - "token": "REm276ggfh72Lq", - "team_id": "T0GFJL5J7", - "context_team_id": "T0GFJL5J7", - "context_enterprise_id": null, - "api_app_id": "B02SJMHRR", - "authorizations": [ - { - "enterprise_id": null, - "team_id": "T0GFJL5J7", - "user_id": "U04G7H550", - "is_bot": true, - "is_enterprise_install": false - } - ], - "is_ext_shared_channel": false, - "event_context": "eJldCI65436EUEpMSFhgfhg76joiQzAxRTRQTEIxMzUifQ" - }, - "method": "POST", - "headers": { - "Content-Type": "application/json" - } - }, - "pathSuffix": "" - }, - "output": { - "response": { - "status": 200, - "body": "OK" - }, - "queue": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "SLACK" - }, - "externalId": [ - { - "type": "slackUserId", - "id": "W012CDE" - } - ] - }, - "integrations": { - "SLACK": false - }, - "type": "identify", - "event": "Team Join", - "anonymousId": "2bc5ae2825a712d3d154cbdacb86ac16c278", - "originalTimestamp": "2024-03-03T04:48:29.000Z", - "sentAt": "2024-03-03T04:48:29.000Z", - "properties": { - "type": "team_join", - "user": { - "id": "W012CDE", - "name": "johnd", - "real_name": "John Doe" - } - }, - "request_ip": "192.0.2.30", - "receivedAt": "2024-03-03T04:48:29.000Z", - "rudderId": "669b7c62-3e8b-475c-8f0a-356b2a9518e2", - "messageId": "00000000-0000-0000-0000-000000000000" - } - ] - } -} diff --git a/go/webhook/testcases/testdata/testcases/slack/verification.json b/go/webhook/testcases/testdata/testcases/slack/verification.json deleted file mode 100644 index 94e072dd8f..0000000000 --- a/go/webhook/testcases/testdata/testcases/slack/verification.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "slack", - "description": "Webhook url verification event", - "module": "source", - "version": "v0", - "input": { - "request": { - "body": { - "token": "Jhj5dZrVaK7ZwHHjRyZWjbDl", - "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ", - "type": "url_verification" - }, - "method": "POST", - "headers": { - "Content-Type": "application/json" - } - }, - "pathSuffix": "" - }, - "output": { - "response": { - "status": 200, - "contentType": "application/json", - "body": { - "challenge": "3eZbrw1aB10FEMAGAZd4FyFQ" - } - }, - "queue": [], - "proc_err": [] - } -} diff --git a/src/v0/destinations/af/deleteUsers.js b/src/v0/destinations/af/deleteUsers.js index ab515642aa..e0da3699ed 100644 --- a/src/v0/destinations/af/deleteUsers.js +++ b/src/v0/destinations/af/deleteUsers.js @@ -10,7 +10,7 @@ const { processAxiosResponse, getDynamicErrorType, } = require('../../../adapters/utils/networkUtils'); -const { generateUUID, isHttpStatusSuccess } = require('../../util'); +const utils = require('../../util'); const tags = require('../../util/tags'); const { executeCommonValidations } = require('../../util/regulation-api'); @@ -23,7 +23,7 @@ const { executeCommonValidations } = require('../../util/regulation-api'); * @returns */ const deleteUser = async (config, endpoint, body, identityType, identityValue) => { - body.subject_request_id = generateUUID(); + body.subject_request_id = utils.generateUUID(); body.submitted_time = new Date().toISOString(); body.subject_identities[0].identity_type = identityType; body.subject_identities[0].identity_value = identityValue; @@ -44,7 +44,7 @@ const deleteUser = async (config, endpoint, body, identityType, identityValue) = }, ); const handledDelResponse = processAxiosResponse(response); - if (!isHttpStatusSuccess(handledDelResponse.status)) { + if (!utils.isHttpStatusSuccess(handledDelResponse.status)) { throw new NetworkError( 'User deletion request failed', handledDelResponse.status, diff --git a/src/v0/sources/appcenter/transform.js b/src/v0/sources/appcenter/transform.js index 40399d92e2..35d15f697e 100644 --- a/src/v0/sources/appcenter/transform.js +++ b/src/v0/sources/appcenter/transform.js @@ -1,7 +1,7 @@ const path = require('path'); const fs = require('fs'); const { TransformationError } = require('@rudderstack/integrations-lib'); -const { generateUUID } = require('../../util'); +const utils = require('../../util'); const Message = require('../message'); const mappingJson = JSON.parse(fs.readFileSync(path.resolve(__dirname, './mapping.json'), 'utf-8')); @@ -37,7 +37,7 @@ const processNormalEvent = (event) => { message.setPropertiesV2(event, mappingJson); // app center does not has the concept of user but we need to set some random anonymousId in order to make the server accept the message - message.anonymousId = generateUUID(); + message.anonymousId = utils.generateUUID(); return message; }; diff --git a/test/__tests__/appcenter_source.test.js b/test/__tests__/appcenter_source.test.js deleted file mode 100644 index a3745f881e..0000000000 --- a/test/__tests__/appcenter_source.test.js +++ /dev/null @@ -1,33 +0,0 @@ -const integration = "appcenter"; -const name = "Appcenter"; - -const fs = require("fs"); -const path = require("path"); -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -/* Source Code has randomm ID generation logic. - For Some of the test cases deleting this random ID won't work as it getting hashed -*/ - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { -// try { - const output = await transformer.process(input); -// expect(output).toEqual(expectedData[index]); -// } catch (error) { -// expect(error.message).toEqual(expectedData[index].message); -// } - }); -}); diff --git a/test/__tests__/appsflyer_source.test.js b/test/__tests__/appsflyer_source.test.js deleted file mode 100644 index de9c6d61e3..0000000000 --- a/test/__tests__/appsflyer_source.test.js +++ /dev/null @@ -1,31 +0,0 @@ -const integration = "appsflyer"; -const name = "Appsflyer"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - delete output.anonymousId; - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/canny_source.test.js b/test/__tests__/canny_source.test.js deleted file mode 100644 index efd664ab4b..0000000000 --- a/test/__tests__/canny_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "canny"; -const name = "Canny"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/customerio_source.test.js b/test/__tests__/customerio_source.test.js deleted file mode 100644 index d753c8cef7..0000000000 --- a/test/__tests__/customerio_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "customerio"; -const name = "CustomerIO"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/data/appcenter_source_input.json b/test/__tests__/data/appcenter_source_input.json deleted file mode 100644 index 1cde0666b1..0000000000 --- a/test/__tests__/data/appcenter_source_input.json +++ /dev/null @@ -1,78 +0,0 @@ -[ - { - "text": "Hello from your abc-test app in App Center!", - "sent_at": "2023-01-02T07: 53: 28.3117824Z", - "url": "https://appcenter.ms/users/abc-rudderstack.com/apps/abc-test" - }, - { - "app_name": "MSAppCenterTesting", - "branch": "master", - "build_status": "Succeeded", - "build_id": "1", - "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1", - "build_reason": "manual", - "finish_time": "2021-03-02T16:41:29.891411Z", - "icon_link": null, - "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", - "os": "Android", - "start_time": "2021-03-02T16:34:13.9184874Z", - "source_version": "7ed5c7b279316f19e9a0c45bb0fb49c0655471af", - "sent_at": "2021-03-02T16:41:55.8819564Z" - }, - { - "app_name": "MSAppCenterTesting", - "branch": "master", - "build_status": "Broken", - "build_id": "2", - "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2", - "build_reason": "automatic", - "finish_time": "2021-03-02T16:52:04.2587506Z", - "icon_link": null, - "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", - "os": "Android", - "start_time": "2021-03-02T16:50:52.2584107Z", - "source_version": "0624e1e3e48eaf2371c37316208ff83bdd5c123b", - "sent_at": "2021-03-02T16:52:35.8848052Z" - }, - { - "app_name": "MSAppCenterTesting", - "app_display_name": "MSAppCenterTesting", - "release_id": "1", - "platform": "Android", - "uploaded_at": "2021-03-02T17:49:35.463Z", - "fingerprint": "9cbdc86d96c5359d2af3972fdda46624", - "release_notes": "Degraded to 4.0.0", - "version": "1614707021", - "short_version": "1.0", - "min_os": "7.1", - "mandatory_update": true, - "size": 2919106, - "provisioning_profile_name": null, - "provisioning_profile_type": null, - "bundle_identifier": "tech.desusai.msappcentertesting", - "install_link": "https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email", - "icon_link": "https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r", - "distribution_group_id": "00000000-0000-0000-0000-000000000000", - "installable": true, - "sent_at": "2021-03-02T17:49:37.127635Z", - "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" - }, - { - "id": "1139624368u", - "name": "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)", - "reason": "java.lang.ArithmeticException: divide by zero", - "file_name": null, - "line_number": null, - "url": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u", - "app_display_name": "MSAppCenterTesting", - "app_platform": "Java", - "app_version": "1.0(1)", - "stack_trace": [ - "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);" - ], - "affected_users": 0, - "crash_count": 0, - "sent_at": "2021-03-02T18:14:33.9713246Z", - "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" - } -] diff --git a/test/__tests__/data/appcenter_source_output.json b/test/__tests__/data/appcenter_source_output.json deleted file mode 100644 index 82b5eb899f..0000000000 --- a/test/__tests__/data/appcenter_source_output.json +++ /dev/null @@ -1,198 +0,0 @@ -[ - { - "outputToSource": { - "body": "eyJ0ZXh0IjoiSGVsbG8gZnJvbSB5b3VyIEFuYW50LXRlc3QgYXBwIGluIEFwcCBDZW50ZXIhIiwic2VudF9hdCI6IjIwMjMtMDEtMDJUMDc6IDUzOiAyOC4zMTE3ODI0WiIsInVybCI6Imh0dHBzOiAvL2FwcGNlbnRlci5tcy91c2Vycy9hbmFudC1ydWRkZXJzdGFjay5jb20vYXBwcy9BbmFudC10ZXN0In0=", - "contentType": "application/json" - }, - "statusCode": 200 - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "APPCENTER" - }, - "app": { - "name": "MSAppCenterTesting", - "build": "1" - }, - "device": { - "type": "Android" - }, - "network": { - "carrier": "Android" - }, - "os": { - "name": "Android" - } - }, - "integrations": { - "APPCENTER": false - }, - "properties": { - "app_name": "MSAppCenterTesting", - "branch": "master", - "build_status": "Succeeded", - "build_id": "1", - "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1", - "build_reason": "manual", - "finish_time": "2021-03-02T16:41:29.891411Z", - "icon_link": null, - "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", - "os": "Android", - "start_time": "2021-03-02T16:34:13.9184874Z", - "source_version": "7ed5c7b279316f19e9a0c45bb0fb49c0655471af", - "sent_at": "2021-03-02T16:41:55.8819564Z" - }, - "type": "track", - "event": "Build Succeeded", - "originalTimeStamp": "2021-03-02T16:34:13.9184874Z", - "anonymousId": "7e32188a4dab669f", - "sentAt": "2021-03-02T16:41:55.8819564Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "APPCENTER" - }, - "app": { - "name": "MSAppCenterTesting", - "build": "2" - }, - "device": { - "type": "Android" - }, - "network": { - "carrier": "Android" - }, - "os": { - "name": "Android" - } - }, - "integrations": { - "APPCENTER": false - }, - "properties": { - "app_name": "MSAppCenterTesting", - "branch": "master", - "build_status": "Broken", - "build_id": "2", - "build_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2", - "build_reason": "automatic", - "finish_time": "2021-03-02T16:52:04.2587506Z", - "icon_link": null, - "notification_settings_link": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications", - "os": "Android", - "start_time": "2021-03-02T16:50:52.2584107Z", - "source_version": "0624e1e3e48eaf2371c37316208ff83bdd5c123b", - "sent_at": "2021-03-02T16:52:35.8848052Z" - }, - "type": "track", - "event": "Build Failed", - "originalTimeStamp": "2021-03-02T16:50:52.2584107Z", - "anonymousId": "7e32188a4dab669f", - "sentAt": "2021-03-02T16:52:35.8848052Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "APPCENTER" - }, - "app": { - "name": "MSAppCenterTesting", - "version": "1.0", - "namespace": "tech.desusai.msappcentertesting" - }, - "device": { - "type": "Android" - }, - "network": { - "carrier": "Android" - }, - "os": { - "name": "Android" - } - }, - "integrations": { - "APPCENTER": false - }, - "properties": { - "app_name": "MSAppCenterTesting", - "app_display_name": "MSAppCenterTesting", - "release_id": "1", - "platform": "Android", - "uploaded_at": "2021-03-02T17:49:35.463Z", - "fingerprint": "9cbdc86d96c5359d2af3972fdda46624", - "release_notes": "Degraded to 4.0.0", - "version": "1614707021", - "short_version": "1.0", - "min_os": "7.1", - "mandatory_update": true, - "size": 2919106, - "provisioning_profile_name": null, - "provisioning_profile_type": null, - "bundle_identifier": "tech.desusai.msappcentertesting", - "install_link": "https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email", - "icon_link": "https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r", - "distribution_group_id": "00000000-0000-0000-0000-000000000000", - "installable": true, - "sent_at": "2021-03-02T17:49:37.127635Z", - "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" - }, - "type": "track", - "event": "Released Version 1.0", - "anonymousId": "7e32188a4dab669f", - "sentAt": "2021-03-02T17:49:37.127635Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "APPCENTER" - }, - "app": { - "name": "MSAppCenterTesting", - "version": "1.0(1)" - } - }, - "integrations": { - "APPCENTER": false - }, - "properties": { - "id": "1139624368u", - "name": "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)", - "reason": "java.lang.ArithmeticException: divide by zero", - "file_name": null, - "line_number": null, - "url": "https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u", - "app_display_name": "MSAppCenterTesting", - "app_platform": "Java", - "app_version": "1.0(1)", - "stack_trace": [ - "tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);" - ], - "affected_users": 0, - "crash_count": 0, - "sent_at": "2021-03-02T18:14:33.9713246Z", - "app_id": "ce8b5280-4605-4c1c-8c48-bd54c8fdda31" - }, - "type": "track", - "event": "App Crashed", - "anonymousId": "7e32188a4dab669f", - "sentAt": "2021-03-02T18:14:33.9713246Z" - } -] diff --git a/test/__tests__/data/appsflyer_source_input.json b/test/__tests__/data/appsflyer_source_input.json deleted file mode 100644 index 694281924d..0000000000 --- a/test/__tests__/data/appsflyer_source_input.json +++ /dev/null @@ -1,908 +0,0 @@ -[ - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "device_type": "iPhoneXR", - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "ios", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "device_type": "Nokia 5.3", - "idfa": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "android", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "device_type": "iPhoneXR", - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "ios", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "device_type": "iPhoneXR", - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "ios", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "ios", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "watchos", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "ipados", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "customer_user_id": "hi.from@appsflyer.example.com", - "is_lat": null, - "contributor_2_af_prt": null, - "bundle_id": "com.appsflyer.AppsFlyer", - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "app_version": "1.4.1", - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "city": "Khu Pho Binh Hoa", - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "app_name": "AppsFlyer", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "postal_code": "823941", - "wifi": true, - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "country_code": "VN", - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "appsflyer_id": "1547985076649-5309999", - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "ip": "1.1.1.1", - "oaid": null, - "event_time": "2020-01-15 14:57:24.898", - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "android_id": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "idfa": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "carrier": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "os_version": "12.3.1", - "platform": "tvos", - "af_sub3": null, - "contributor_3_match_type": null, - "selected_timezone": "UTC", - "af_ad_id": null, - "contributor_3_touch_time": null, - "user_agent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - } -] diff --git a/test/__tests__/data/appsflyer_source_output.json b/test/__tests__/data/appsflyer_source_output.json deleted file mode 100644 index 03eb49a8ae..0000000000 --- a/test/__tests__/data/appsflyer_source_output.json +++ /dev/null @@ -1,1092 +0,0 @@ -[ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "model": "iPhoneXR", - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "ios", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "ios", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "model": "Nokia 5.3", - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "android", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "android", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "statusCode": 400, - "message": "Unknwon event type from Appsflyer" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "model": "iPhoneXR", - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "ios", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "type": "track", - "event": "My Apps", - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "ios", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "ios", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "ios", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "watchos", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "watchos", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "ipados", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "ipados", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "AF" - }, - "ip": "1.1.1.1", - "timezone": "UTC", - "userAgent": "AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0", - "app": { - "namespace": "com.appsflyer.AppsFlyer", - "version": "1.4.1", - "name": "AppsFlyer" - }, - "device": { - "advertisingId": "A7071198-3848-40A5-B3D0-94578D9BZZZZ", - "adTrackingEnabled": true - }, - "network": { - "wifi": true - }, - "os": { - "name": "tvos", - "version": "12.3.1" - }, - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - }, - "userId": "hi.from@appsflyer.example.com" - }, - "externalId": [ - { - "type": "appsflyerExternalId", - "value": "1547985076649-5309999" - } - ] - }, - "integrations": { - "AF": false - }, - "properties": { - "idfv": "868049A3-4B2F-4A11-9B00-CFFC362XXXXX", - "device_category": "phone", - "af_sub1": null, - "is_lat": null, - "contributor_2_af_prt": null, - "gp_broadcast_referrer": "", - "contributor_2_touch_time": null, - "contributor_3_touch_type": null, - "event_source": "SDK", - "af_cost_value": null, - "contributor_1_match_type": null, - "contributor_3_af_prt": null, - "custom_data": null, - "contributor_2_touch_type": null, - "gp_install_begin": null, - "amazon_aid": null, - "gp_referrer": null, - "af_cost_model": null, - "af_c_id": null, - "attributed_touch_time_selected_timezone": null, - "selected_currency": "USD", - "install_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "install_time": "2019-01-20 04:51:16.000", - "operator": null, - "attributed_touch_type": null, - "af_attribution_lookback": null, - "campaign_type": null, - "keyword_match_type": null, - "af_adset_id": null, - "device_download_time_selected_timezone": "2019-01-20 04:51:16.000+0000", - "contributor_2_media_source": null, - "conversion_type": null, - "contributor_2_match_type": null, - "api_version": "2.0", - "attributed_touch_time": null, - "revenue_in_selected_currency": null, - "is_retargeting": false, - "gp_click_time": null, - "contributor_1_af_prt": null, - "match_type": null, - "dma": "None", - "http_referrer": null, - "af_sub5": null, - "af_prt": null, - "event_revenue_currency": "USD", - "store_reinstall": null, - "install_app_store": null, - "media_source": "organic", - "deeplink_url": null, - "campaign": null, - "af_keywords": null, - "region": "AS", - "cost_in_selected_currency": null, - "event_value": "{}", - "oaid": null, - "is_receipt_validated": null, - "contributor_1_campaign": null, - "af_sub4": null, - "imei": null, - "contributor_3_campaign": null, - "event_revenue_usd": null, - "af_sub2": null, - "original_url": null, - "contributor_2_campaign": null, - "contributor_3_media_source": null, - "af_adset": null, - "af_ad": null, - "state": "57", - "network_account_id": null, - "retargeting_conversion_type": null, - "af_channel": null, - "af_cost_currency": null, - "contributor_1_media_source": null, - "keyword_id": null, - "device_download_time": "2019-01-20 04:51:16.000", - "contributor_1_touch_type": null, - "af_reengagement_window": null, - "af_siteid": null, - "language": "en-US", - "app_id": "id1217828636", - "contributor_1_touch_time": null, - "event_revenue": null, - "af_ad_type": null, - "event_name": "My Apps", - "af_sub_siteid": null, - "advertising_id": null, - "af_sub3": null, - "contributor_3_match_type": null, - "af_ad_id": null, - "contributor_3_touch_time": null, - "is_primary_attribution": true, - "sdk_version": "v4.10.0", - "event_time_selected_timezone": "2020-01-15 14:57:24.898+0000" - }, - "type": "track", - "event": "My Apps", - "userId": "hi.from@appsflyer.example.com", - "timestamp": "2020-01-15 14:57:24.898", - "originalTimestamp": "2020-01-15 14:57:24.898", - "platform": "tvos", - "traits": { - "address": { - "city": "Khu Pho Binh Hoa", - "zip": "823941", - "country": "VN" - } - } - } -] diff --git a/test/__tests__/data/canny_source_input.json b/test/__tests__/data/canny_source_input.json deleted file mode 100644 index 5547473209..0000000000 --- a/test/__tests__/data/canny_source_input.json +++ /dev/null @@ -1,667 +0,0 @@ -[ - { - "created": "2022-07-28T10:52:46.294Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 13, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-28T10:52:46.172Z", - "customFields": [ - { - "id": "62e13820d7949d44b92d3876", - "name": "abc", - "value": "123" - } - ], - "details": "Array of images", - "eta": null, - "id": "62e26a7e1d4ea13c124337bd", - "imageURLs": [ - "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", - "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" - ], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Custom Fields Testing", - "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" - }, - "objectType": "post", - "type": "post.created" - }, - { - "created": "2022-07-26T10:35:16.390Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 10, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-26T08:18:52.459Z", - "deletedBy": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "details": "This is the post's details", - "eta": null, - "id": "62dfa36c9950e94655320fe7", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" - }, - "objectType": "post", - "type": "post.deleted" - }, - { - "created": "2022-07-26T18:32:28.337Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "category": null, - "commentCount": 0, - "created": "2022-07-26T10:43:43.752Z", - "details": "This is the post's details", - "eta": null, - "id": "62dfc55ffe7f6f465b9b4568", - "imageURLs": [], - "issue": { - "description": "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", - "id": "10001", - "key": "TES-2", - "status": "To Do", - "summary": "Canny Source Testing", - "url": "https://rudderstack-user.atlassian.net/browse/TES-2" - }, - "owner": null, - "score": 2, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-8" - }, - "objectType": "post", - "type": "post.jira_issue_linked" - }, - { - "created": "2022-07-27T04:08:24.377Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "category": null, - "commentCount": 0, - "created": "2022-07-26T11:32:31.228Z", - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "issue": { - "description": "Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2", - "id": "10002", - "key": "TES-3", - "status": "To Do", - "summary": "Images testing", - "url": "https://rudderstack-user.atlassian.net/browse/TES-3" - }, - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "objectType": "post", - "type": "post.jira_issue_unlinked" - }, - { - "created": "2022-07-26T18:07:03.143Z", - "object": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "changeComment": { - "imageURLs": ["https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp"], - "value": "" - }, - "changedAt": "2022-07-26T18:07:03.143Z", - "changer": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "commentCount": 1, - "created": "2022-07-26T08:22:31.089Z", - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "jira": { - "linkedIssues": [], - "linkedIssueIDs": [] - }, - "owner": null, - "score": 2, - "status": "planned", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "objectType": "post", - "type": "post.status_changed" - }, - { - "created": "2022-07-26T10:52:17.712Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 11, - "url": "https://rudder.canny.io/admin/board/features" - }, - "created": "2022-07-26T10:52:17.618Z", - "id": "62dfc761af6e2b467381b103", - "imageURLs": ["https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp"], - "internal": true, - "mentions": [], - "parentID": null, - "post": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 1, - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "owner": null, - "score": 2, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "private": false, - "value": "webhook-test" - }, - "objectType": "comment", - "type": "comment.created" - }, - { - "created": "2022-07-27T04:12:09.290Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "created": "2022-07-27T04:11:59.942Z", - "id": "62e0bb0faf6e2b467328b133", - "imageURLs": [], - "parentID": null, - "post": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "private": false, - "value": "good" - }, - "objectType": "comment", - "type": "comment.deleted" - }, - { - "created": "2022-07-26T11:32:31.378Z", - "object": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T11:32:31.263Z", - "id": "62dfd0cfb2870d468c9618f5", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "score": 1, - "voter": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - } - }, - "objectType": "vote", - "type": "vote.created" - }, - { - "created": "2022-07-26T18:09:27.358Z", - "object": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T08:22:31.109Z", - "id": "62dfa4479950e9465532a338", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 1, - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "planned", - "tags": [ - { - "id": "62e02db67ad24c46bc175f56", - "name": "abc-tag", - "postCount": 1, - "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" - } - ], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "score": 0, - "voter": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - } - }, - "objectType": "vote", - "type": "vote.deleted" - }, - { - "created": "2022-07-28T10:52:46.294Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": "sampleuserId" - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 13, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-28T10:52:46.172Z", - "customFields": [ - { - "id": "62e13820d7949d44b92d3876", - "name": "abc", - "value": "123" - } - ], - "details": "Array of images", - "eta": null, - "id": "62e26a7e1d4ea13c124337bd", - "imageURLs": [ - "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", - "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" - ], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Custom Fields Testing", - "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" - }, - "objectType": "post", - "type": "post.created" - }, - { - "created": "2022-07-26T11:32:31.378Z", - "object": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T11:32:31.263Z", - "id": "62dfd0cfb2870d468c9618f5", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "score": 1, - "voter": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": "123" - } - }, - "objectType": "vote", - "type": "vote.created" - }, - { - "created": "2022-07-26T18:09:27.358Z", - "object": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T08:22:31.109Z", - "id": "62dfa4479950e9465532a338", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 1, - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "planned", - "tags": [ - { - "id": "62e02db67ad24c46bc175f56", - "name": "abc-tag", - "postCount": 1, - "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" - } - ], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "score": 0, - "voter": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": null, - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - } - }, - "objectType": "vote", - "type": "vote.deleted" - }, - { - "created": "2022-07-26T10:35:16.390Z", - "object": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 10, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-26T08:18:52.459Z", - "deletedBy": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "details": "This is the post's details", - "eta": null, - "id": "62dfa36c9950e94655320fe7", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" - }, - "objectType": "post" - } -] diff --git a/test/__tests__/data/canny_source_output.json b/test/__tests__/data/canny_source_output.json deleted file mode 100644 index 67f919ba9b..0000000000 --- a/test/__tests__/data/canny_source_output.json +++ /dev/null @@ -1,789 +0,0 @@ -[ - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "post.created", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-28T10:52:46.294Z", - "originalTimestamp": "2022-07-28T10:52:46.294Z", - "type": "track", - "properties": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 13, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-28T10:52:46.172Z", - "customFields": [ - { - "id": "62e13820d7949d44b92d3876", - "name": "abc", - "value": "123" - } - ], - "details": "Array of images", - "eta": null, - "id": "62e26a7e1d4ea13c124337bd", - "imageURLs": [ - "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", - "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" - ], - "objectType": "post", - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Custom Fields Testing", - "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "post.deleted", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T10:35:16.390Z", - "originalTimestamp": "2022-07-26T10:35:16.390Z", - "type": "track", - "properties": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 10, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-26T08:18:52.459Z", - "deletedBy": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "details": "This is the post's details", - "eta": null, - "id": "62dfa36c9950e94655320fe7", - "imageURLs": [], - "objectType": "post", - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-4" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "post.jira_issue_linked", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T18:32:28.337Z", - "originalTimestamp": "2022-07-26T18:32:28.337Z", - "type": "track", - "properties": { - "by": null, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "category": null, - "commentCount": 0, - "created": "2022-07-26T10:43:43.752Z", - "details": "This is the post's details", - "eta": null, - "id": "62dfc55ffe7f6f465b9b4568", - "imageURLs": [], - "issue": { - "description": "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", - "id": "10001", - "key": "TES-2", - "status": "To Do", - "summary": "Canny Source Testing", - "url": "https://rudderstack-user.atlassian.net/browse/TES-2" - }, - "objectType": "post", - "owner": null, - "score": 2, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-8" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "post.jira_issue_unlinked", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-27T04:08:24.377Z", - "originalTimestamp": "2022-07-27T04:08:24.377Z", - "type": "track", - "properties": { - "objectType": "post", - "by": null, - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "category": null, - "commentCount": 0, - "created": "2022-07-26T11:32:31.228Z", - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "issue": { - "description": "Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2", - "id": "10002", - "key": "TES-3", - "status": "To Do", - "summary": "Images testing", - "url": "https://rudderstack-user.atlassian.net/browse/TES-3" - }, - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "post.status_changed", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T18:07:03.143Z", - "originalTimestamp": "2022-07-26T18:07:03.143Z", - "type": "track", - "properties": { - "objectType": "post", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "changeComment": { - "imageURLs": ["https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp"], - "value": "" - }, - "changedAt": "2022-07-26T18:07:03.143Z", - "changer": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "commentCount": 1, - "created": "2022-07-26T08:22:31.089Z", - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "jira": { - "linkedIssues": [], - "linkedIssueIDs": [] - }, - "owner": null, - "score": 2, - "status": "planned", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "comment.created", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T10:52:17.712Z", - "originalTimestamp": "2022-07-26T10:52:17.712Z", - "type": "track", - "properties": { - "objectType": "comment", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 11, - "url": "https://rudder.canny.io/admin/board/features" - }, - "created": "2022-07-26T10:52:17.618Z", - "id": "62dfc761af6e2b467381b103", - "imageURLs": ["https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp"], - "internal": true, - "mentions": [], - "parentID": null, - "post": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 1, - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "owner": null, - "score": 2, - "status": "open", - "tags": [], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "private": false, - "value": "webhook-test" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "comment.deleted", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-27T04:12:09.290Z", - "originalTimestamp": "2022-07-27T04:12:09.290Z", - "type": "track", - "properties": { - "objectType": "comment", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "created": "2022-07-27T04:11:59.942Z", - "id": "62e0bb0faf6e2b467328b133", - "imageURLs": [], - "parentID": null, - "post": { - "author": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "private": false, - "value": "good" - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "vote.created", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T11:32:31.378Z", - "originalTimestamp": "2022-07-26T11:32:31.378Z", - "type": "track", - "properties": { - "objectType": "vote", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T11:32:31.263Z", - "id": "62dfd0cfb2870d468c9618f5", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "score": 1 - } - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "event": "vote.deleted", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T18:09:27.358Z", - "originalTimestamp": "2022-07-26T18:09:27.358Z", - "type": "track", - "properties": { - "objectType": "vote", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T08:22:31.109Z", - "id": "62dfa4479950e9465532a338", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 1, - "details": "This is the post's details", - "eta": null, - "id": "62dfa4479950e9465532a31e", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "planned", - "tags": [ - { - "id": "62e02db67ad24c46bc175f56", - "name": "abc-tag", - "postCount": 1, - "url": "https://rudder.canny.io/admin/board/features?tags=abc-tag" - } - ], - "title": "Post Title", - "url": "https://rudder.canny.io/admin/board/features/p/post-title-7" - }, - "score": 0 - } - }, - { - "userId": "sampleuserId", - "event": "post.created", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-28T10:52:46.294Z", - "originalTimestamp": "2022-07-28T10:52:46.294Z", - "type": "track", - "properties": { - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 13, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "category": null, - "commentCount": 0, - "created": "2022-07-28T10:52:46.172Z", - "customFields": [ - { - "id": "62e13820d7949d44b92d3876", - "name": "abc", - "value": "123" - } - ], - "details": "Array of images", - "eta": null, - "id": "62e26a7e1d4ea13c124337bd", - "imageURLs": [ - "https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg", - "https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg" - ], - "objectType": "post", - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Custom Fields Testing", - "url": "https://rudder.canny.io/admin/board/features/p/custom-fields-testing" - } - }, - { - "userId": "123", - "event": "vote.created", - "integrations": { - "Canny": false - }, - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Canny", - "version": "1.0.0" - }, - "traits": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser" - }, - "externalId": [ - { - "type": "cannyUserId", - "id": "62d14c90fff7c80d0ec08375" - } - ] - }, - "timestamp": "2022-07-26T11:32:31.378Z", - "originalTimestamp": "2022-07-26T11:32:31.378Z", - "type": "track", - "properties": { - "objectType": "vote", - "board": { - "created": "2022-07-25T12:11:19.895Z", - "id": "62de88676bc28b44aaaf25cc", - "name": "features", - "postCount": 12, - "url": "https://rudder.canny.io/admin/board/features" - }, - "by": null, - "created": "2022-07-26T11:32:31.263Z", - "id": "62dfd0cfb2870d468c9618f5", - "post": { - "author": { - "avatarURL": "https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png", - "created": "2022-07-15T11:16:32.648Z", - "email": "test@rudderstack.com", - "id": "62d14c90fff7c80d0ec08375", - "isAdmin": true, - "name": "Rudder Test", - "url": "https://rudder.canny.io/admin/users/dummyUser", - "userID": null - }, - "by": null, - "category": null, - "commentCount": 0, - "details": "Array of images", - "eta": null, - "id": "62dfd0cfb2870d468c9618dd", - "imageURLs": [], - "owner": null, - "score": 1, - "status": "open", - "tags": [], - "title": "Images testing", - "url": "https://rudder.canny.io/admin/board/features/p/images-testing-2" - }, - "score": 1 - } - }, - { - "message": "Missing essential fields from Canny. Error: (TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received null)" - }, - { - "message": "Missing essential fields from Canny" - } -] diff --git a/test/__tests__/data/customerio_source_input.json b/test/__tests__/data/customerio_source_input.json deleted file mode 100644 index 769c1b7fd3..0000000000 --- a/test/__tests__/data/customerio_source_input.json +++ /dev/null @@ -1,390 +0,0 @@ -[ - { - "data": { - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "email_address": "test@example.com" - }, - "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", - "object_type": "customer", - "metric": "subscribed", - "timestamp": "abc" - }, - { - "data": { - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "email_address": "test@example.com" - }, - "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", - "object_type": "customer", - "metric": "subscribed", - "timestamp": "1585250199" - }, - { - "data": { - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "email_address": "test@example.com" - }, - "event_id": "01E4C4CT6YDC7Y5M7FE1GWWPQJ", - "object_type": "customer", - "metric": "subscribed", - "timestamp": 1585250199 - }, - { - "data": { - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "email_address": "test@example.com" - }, - "event_id": "01E4C4C6P79C12J5A6KPE6XNFD", - "object_type": "customer", - "metric": "unsubscribed", - "timestamp": 1585250179 - }, - { - "data": { - "action_id": 36, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgABcRhIBqSp7kiPekGBIeVh" - }, - "event_id": "01E4C4G1S0AMNG0XVF2M7RPH5S", - "object_type": "email", - "metric": "drafted", - "timestamp": 1585250305 - }, - { - "data": { - "content_id": 1146, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=", - "failure_message": "550 5.5.0 Requested action not taken: mailbox unavailable", - "newsletter_id": 736, - "recipient": "test@example.com", - "subject": "Thanks for joining!" - }, - "event_id": "12ASDG7S9P6MAZPTJ78DAND9GDC", - "object_type": "email", - "metric": "bounced", - "timestamp": 1234567890 - }, - { - "data": { - "action_id": 36, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgABcRhIBqSp7kiPekGBIeVh", - "href": "http://google.com", - "link_id": 1, - "recipient": "test@example.com", - "subject": "hello" - }, - "event_id": "01E4C8BES5XT87ZWRJFTB35YJ3", - "object_type": "email", - "metric": "clicked", - "timestamp": 1585254348 - }, - { - "data": { - "action_id": 42, - "campaign_id": 23, - "content": "Welcome to the club, we are with you.", - "customer_id": "user-123", - "delivery_id": "RAECAAFwnUSneIa0ZXkmq8EdkAM==", - "headers": { - "Custom-Header": ["custom-value"] - }, - "identifiers": { - "id": "user-123" - }, - "recipient": "test@example.com", - "subject": "Thanks for signing up" - }, - "event_id": "01E2EMRMM6TZ12TF9WGZN0WJQT", - "metric": "sent", - "object_type": "email", - "timestamp": 1644227937 - }, - { - "data": { - "customer_id": "user-123", - "delivery_id": "REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==", - "identifiers": { - "cio_id": "7ef807109981", - "id": "user-123" - }, - "recipient": "test@example.com", - "subject": "Thanks for signing up", - "transactional_message_id": 2 - }, - "event_id": "01ER4R5WB62QWCNREKFB4DYXGR", - "metric": "delivered", - "object_type": "email", - "timestamp": 1675196819 - }, - { - "data": { - "action_id": 38, - "campaign_id": 6, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RAEABQFxN56fWzydfV4_EGvfobI=", - "failure_message": "NoDevicesSynced" - }, - "event_id": "01E4VSX8SZ0T9AQMH4Q16NRB89", - "object_type": "push", - "metric": "attempted", - "timestamp": 1585776075 - }, - { - "data": { - "action_id": 37, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof", - "device_platform": "android" - } - ] - }, - "event_id": "01E4C4HDQ7P1X9KTKF0ZX7PWHE", - "object_type": "push", - "metric": "sent", - "timestamp": 1585250350 - }, - { - "data": { - "action_id": 37, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "href": "ciosas://product/2", - "link_id": 1, - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" - } - ] - }, - "event_id": "01E4V2SBHYK4TNTG8WKMP39G9R", - "object_type": "push", - "metric": "clicked", - "timestamp": 1585751829 - }, - { - "data": { - "action_id": 41, - "campaign_id": 7, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "ROk1AAIBcR4iT6mueuxiDtzO8HXv", - "failure_message": "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309." - }, - "event_id": "01E4F3DCS83P8HT7R3E6DWQN1X", - "object_type": "sms", - "metric": "attempted", - "timestamp": 1234567890 - }, - { - "data": { - "action_id": 38, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgIBcRh6qzHz-8gKvscP2UZa", - "href": "https://app.com/verify", - "link_id": 1, - "recipient": "+18008675309" - }, - "event_id": "01E4XXPN42JDF4B1ATQKTZ8WHV", - "object_type": "sms", - "metric": "clicked", - "timestamp": 1585847161 - }, - { - "data": { - "action_id": 39, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgQBcRhNAufb0s30bmz5HD7Y", - "recipient": "#signups" - }, - "event_id": "01E4C4TQKD6KJ274870J5DE2HB", - "object_type": "slack", - "metric": "sent", - "timestamp": 1585250655 - }, - { - "data": { - "action_id": 39, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgQBcRhocpCJE3mFfwvRzNe6", - "href": "http://bing.com", - "link_id": 1, - "recipient": "#signups" - }, - "event_id": "01E4C6HJTBNDX18XC4B88M3Y2G", - "object_type": "slack", - "metric": "clicked", - "timestamp": 1585252451 - }, - { - "data": { - "action_id": 39, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgQBcRhIBqRiZAc0fyQiLvkC", - "failure_message": "value passed for channel was invalid" - }, - "event_id": "01E4C4HDQ77BCN0X23Z3WBE764", - "object_type": "slack", - "metric": "failed", - "timestamp": 1585250350 - }, - { - "data": { - "action_id": 40, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgEBcRhIBqSrYcXDr2ks6Pj9" - }, - "event_id": "01E4C4G1S04QCV1NASF4NWMQNR", - "object_type": "webhook", - "metric": "drafted", - "timestamp": 1585250305 - }, - { - "data": { - "action_id": 38, - "broadcast_id": 6, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RAECAQFxNeUBx6LqgjqrN1j-BJc=", - "failure_message": "Variable 'customer.test' is missing" - }, - "event_id": "01E4TYA2KA9T0XGHCRJ784B774", - "object_type": "webhook", - "metric": "attempted", - "timestamp": 1585747134 - }, - { - "data": { - "action_id": 40, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgEBcRhNAufr2aU82jtDZEh6", - "recipient": "https://test.example.com/process" - }, - "event_id": "01E4C6EP0HCKRHKFARMZ5XEH7A", - "object_type": "webhook", - "metric": "sent", - "timestamp": 1585252357 - }, - { - "data": { - "action_id": 40, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgEBcRhNAufr2aU82jtDZEh6", - "href": "http://bing.com", - "link_id": 1, - "recipient": "https://test.example.com/process" - }, - "event_id": "01E4C6F5N1Y54TVGJTN64Y1ZS9", - "object_type": "webhook", - "metric": "clicked", - "timestamp": 1585252373 - }, - { - "data": { - "action_id": 38, - "broadcast_id": 6, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RAECAQFxNeK3bC4SYqhQqFGBQrQ=", - "failure_message": "HTTP 404 Not Found []" - }, - "event_id": "01E4TY5FVB0ZQ4KVDKRME0XSYZ", - "object_type": "webhook", - "metric": "failed", - "timestamp": 1585746984 - }, - { - "data": { - "action_id": 37, - "broadcast_id": 9, - "customer_id": "0200102", - "identifiers": { - "id": "0200102" - }, - "delivery_id": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "href": "ciosas://product/2", - "link_id": 1, - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" - } - ] - }, - "event_id": "01E4V2SBHYK4TNTG8WKMP39G9S", - "object_type": "push", - "metric": "delivered", - "timestamp": 1585751830 - } -] diff --git a/test/__tests__/data/customerio_source_output.json b/test/__tests__/data/customerio_source_output.json deleted file mode 100644 index 52df88e833..0000000000 --- a/test/__tests__/data/customerio_source_output.json +++ /dev/null @@ -1,651 +0,0 @@ -[ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Customer Subscribed", - "properties": { - "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" - }, - "userId": "0200102" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Customer Subscribed", - "properties": { - "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" - }, - "userId": "0200102" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Customer Subscribed", - "properties": { - "eventId": "01E4C4CT6YDC7Y5M7FE1GWWPQJ" - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:16:39.000Z", - "sentAt": "2020-03-26T19:16:39.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Customer Unsubscribed", - "properties": { - "eventId": "01E4C4C6P79C12J5A6KPE6XNFD" - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:16:19.000Z", - "sentAt": "2020-03-26T19:16:19.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Email Drafted", - "properties": { - "eventId": "01E4C4G1S0AMNG0XVF2M7RPH5S", - "deliveryId": "RPILAgABcRhIBqSp7kiPekGBIeVh", - "actionId": 36, - "broadcastId": 9 - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:18:25.000Z", - "sentAt": "2020-03-26T19:18:25.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Email Bounced", - "properties": { - "eventId": "12ASDG7S9P6MAZPTJ78DAND9GDC", - "deliveryId": "RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=", - "contentId": 1146, - "emailSubject": "Thanks for joining!", - "reason": "550 5.5.0 Requested action not taken: mailbox unavailable", - "newsletterId": 736 - }, - "userId": "0200102", - "originalTimestamp": "2009-02-13T23:31:30.000Z", - "sentAt": "2009-02-13T23:31:30.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Email Link Clicked", - "properties": { - "eventId": "01E4C8BES5XT87ZWRJFTB35YJ3", - "deliveryId": "RPILAgABcRhIBqSp7kiPekGBIeVh", - "actionId": 36, - "broadcastId": 9, - "emailSubject": "hello", - "link": { - "url": "http://google.com", - "id": 1 - } - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T20:25:48.000Z", - "sentAt": "2020-03-26T20:25:48.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Email Sent", - "properties": { - "eventId": "01E2EMRMM6TZ12TF9WGZN0WJQT", - "deliveryId": "RAECAAFwnUSneIa0ZXkmq8EdkAM==", - "actionId": 42, - "content": "Welcome to the club, we are with you.", - "emailSubject": "Thanks for signing up", - "campaignId": 23 - }, - "userId": "user-123", - "originalTimestamp": "2022-02-07T09:58:57.000Z", - "sentAt": "2022-02-07T09:58:57.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "cioId": "7ef807109981", - "email": "test@example.com" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Email Delivered", - "properties": { - "eventId": "01ER4R5WB62QWCNREKFB4DYXGR", - "deliveryId": "REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==", - "emailSubject": "Thanks for signing up", - "transactionalMessageId": 2 - }, - "userId": "user-123", - "originalTimestamp": "2023-01-31T20:26:59.000Z", - "sentAt": "2023-01-31T20:26:59.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Push Attempted", - "properties": { - "eventId": "01E4VSX8SZ0T9AQMH4Q16NRB89", - "deliveryId": "RAEABQFxN56fWzydfV4_EGvfobI=", - "actionId": 38, - "reason": "NoDevicesSynced", - "campaignId": 6 - }, - "userId": "0200102", - "originalTimestamp": "2020-04-01T21:21:15.000Z", - "sentAt": "2020-04-01T21:21:15.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Push Sent", - "properties": { - "eventId": "01E4C4HDQ7P1X9KTKF0ZX7PWHE", - "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "actionId": 37, - "broadcastId": 9, - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof", - "device_platform": "android" - } - ] - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:19:10.000Z", - "sentAt": "2020-03-26T19:19:10.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Push Link Clicked", - "properties": { - "eventId": "01E4V2SBHYK4TNTG8WKMP39G9R", - "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "actionId": 37, - "broadcastId": 9, - "link": { - "url": "ciosas://product/2", - "id": 1 - }, - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" - } - ] - }, - "userId": "0200102", - "originalTimestamp": "2020-04-01T14:37:09.000Z", - "sentAt": "2020-04-01T14:37:09.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "SMS Attempted", - "properties": { - "eventId": "01E4F3DCS83P8HT7R3E6DWQN1X", - "deliveryId": "ROk1AAIBcR4iT6mueuxiDtzO8HXv", - "actionId": 41, - "reason": "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309.", - "campaignId": 7 - }, - "userId": "0200102", - "originalTimestamp": "2009-02-13T23:31:30.000Z", - "sentAt": "2009-02-13T23:31:30.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "+18008675309" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "SMS Link Clicked", - "properties": { - "eventId": "01E4XXPN42JDF4B1ATQKTZ8WHV", - "deliveryId": "RPILAgIBcRh6qzHz-8gKvscP2UZa", - "actionId": 38, - "broadcastId": 9, - "link": { - "url": "https://app.com/verify", - "id": 1 - } - }, - "userId": "0200102", - "originalTimestamp": "2020-04-02T17:06:01.000Z", - "sentAt": "2020-04-02T17:06:01.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "#signups" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Slack Message Sent", - "properties": { - "eventId": "01E4C4TQKD6KJ274870J5DE2HB", - "deliveryId": "RPILAgQBcRhNAufb0s30bmz5HD7Y", - "actionId": 39, - "broadcastId": 9 - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:24:15.000Z", - "sentAt": "2020-03-26T19:24:15.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "#signups" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Slack Message Link Clicked", - "properties": { - "eventId": "01E4C6HJTBNDX18XC4B88M3Y2G", - "deliveryId": "RPILAgQBcRhocpCJE3mFfwvRzNe6", - "actionId": 39, - "broadcastId": 9, - "link": { - "url": "http://bing.com", - "id": 1 - } - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:54:11.000Z", - "sentAt": "2020-03-26T19:54:11.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Slack Message Failed", - "properties": { - "eventId": "01E4C4HDQ77BCN0X23Z3WBE764", - "deliveryId": "RPILAgQBcRhIBqRiZAc0fyQiLvkC", - "actionId": 39, - "broadcastId": 9, - "reason": "value passed for channel was invalid" - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:19:10.000Z", - "sentAt": "2020-03-26T19:19:10.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Webhook Message Drafted", - "properties": { - "eventId": "01E4C4G1S04QCV1NASF4NWMQNR", - "deliveryId": "RPILAgEBcRhIBqSrYcXDr2ks6Pj9", - "actionId": 40, - "broadcastId": 9 - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:18:25.000Z", - "sentAt": "2020-03-26T19:18:25.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Webhook Message Attempted", - "properties": { - "eventId": "01E4TYA2KA9T0XGHCRJ784B774", - "deliveryId": "RAECAQFxNeUBx6LqgjqrN1j-BJc=", - "actionId": 38, - "broadcastId": 6, - "reason": "Variable 'customer.test' is missing" - }, - "userId": "0200102", - "originalTimestamp": "2020-04-01T13:18:54.000Z", - "sentAt": "2020-04-01T13:18:54.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "https://test.example.com/process" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Webhook Message Sent", - "properties": { - "eventId": "01E4C6EP0HCKRHKFARMZ5XEH7A", - "deliveryId": "RPILAgEBcRhNAufr2aU82jtDZEh6", - "actionId": 40, - "broadcastId": 9 - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:52:37.000Z", - "sentAt": "2020-03-26T19:52:37.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - }, - "traits": { - "email": "https://test.example.com/process" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Webhook Message Link Clicked", - "properties": { - "eventId": "01E4C6F5N1Y54TVGJTN64Y1ZS9", - "deliveryId": "RPILAgEBcRhNAufr2aU82jtDZEh6", - "actionId": 40, - "broadcastId": 9, - "link": { - "url": "http://bing.com", - "id": 1 - } - }, - "userId": "0200102", - "originalTimestamp": "2020-03-26T19:52:53.000Z", - "sentAt": "2020-03-26T19:52:53.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Webhook Message Failed", - "properties": { - "eventId": "01E4TY5FVB0ZQ4KVDKRME0XSYZ", - "deliveryId": "RAECAQFxNeK3bC4SYqhQqFGBQrQ=", - "actionId": 38, - "broadcastId": 6, - "reason": "HTTP 404 Not Found []" - }, - "userId": "0200102", - "originalTimestamp": "2020-04-01T13:16:24.000Z", - "sentAt": "2020-04-01T13:16:24.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Customer.io" - } - }, - "integrations": { - "Customer.io": false - }, - "type": "track", - "event": "Push Delivered", - "properties": { - "eventId": "01E4V2SBHYK4TNTG8WKMP39G9S", - "deliveryId": "RPILAgUBcRhIBqSfeiIwdIYJKxTY", - "actionId": 37, - "broadcastId": 9, - "link": { - "url": "ciosas://product/2", - "id": 1 - }, - "recipients": [ - { - "device_id": "eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof" - } - ] - }, - "userId": "0200102", - "originalTimestamp": "2020-04-01T14:37:10.000Z", - "sentAt": "2020-04-01T14:37:10.000Z" - } -] diff --git a/test/__tests__/data/formsort_source.json b/test/__tests__/data/formsort_source.json deleted file mode 100644 index d94cfd677b..0000000000 --- a/test/__tests__/data/formsort_source.json +++ /dev/null @@ -1,94 +0,0 @@ -[ - { - "description": "when we receive finalized as false", - "input": { - "answers": { - "yes": true, - "enter_email": "test@user.com", - "enter_name": "2022-11-17", - "yes_or_no": false - }, - "responder_uuid": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", - "flow_label": "new-flow-2022-11-25", - "variant_label": "main", - "variant_uuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea", - "finalized": false, - "created_at": "2022-11-25T14:41:22+00:00" - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Formsort" - }, - "page": { - "title": "new-flow-2022-11-25" - }, - "variantLabel": "main", - "variantUuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea" - }, - "integrations": { - "Formsort": false - }, - "type": "track", - "userId": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", - "originalTimestamp": "2022-11-25T14:41:22+00:00", - "properties": { - "yes": true, - "enter_email": "test@user.com", - "enter_name": "2022-11-17", - "yes_or_no": false - }, - "event": "FlowLoaded" - } - }, - { - "description": "when we receive finalized as true", - "input": { - "answers": { - "yes": true, - "enter_email": "test@user.com", - "enter_name": "2022-11-17", - "yes_or_no": false - }, - "responder_uuid": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", - "flow_label": "new-flow-2022-11-25", - "variant_label": "main", - "variant_uuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea", - "finalized": true, - "created_at": "2022-11-25T14:41:22+00:00" - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Formsort" - }, - "page": { - "title": "new-flow-2022-11-25" - }, - "variantLabel": "main", - "variantUuid": "0828efa7-7215-4e7d-a7ab-6c1079010cea" - }, - "integrations": { - "Formsort": false - }, - "type": "track", - "userId": "66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7", - "originalTimestamp": "2022-11-25T14:41:22+00:00", - "properties": { - "yes": true, - "enter_email": "test@user.com", - "enter_name": "2022-11-17", - "yes_or_no": false - }, - "event": "FlowFinalized" - } - } -] diff --git a/test/__tests__/data/gainsightpx_source.json b/test/__tests__/data/gainsightpx_source.json deleted file mode 100644 index 438d1d0cf6..0000000000 --- a/test/__tests__/data/gainsightpx_source.json +++ /dev/null @@ -1,1519 +0,0 @@ -[ - { - "description": "Identify Call", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "SIGN_UP", - "eventId": "1283c08b-f290-4bc4-9deb-75c7867d69ee", - "propertyKey": "AP-EOXPSEZGC5LA-2-1", - "date": 1665582808376, - "sessionId": "AP-EOXPSEZGC5LA-2-1665582441084-16821368", - "globalContext": {}, - "userType": "USER" - }, - "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "identify", - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "score": 0, - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "id": "New!", - "country": "India", - "account": { - "id": "IBM", - "name": "International Business Machine", - "numberOfEmployees": 0, - "numberOfUsers": 0 - } - }, - "userId": "New!", - "createdAt": "2022-10-12T13:53:11.753Z", - "originalTimestamp": "2022-10-12T13:53:11.753Z" - } - }, - { - "description": "Custom Track Call ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "CUSTOM", - "eventId": "df58cbd6-2736-4f8a-ad26-6049eac2e150", - "propertyKey": "AP-EOXPSEZGC5LA-2-1", - "date": 1665656881448, - "sessionId": "AP-EOXPSEZGC5LA-2-1665656622955-48127533", - "globalContext": {}, - "userType": "USER", - "eventName": "Product Clicked", - "attributes": { - "Audience Size": 5000, - "name": "TESTing TRACK CALL FIRST", - "Launched date": 1520532660000, - "Launched": true - }, - "url": "http://127.0.0.1:5501/GPXTEST2.html", - "referrer": "", - "remoteHost": "122.161.66.140" - }, - "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "ip": "122.161.66.140", - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-EOXPSEZGC5LA-2-1", - "Audience Size": 5000, - "name": "TESTing TRACK CALL FIRST", - "Launched date": 1520532660000, - "Launched": true, - "ip": "122.161.66.140", - "url": "http://127.0.0.1:5501/GPXTEST2.html" - }, - "userId": "New!", - "category": "CUSTOM", - "event": "Product Clicked", - "sentAt": "2022-10-13T10:28:01.448Z", - "originalTimestamp": "2022-10-13T10:28:01.448Z" - } - }, - { - "description": "Feedback Track Call ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "FEEDBACK", - "eventId": "d007bd76-decb-4a77-8456-d84fb15c6a83", - "propertyKey": "AP-E9VUBBLZ6BIS-2-1", - "date": 1665415753621, - "sessionId": "AP-E9VUBBLZ6BIS-2-1665415678379-45445457", - "globalContext": null, - "userType": "USER", - "subject": "feedback title", - "category": "Labels test", - "description": "feedback body", - "labels": ["492120f5-3573-11ec-bef0-42010a800545"], - "remoteHost": "122.161.66.140", - "source": "Knowledge Center Bot" - }, - "configId": "32f07727-d231-4c9d-881e-fb50b80bad63" - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ], - "ip": "122.161.66.140" - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-E9VUBBLZ6BIS-2-1", - "feedback": { - "labels": ["492120f5-3573-11ec-bef0-42010a800545"], - "description": "feedback body", - "subject": "feedback title", - "source": "Knowledge Center Bot" - }, - "ip": "122.161.66.140" - }, - "userId": "New!", - "category": "FEEDBACK", - "event": "Labels test", - "sentAt": "2022-10-10T15:29:13.621Z", - "originalTimestamp": "2022-10-10T15:29:13.621Z" - } - }, - { - "description": "Feature Match Track Call ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "FEATURE_MATCH", - "eventId": "ae1e5538-1736-4088-86d1-e90a10ffe901-05951b40-944f-4052-9a4a-51c74683f658", - "propertyKey": "AP-8MF5LPSWUBFW-2-1", - "date": 1665582808376, - "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", - "globalContext": { - "role": "Admin" - }, - "userType": "USER", - "featureId": "05951b40-944f-4052-9a4a-51c74683f658", - "featureName": "Charts" - } - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-8MF5LPSWUBFW-2-1", - "globalContext": { - "role": "Admin" - }, - "featureId": "05951b40-944f-4052-9a4a-51c74683f658" - }, - "userId": "New!", - "category": "FEATURE_MATCH", - "event": "Charts", - "sentAt": "2022-10-12T13:53:28.376Z", - "originalTimestamp": "2022-10-12T13:53:28.376Z" - } - }, - { - "description": "Segment Match Track Call and no userId and yes anonymousId as event.sessionId", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "SEGMENT", - "eventId": "ddb9ca94-beb1-449c-bdcd-b53190f8e784", - "propertyKey": "AP-8MF5LPSWUBFW-2-1", - "date": 1665582808376, - "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", - "globalContext": { - "role": "Admin" - }, - "userType": "USER", - "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845", - "segmentName": "Linux User" - } - }, - "output": { - "anonymousId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-8MF5LPSWUBFW-2-1", - "globalContext": { - "role": "Admin" - }, - "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845" - }, - "category": "SEGMENT", - "event": "Linux User", - "sentAt": "2022-10-12T13:53:28.376Z", - "originalTimestamp": "2022-10-12T13:53:28.376Z" - } - }, - { - "description": "No Match Track Call ", - "input": { - "event": { - "eventType": "Unavailable", - "eventId": "ddb9ca94-beb1-449c-bdcd-b53190f8e784", - "propertyKey": "AP-8MF5LPSWUBFW-2-1", - "date": 1601303075964, - "sessionId": "AP-8MF5LPSWUBFW-2-1601303023809-98881162", - "globalContext": { - "role": "Admin" - }, - "userType": "USER", - "segmentId": "e3ab2e48-24f9-4602-ab92-b9f1f4343845", - "segmentName": "Linux User" - } - }, - "output": { - "error": "Event type Unavailable not supported" - } - }, - { - "description": "Survey Track Call -> Multi Question Survey ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "SURVEY", - "eventId": "c9883e3b-05d4-4f96-8b9c-e2ce10430493", - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "date": 1601303075964, - "sessionId": "AP-N6SV00EVMR1E-2-1605265939566-23853426", - "globalContext": { - "role": "Admin" - }, - "userType": "EMPTY_USER_TYPE", - "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", - "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", - "engagementName": "Quarterly Survey", - "surveyType": "Multi Question", - "interaction": "SINGLE_STEP_SURVEY_RESPONDED", - "score": 0, - "activation": "Auto", - "executionId": "1ad2d383-d1fa-425d-84f0-2a531e17a5d9", - "executionDate": 1605265939965, - "questionType": "Multi choice", - "questionId": "de9e6bf1-351c-46ec-907d-c985bd420c2b", - "questionHtml": "
Favorite travel destinations
", - "questionText": "Favorite travel destinations", - "answers": [ - { - "answerId": "563e2103-2906-4088-869f-bcccd185f288", - "answerHtml": "
Europe
", - "answerText": "Europe" - } - ] - } - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "globalContext": { - "role": "Admin" - }, - "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", - "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", - "surveyType": "Multi Question", - "interaction": "SINGLE_STEP_SURVEY_RESPONDED", - "survey": { - "activation": "Auto", - "questionType": "Multi choice", - "score": 0, - "questionId": "de9e6bf1-351c-46ec-907d-c985bd420c2b", - "questionHtml": "
Favorite travel destinations
", - "questionText": "Favorite travel destinations", - "answers": [ - { - "answerId": "563e2103-2906-4088-869f-bcccd185f288", - "answerHtml": "
Europe
", - "answerText": "Europe" - } - ] - } - }, - "userId": "New!", - "category": "SURVEY", - "event": "Quarterly Survey", - "sentAt": "2020-09-28T14:24:35.964Z", - "originalTimestamp": "2020-09-28T14:24:35.964Z" - } - }, - { - "description": "Survey Track Call -> NPS ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "SURVEY", - "eventId": "c9883e3b-05d4-4f96-8b9c-e2ce10430493", - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "date": 1601303075964, - "sessionId": "AP-N6SV00EVMR1E-2-1605265939566-23853426", - "globalContext": { - "role": "Admin" - }, - "userType": "EMPTY_USER_TYPE", - "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", - "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", - "engagementName": "Quarterly Survey", - "surveyType": "Multi Question", - "interaction": "SINGLE_STEP_SURVEY_RESPONDED", - "score": 0, - "scoreType": null, - "stepNumber": null, - "userInput": "I like new features", - "activation": "Auto", - "executionId": "1ad2d383-d1fa-425d-84f0-2a531e17a5d9", - "executionDate": 1605265939965, - "questionType": "Open text question", - "questionHtml": "
\n
\n How was your experience?\n
\n
\n", - "questionText": "How was your experience?" - } - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "globalContext": { - "role": "Admin" - }, - "engagementId": "e5362226-75da-4ef6-999a-823727e3d7a7", - "contentType": "IN_APP_MULTIPLE_QUESTION_SURVEY", - "surveyType": "Multi Question", - "interaction": "SINGLE_STEP_SURVEY_RESPONDED", - "survey": { - "activation": "Auto", - "userInput": "I like new features", - "questionType": "Open text question", - "score": 0, - "questionHtml": "
\n
\n How was your experience?\n
\n
\n", - "questionText": "How was your experience?" - } - }, - "userId": "New!", - "category": "SURVEY", - "event": "Quarterly Survey", - "sentAt": "2020-09-28T14:24:35.964Z", - "originalTimestamp": "2020-09-28T14:24:35.964Z" - } - }, - { - "description": "Engagement Track Call ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "ENGAGEMENT", - "eventId": "6494e73a-976b-4ee5-b8a8-de9effff7e80", - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "date": 1605262539389, - "sessionId": "AP-N6SV00EVMR1E-2-1605262502068-24197555", - "globalContext": { - "role": "Admin" - }, - "userType": "EMPTY_USER_TYPE", - "contentType": "IN_APP_DIALOG", - "engagementId": "83c30d4e-88c3-4054-a0fa-33451a6ea7fc", - "engagementType": "Dialog", - "engagementName": "Release Announcement", - "interaction": "VIEWED", - "stepNumber": 1, - "activation": "Auto", - "executionId": "b633945f-d4a5-404a-ae39-5ced5b542240", - "executionDate": 1605262539389 - } - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-N6SV00EVMR1E-2-1", - "engagementId": "83c30d4e-88c3-4054-a0fa-33451a6ea7fc", - "contentType": "IN_APP_DIALOG", - "engagementType": "Dialog", - "interaction": "VIEWED", - "globalContext": { - "role": "Admin" - }, - "engagement": { - "stepNumber": 1, - "activation": "Auto" - } - }, - "userId": "New!", - "category": "ENGAGEMENT", - "event": "Release Announcement", - "sentAt": "2020-11-13T10:15:39.389Z", - "originalTimestamp": "2020-11-13T10:15:39.389Z" - } - }, - { - "description": "SegmentIO S2S Track Call ", - "input": { - "user": { - "aptrinsicId": "cab9c469-8602-4933-acdb-68338fbb9ab1", - "identifyId": "New!", - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "lastSeenDate": 1665582808669, - "signUpDate": 1665582791753, - "firstVisitDate": 1665582791753, - "title": "Mr.", - "phone": "", - "score": 0, - "role": "", - "subscriptionId": "", - "accountId": "IBM", - "numberOfVisits": 1, - "location": { - "countryName": "India", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665582808376, - "lastModifiedDate": 1665582808717, - "customAttributes": null, - "globalUnsubscribe": false, - "sfdcContactId": "", - "lastVisitedUserAgentData": null, - "id": "New!", - "lastInferredLocation": null - }, - "account": { - "id": "IBM", - "name": "International Business Machine", - "trackedSubscriptionId": "", - "sfdcId": "", - "lastSeenDate": 1665582808669, - "dunsNumber": "", - "industry": "", - "numberOfEmployees": 0, - "sicCode": "", - "website": "", - "naicsCode": "", - "plan": "", - "location": { - "countryName": "", - "countryCode": "", - "stateName": "", - "stateCode": "", - "city": "", - "street": "", - "postalCode": "", - "continent": "", - "regionName": "", - "timeZone": "", - "coordinates": { - "latitude": 0, - "longitude": 0 - } - }, - "numberOfUsers": 0, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "createDate": 1665578567565, - "lastModifiedDate": 1665582808669, - "customAttributes": null, - "parentGroupId": "" - }, - "event": { - "eventType": "SEGMENT_IO", - "eventId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", - "propertyKey": "AP-EOXPSEZGC5LA-2-1", - "date": 1666687235178, - "sessionId": "31a524fa-1490-48db-9600-adfb1fa95333", - "globalContext": {}, - "userType": "USER", - "segmentIOEvent": { - "pxPropertyKey": "AP-EOXPSEZGC5LA-2", - "type": "group", - "userId": "1001", - "anonymousId": "a4303a13-eb10-46d8-8935-d787daf1cfbd", - "context": { - "ip": "122.161.67.121", - "library": { - "name": "analytics.js", - "version": "next-1.45.0" - }, - "locale": "en-GB", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", - "page": { - "path": "/abc.html", - "title": "Engage Testing", - "url": "http://127.0.0.1:5501/abc.html" - } - }, - "messageId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", - "receivedAt": "2022-10-25T08:40:35.184Z", - "sentAt": "2022-10-25T08:40:34.809Z", - "timestamp": "2022-10-25T08:40:35.178Z", - "traits": { - "name": "International Business Machine" - }, - "version": 2, - "channel": "client", - "groupId": "IBM" - } - } - }, - "output": { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "GAINSIGHTPX" - }, - "traits": { - "type": "USER", - "gender": "EMPTY_GENDER", - "email": "userEmail@address.com", - "firstName": "test", - "lastName": "rudderlabs", - "title": "Mr.", - "globalUnsubscribe": false, - "accountId": "IBM", - "numberOfVisits": 1, - "propertyKeys": ["AP-EOXPSEZGC5LA-2-1"], - "score": 0, - "id": "New!", - "country": "India", - "account": { - "numberOfEmployees": 0, - "numberOfUsers": 0, - "id": "IBM", - "name": "International Business Machine" - } - }, - "externalId": [ - { - "type": "gainsightpxAptrinsicId", - "id": "cab9c469-8602-4933-acdb-68338fbb9ab1" - } - ] - }, - "integrations": { - "GAINSIGHTPX": false - }, - "type": "track", - "properties": { - "propertyKey": "AP-EOXPSEZGC5LA-2-1", - "pxPropertyKey": "AP-EOXPSEZGC5LA-2", - "type": "group", - "userId": "1001", - "anonymousId": "a4303a13-eb10-46d8-8935-d787daf1cfbd", - "context": { - "ip": "122.161.67.121", - "library": { - "name": "analytics.js", - "version": "next-1.45.0" - }, - "locale": "en-GB", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", - "page": { - "path": "/abc.html", - "title": "Engage Testing", - "url": "http://127.0.0.1:5501/abc.html" - } - }, - "messageId": "ajs-next-69810a17571dc115ccead5281cc3fb7d", - "receivedAt": "2022-10-25T08:40:35.184Z", - "sentAt": "2022-10-25T08:40:34.809Z", - "timestamp": "2022-10-25T08:40:35.178Z", - "traits": { - "name": "International Business Machine" - }, - "version": 2, - "channel": "client", - "groupId": "IBM" - }, - "userId": "New!", - "category": "SEGMENT_IO", - "event": "SegmentIO Cloud Server", - "sentAt": "2022-10-25T08:40:35.178Z", - "originalTimestamp": "2022-10-25T08:40:35.178Z" - } - } -] diff --git a/test/__tests__/data/iterable_source_input.json b/test/__tests__/data/iterable_source_input.json deleted file mode 100644 index 798b0818c1..0000000000 --- a/test/__tests__/data/iterable_source_input.json +++ /dev/null @@ -1,600 +0,0 @@ -[ - { - "email": "test@rudderstack.com", - "eventName": "emailSubscribe", - "dataFields": { - "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", - "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", - "signupSource": "WebForm", - "email": "test@rudderstack.com", - "createdAt": "2022-04-19 03:33:50 +00:00", - "messageTypeIds": [], - "emailListIds": [1589748], - "channelIds": [] - } - }, - { - "eventName": "emailSubscribe", - "dataFields": { - "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", - "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", - "signupSource": "WebForm", - "email": "test@abcd.com", - "createdAt": "2022-04-19 03:33:50 +00:00", - "messageTypeIds": [], - "emailListIds": [1589748], - "channelIds": [] - } - }, - { - "email": "test@ruddstack.com", - "eventTitle": "smsReceived", - "dataFields": { - "fromPhoneNumber": "+16503926753", - "toPhoneNumber": "+14155824541", - "smsMessage": "Message text", - "email": "docs@iterable.com", - "createdAt": "2016-12-05 22:51:25 +00:00" - } - }, - { - "email": "test@rudderstack.com", - "eventName": "inAppSendSkip" - }, - { - "email": "test@rudderstack.com", - "eventName": "emailSend", - "dataFields": { - "contentId": 331201, - "email": "test@rudderstack.com", - "createdAt": "2016-12-02 20:21:04 +00:00", - "campaignId": 59667, - "templateId": 93849, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c59667:t93849:docs@iterable.com" - } - }, - { - "email": "invalid_email@iterable.com", - "eventName": "emailBounce", - "dataFields": { - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2598, - "messageTypeId": 2870, - "experimentId": null, - "recipientState": "HardBounce", - "templateId": 167484, - "email": "invalid_email@iterable.com", - "createdAt": "2017-05-15 23:59:47 +00:00", - "campaignId": 114746, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailId": "c114746:t167484:invalid_email@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailClick", - "dataFields": { - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36", - "ip": "162.245.22.184", - "templateId": 93849, - "userAgentDevice": "Mac", - "url": "https://www.iterable.com", - "canonicalUrlId": "3145668988", - "city": "San Francisco", - "region": "CA", - "email": "docs@iterable.com", - "createdAt": "2016-12-02 20:31:39 +00:00", - "campaignId": 59667, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "linkUrl": "https://www.iterable.com", - "linkId": "3145668988", - "emailId": "c59667:t93849:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailComplaint", - "dataFields": { - "recipientState": "Complaint", - "templateId": 79190, - "email": "docs@iterable.com", - "createdAt": "2016-12-09 18:52:19 +00:00", - "campaignId": 49313, - "messageId": "d3c44d47b4994306b4db8d16a94db025", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "test template", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailOpen", - "dataFields": { - "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", - "proxySource": "Gmail", - "ip": "66.249.84.204", - "templateId": 79190, - "device": "Gmail", - "email": "docs@iterable.com", - "createdAt": "2016-12-02 18:51:45 +00:00", - "campaignId": 49313, - "messageId": "210badf49fe54f2591d64ad0d055f4fb", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailSendSkip", - "dataFields": { - "createdAt": "2019-08-07 18:56:10 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 721398, - "messageId": "98430abe1b9842c991ce221010121553", - "email": "docs@iterable.com" - } - }, - { - "email": "test@rudderstack.com", - "eventName": "emailSubscribe", - "dataFields": { - "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", - "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", - "signupSource": "WebForm", - "email": "test@abcd.com", - "createdAt": "2022-04-19 03:33:50 +00:00", - "messageTypeIds": [], - "emailListIds": [1589748], - "channelIds": [] - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailUnSubscribe", - "dataFields": { - "campaignId": 1089024, - "messageId": "bf008db8ab194b65816398c05bf30f99", - "emailId": "c1089024:t1526112:docs@iterable.com", - "workflowName": "My test workflow", - "messageTypeIds": [], - "locale": null, - "templateId": 1526112, - "emailSubject": "Upcoming events!", - "labels": [], - "unsubSource": "EmailLink", - "createdAt": "2020-03-20 23:34:15 +00:00", - "templateName": "My test template", - "emailListIds": [], - "messageTypeId": 31082, - "experimentId": null, - "channelIds": [27447], - "campaignName": "My test campaign", - "workflowId": 76786, - "email": "docs@iterable.com", - "channelId": 27447 - } - }, - { - "email": "docs@iterable.com", - "userId": "1", - "eventName": "hostedUnsubscribeClick", - "dataFields": { - "country": "United States", - "city": "San Jose", - "campaignId": 1074721, - "ip": "192.168.0.1", - "userAgentDevice": "Mac", - "messageId": "ceb3d4d929fc406ca93b28a0ef1efff1", - "emailId": "c1074721:t1506266:docs@iterable.com", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36", - "workflowName": "My workflow", - "locale": null, - "templateId": 1506266, - "emailSubject": "My email subject", - "url": "https://iterable.com", - "labels": [], - "createdAt": "2020-03-21 00:24:08 +00:00", - "templateName": "My email template", - "messageTypeId": 13406, - "experimentId": null, - "region": "CA", - "campaignName": "My email campaign", - "workflowId": 60102, - "email": "docs@iterable.com", - "channelId": 12466 - } - }, - { - "email": "docs@iterable.com", - "eventName": "inAppClick", - "dataFields": { - "email": "docs@iterable.com", - "createdAt": "2018-03-27 00:44:40 +00:00", - "campaignId": 269450 - } - }, - { - "email": "docs@iterable.com", - "eventName": "inAppOpen", - "dataFields": { - "email": "docs@iterable.com", - "createdAt": "2018-03-27 00:44:30 +00:00", - "campaignId": 269450 - } - }, - { - "email": "docs@iterable.com", - "eventName": "inAppSend", - "dataFields": { - "messageContext": { - "saveToInbox": false, - "trigger": "immediate" - }, - "campaignId": 732678, - "contentId": 18997, - "messageId": "vA16d48VVi4LQ5hMuZuquKzL0BXTdQJJUMJRjKnL1", - "workflowName": null, - "emailId": "c732678:t1032729:docs@iterable.com", - "locale": null, - "templateId": 1032729, - "inAppBody": "", - "email": "docs@iterable.com", - "createdAt": "2016-12-10 01:00:38 +00:00", - "campaignId": 74768, - "templateId": 113554, - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "yourpath/subpath" - }, - "sound": "", - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - } - }, - { - "email": "docs@iterable.com", - "eventName": "pushOpen", - "dataFields": { - "appAlreadyRunning": false, - "email": "docs@iterable.com", - "createdAt": "2016-12-08 01:25:22 +00:00", - "campaignId": 74768, - "templateId": 113554, - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "shop_home" - }, - "sound": null, - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - } - }, - { - "email": "docs@iterable.com", - "eventName": "pushSend", - "dataFields": { - "contentId": 6724, - "platformEndpoint": "", - "email": "docs@iterable.com", - "createdAt": "2016-12-08 00:53:11 +00:00", - "campaignId": 74758, - "templateId": 113541, - "messageId": "73f2d3f13cd04db0b56c6143b179adc5", - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 1744, - "messageTypeId": 1759, - "experimentId": null, - "payload": { - "a": "2" - }, - "sound": "", - "badge": "", - "contentAvailable": false, - "deeplink": null, - "locale": null - } - }, - { - "email": "docs@iterable.com", - "eventName": "pushSendSkip", - "dataFields": { - "createdAt": "2019-08-07 22:28:51 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 732667, - "messageId": "8306ae0c74324635b7554947c5ec0e56", - "email": "docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "pushUninstall", - "dataFields": { - "isGhostPush": false, - "platformEndpoint": "", - "email": "docs@iterable.com", - "createdAt": "2016-12-09 20:50:54 +00:00", - "campaignId": 74768, - "templateId": 113554, - "messageId": "73f2d3f13cd04db0b56c6143b179adc5", - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "your_folder/30" - }, - "sound": "", - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - } - }, - { - "email": "docs@iterable.com", - "eventName": "smsBounce", - "dataFields": { - "smsProviderResponse": { - "status": 404, - "message": "The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found", - "code": 20404, - "more_info": "https://www.twilio.com/docs/errors/20404" - }, - "email": "docs@iterable.com", - "createdAt": "2016-12-05 22:43:24 +00:00", - "campaignId": 74003, - "templateId": 112561, - "smsMessage": "Here is example message, please respond with 'received'", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 4270, - "messageTypeId": 4769, - "experimentId": null, - "fromPhoneNumberId": 268, - "imageUrl": null, - "locale": null, - "emailId": "c74003:t112561:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "smsClick", - "dataFields": { - "campaignId": 1234567, - "campaignName": "My test campaign", - "workflowId": null, - "workflowName": null, - "templateName": "My template", - "locale": null, - "channelId": 98765, - "messageTypeId": 43210, - "experimentId": null, - "labels": [], - "smsMessage": "Test SMS! https://www.example.com", - "fromPhoneNumberId": 1234, - "imageUrl": null, - "clickedUrl": "https://www.example.com", - "email": "docs@iterable.com", - "createdAt": "2022-03-10 05:00:14 +00:00", - "templateId": 1112222, - "messageId": "ebd8f3cfc1f74353b423c5e0f3dd8b39", - "emailId": "c1234567:t9876543:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "smsReceived", - "dataFields": { - "fromPhoneNumber": "+16503926753", - "toPhoneNumber": "+14155824541", - "smsMessage": "Message text", - "email": "docs@iterable.com", - "createdAt": "2016-12-05 22:51:25 +00:00" - } - }, - { - "email": "docs@iterable.com", - "eventName": "smsSend", - "dataFields": { - "toPhoneNumber": "+16503926753", - "fromSMSSenderId": 258, - "contentId": 2086, - "email": "docs@iterable.com", - "createdAt": "2016-12-05 21:50:32 +00:00", - "campaignId": 73974, - "templateId": 112523, - "smsMessage": "Message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 4270, - "messageTypeId": 4769, - "experimentId": null, - "fromPhoneNumberId": 258, - "imageUrl": null, - "locale": null, - "emailId": "c73974:t112523:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "smsSendSkip", - "dataFields": { - "createdAt": "2019-08-07 18:49:48 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 729390, - "messageId": "2c780bf42f26485db0fc6571d2e0f6a0", - "email": "docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "emailSend", - "dataFields": { - "contentId": 274222, - "email": "docs@iterable.com", - "createdAt": "2016-12-02 18:51:40 +00:00", - "campaignId": 49313, - "transactionalData": { - "__comment": "transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total." - }, - "templateId": 79190, - "messageId": "210badf49fe54f2591d64ad0d055f4fb", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "webPushSend", - "dataFields": { - "campaignId": 723636, - "browserToken": "cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b", - "contentId": 3681, - "messageId": "af4c726ae76b48c7871b6d0d7760d47c", - "workflowName": "My workflow name", - "emailId": "c723636:t1020396:docs@iterable.com", - "locale": null, - "webPushIcon": null, - "templateId": 1020396, - "labels": [], - "createdAt": "2019-08-07 23:43:02 +00:00", - "templateName": "My template name", - "webPushMessage": "", - "messageTypeId": 9106, - "webPushBody": null, - "experimentId": null, - "webPushClickAction": null, - "campaignName": "My campaign name", - "workflowId": 53505, - "channelId": 8539, - "email": "docs@iterable.com" - } - }, - { - "email": "docs@iterable.com", - "eventName": "webPushSendSkip", - "dataFields": { - "createdAt": "2019-08-07 23:43:48 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 723636, - "messageId": "4238c918b20a41dfbe9a910275b76f12", - "email": "docs@iterable.com" - } - } -] diff --git a/test/__tests__/data/iterable_source_output.json b/test/__tests__/data/iterable_source_output.json deleted file mode 100644 index b1ff817241..0000000000 --- a/test/__tests__/data/iterable_source_output.json +++ /dev/null @@ -1,1084 +0,0 @@ -[ - { - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test@rudderstack.com" - } - }, - "event": "emailSubscribe", - "integrations": { - "Iterable": false - }, - "properties": { - "channelIds": [], - "createdAt": "2022-04-19 03:33:50 +00:00", - "emailListIds": [1589748], - "messageTypeIds": [], - "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", - "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", - "signupSource": "WebForm" - }, - "receivedAt": "2022-04-19T03:33:50.000Z", - "timestamp": "2022-04-19T03:33:50.000Z", - "type": "track" - }, - { - "message": "Unknwon event type from Iterable" - }, - { - "message": "Unknwon event type from Iterable" - }, - { - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test@rudderstack.com" - } - }, - "event": "inAppSendSkip", - "integrations": { - "Iterable": false - }, - "type": "track", - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" - }, - { - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test@rudderstack.com" - } - }, - "event": "emailSend", - "integrations": { - "Iterable": false - }, - "properties": { - "contentId": 331201, - "createdAt": "2016-12-02 20:21:04 +00:00", - "campaignId": 59667, - "templateId": 93849, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c59667:t93849:docs@iterable.com" - }, - "receivedAt": "2016-12-02T20:21:04.000Z", - "timestamp": "2016-12-02T20:21:04.000Z", - "type": "track" - }, - { - "userId": "b053765f5d0d23b0d5e4dd960be9513f", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "invalid_email@iterable.com" - } - }, - "event": "emailBounce", - "integrations": { - "Iterable": false - }, - "properties": { - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2598, - "messageTypeId": 2870, - "experimentId": null, - "recipientState": "HardBounce", - "templateId": 167484, - "createdAt": "2017-05-15 23:59:47 +00:00", - "campaignId": 114746, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailId": "c114746:t167484:invalid_email@iterable.com" - }, - "receivedAt": "2017-05-15T23:59:47.000Z", - "timestamp": "2017-05-15T23:59:47.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailClick", - "integrations": { - "Iterable": false - }, - "properties": { - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36", - "ip": "162.245.22.184", - "templateId": 93849, - "userAgentDevice": "Mac", - "url": "https://www.iterable.com", - "canonicalUrlId": "3145668988", - "city": "San Francisco", - "region": "CA", - "createdAt": "2016-12-02 20:31:39 +00:00", - "campaignId": 59667, - "messageId": "d0aa7801f91f4824997a631f3ed583c3", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "linkUrl": "https://www.iterable.com", - "linkId": "3145668988", - "emailId": "c59667:t93849:docs@iterable.com" - }, - "receivedAt": "2016-12-02T20:31:39.000Z", - "timestamp": "2016-12-02T20:31:39.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailComplaint", - "integrations": { - "Iterable": false - }, - "properties": { - "recipientState": "Complaint", - "templateId": 79190, - "createdAt": "2016-12-09 18:52:19 +00:00", - "campaignId": 49313, - "messageId": "d3c44d47b4994306b4db8d16a94db025", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "test template", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - }, - "receivedAt": "2016-12-09T18:52:19.000Z", - "timestamp": "2016-12-09T18:52:19.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailOpen", - "integrations": { - "Iterable": false - }, - "properties": { - "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", - "proxySource": "Gmail", - "ip": "66.249.84.204", - "templateId": 79190, - "device": "Gmail", - "createdAt": "2016-12-02 18:51:45 +00:00", - "campaignId": 49313, - "messageId": "210badf49fe54f2591d64ad0d055f4fb", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - }, - "receivedAt": "2016-12-02T18:51:45.000Z", - "timestamp": "2016-12-02T18:51:45.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailSendSkip", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2019-08-07 18:56:10 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 721398, - "messageId": "98430abe1b9842c991ce221010121553" - }, - "receivedAt": "2019-08-07T18:56:10.000Z", - "timestamp": "2019-08-07T18:56:10.000Z", - "type": "track" - }, - { - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test@rudderstack.com" - } - }, - "event": "emailSubscribe", - "integrations": { - "Iterable": false - }, - "properties": { - "channelIds": [], - "createdAt": "2022-04-19 03:33:50 +00:00", - "emailListIds": [1589748], - "messageTypeIds": [], - "profileUpdatedAt": "2022-04-19 03:33:50 +00:00", - "publicIdString": "ad474bf7-e785-480f-b9d0-861b85ab5bf5", - "signupSource": "WebForm" - }, - "receivedAt": "2022-04-19T03:33:50.000Z", - "timestamp": "2022-04-19T03:33:50.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailUnSubscribe", - "integrations": { - "Iterable": false - }, - "properties": { - "campaignId": 1089024, - "messageId": "bf008db8ab194b65816398c05bf30f99", - "emailId": "c1089024:t1526112:docs@iterable.com", - "workflowName": "My test workflow", - "messageTypeIds": [], - "locale": null, - "templateId": 1526112, - "emailSubject": "Upcoming events!", - "labels": [], - "unsubSource": "EmailLink", - "createdAt": "2020-03-20 23:34:15 +00:00", - "templateName": "My test template", - "emailListIds": [], - "messageTypeId": 31082, - "experimentId": null, - "channelIds": [27447], - "campaignName": "My test campaign", - "workflowId": 76786, - "channelId": 27447 - }, - "receivedAt": "2020-03-20T23:34:15.000Z", - "timestamp": "2020-03-20T23:34:15.000Z", - "type": "track" - }, - { - "userId": "1", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "hostedUnsubscribeClick", - "integrations": { - "Iterable": false - }, - "properties": { - "country": "United States", - "city": "San Jose", - "campaignId": 1074721, - "ip": "192.168.0.1", - "userAgentDevice": "Mac", - "messageId": "ceb3d4d929fc406ca93b28a0ef1efff1", - "emailId": "c1074721:t1506266:docs@iterable.com", - "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36", - "workflowName": "My workflow", - "locale": null, - "templateId": 1506266, - "emailSubject": "My email subject", - "url": "https://iterable.com", - "labels": [], - "createdAt": "2020-03-21 00:24:08 +00:00", - "templateName": "My email template", - "messageTypeId": 13406, - "experimentId": null, - "region": "CA", - "campaignName": "My email campaign", - "workflowId": 60102, - "channelId": 12466 - }, - "receivedAt": "2020-03-21T00:24:08.000Z", - "timestamp": "2020-03-21T00:24:08.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "inAppClick", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2018-03-27 00:44:40 +00:00", - "campaignId": 269450 - }, - "receivedAt": "2018-03-27T00:44:40.000Z", - "timestamp": "2018-03-27T00:44:40.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "inAppOpen", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2018-03-27 00:44:30 +00:00", - "campaignId": 269450 - }, - "receivedAt": "2018-03-27T00:44:30.000Z", - "timestamp": "2018-03-27T00:44:30.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "inAppSend", - "integrations": { - "Iterable": false - }, - "properties": { - "messageContext": { - "saveToInbox": false, - "trigger": "immediate" - }, - "campaignId": 732678, - "contentId": 18997, - "messageId": "vA16d48VVi4LQ5hMuZuquKzL0BXTdQJJUMJRjKnL1", - "workflowName": null, - "emailId": "c732678:t1032729:docs@iterable.com", - "locale": null, - "templateId": 1032729, - "inAppBody": "", - "createdAt": "2016-12-10 01:00:38 +00:00", - "campaignId": 74768, - "templateId": 113554, - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "yourpath/subpath" - }, - "sound": "", - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - }, - "receivedAt": "2016-12-10T01:00:38.000Z", - "timestamp": "2016-12-10T01:00:38.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "pushOpen", - "integrations": { - "Iterable": false - }, - "properties": { - "appAlreadyRunning": false, - "createdAt": "2016-12-08 01:25:22 +00:00", - "campaignId": 74768, - "templateId": 113554, - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "shop_home" - }, - "sound": null, - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - }, - "receivedAt": "2016-12-08T01:25:22.000Z", - "timestamp": "2016-12-08T01:25:22.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "pushSend", - "integrations": { - "Iterable": false - }, - "properties": { - "contentId": 6724, - "platformEndpoint": "", - "createdAt": "2016-12-08 00:53:11 +00:00", - "campaignId": 74758, - "templateId": 113541, - "messageId": "73f2d3f13cd04db0b56c6143b179adc5", - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 1744, - "messageTypeId": 1759, - "experimentId": null, - "payload": { - "a": "2" - }, - "sound": "", - "badge": "", - "contentAvailable": false, - "deeplink": null, - "locale": null - }, - "receivedAt": "2016-12-08T00:53:11.000Z", - "timestamp": "2016-12-08T00:53:11.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "pushSendSkip", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2019-08-07 22:28:51 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 732667, - "messageId": "8306ae0c74324635b7554947c5ec0e56" - }, - "receivedAt": "2019-08-07T22:28:51.000Z", - "timestamp": "2019-08-07T22:28:51.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "pushUninstall", - "integrations": { - "Iterable": false - }, - "properties": { - "isGhostPush": false, - "platformEndpoint": "", - "createdAt": "2016-12-09 20:50:54 +00:00", - "campaignId": 74768, - "templateId": 113554, - "messageId": "73f2d3f13cd04db0b56c6143b179adc5", - "pushMessage": "Push message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 2203, - "messageTypeId": 2439, - "experimentId": null, - "payload": { - "path": "your_folder/30" - }, - "sound": "", - "badge": null, - "contentAvailable": false, - "deeplink": null, - "locale": null - }, - "receivedAt": "2016-12-09T20:50:54.000Z", - "timestamp": "2016-12-09T20:50:54.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "smsBounce", - "integrations": { - "Iterable": false - }, - "properties": { - "smsProviderResponse": { - "status": 404, - "message": "The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found", - "code": 20404, - "more_info": "https://www.twilio.com/docs/errors/20404" - }, - "createdAt": "2016-12-05 22:43:24 +00:00", - "campaignId": 74003, - "templateId": 112561, - "smsMessage": "Here is example message, please respond with 'received'", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 4270, - "messageTypeId": 4769, - "experimentId": null, - "fromPhoneNumberId": 268, - "imageUrl": null, - "locale": null, - "emailId": "c74003:t112561:docs@iterable.com" - }, - "receivedAt": "2016-12-05T22:43:24.000Z", - "timestamp": "2016-12-05T22:43:24.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "smsClick", - "integrations": { - "Iterable": false - }, - "properties": { - "campaignId": 1234567, - "campaignName": "My test campaign", - "workflowId": null, - "workflowName": null, - "templateName": "My template", - "locale": null, - "channelId": 98765, - "messageTypeId": 43210, - "experimentId": null, - "labels": [], - "smsMessage": "Test SMS! https://www.example.com", - "fromPhoneNumberId": 1234, - "imageUrl": null, - "clickedUrl": "https://www.example.com", - "createdAt": "2022-03-10 05:00:14 +00:00", - "templateId": 1112222, - "messageId": "ebd8f3cfc1f74353b423c5e0f3dd8b39", - "emailId": "c1234567:t9876543:docs@iterable.com" - }, - "receivedAt": "2022-03-10T05:00:14.000Z", - "timestamp": "2022-03-10T05:00:14.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "smsReceived", - "integrations": { - "Iterable": false - }, - "properties": { - "fromPhoneNumber": "+16503926753", - "toPhoneNumber": "+14155824541", - "smsMessage": "Message text", - "createdAt": "2016-12-05 22:51:25 +00:00" - }, - "receivedAt": "2016-12-05T22:51:25.000Z", - "timestamp": "2016-12-05T22:51:25.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "smsSend", - "integrations": { - "Iterable": false - }, - "properties": { - "toPhoneNumber": "+16503926753", - "fromSMSSenderId": 258, - "contentId": 2086, - "createdAt": "2016-12-05 21:50:32 +00:00", - "campaignId": 73974, - "templateId": 112523, - "smsMessage": "Message text", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 4270, - "messageTypeId": 4769, - "experimentId": null, - "fromPhoneNumberId": 258, - "imageUrl": null, - "locale": null, - "emailId": "c73974:t112523:docs@iterable.com" - }, - "receivedAt": "2016-12-05T21:50:32.000Z", - "timestamp": "2016-12-05T21:50:32.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "smsSendSkip", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2019-08-07 18:49:48 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 729390, - "messageId": "2c780bf42f26485db0fc6571d2e0f6a0" - }, - "receivedAt": "2019-08-07T18:49:48.000Z", - "timestamp": "2019-08-07T18:49:48.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "emailSend", - "integrations": { - "Iterable": false - }, - "properties": { - "contentId": 274222, - "createdAt": "2016-12-02 18:51:40 +00:00", - "campaignId": 49313, - "transactionalData": { - "__comment": "transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total." - }, - "templateId": 79190, - "messageId": "210badf49fe54f2591d64ad0d055f4fb", - "emailSubject": "My subject", - "campaignName": "My campaign name", - "workflowId": null, - "workflowName": null, - "templateName": "My template name", - "channelId": 3420, - "messageTypeId": 3866, - "experimentId": null, - "emailId": "c49313:t79190:docs@iterable.com" - }, - "receivedAt": "2016-12-02T18:51:40.000Z", - "timestamp": "2016-12-02T18:51:40.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "webPushSend", - "integrations": { - "Iterable": false - }, - "properties": { - "campaignId": 723636, - "browserToken": "cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b", - "contentId": 3681, - "messageId": "af4c726ae76b48c7871b6d0d7760d47c", - "workflowName": "My workflow name", - "emailId": "c723636:t1020396:docs@iterable.com", - "locale": null, - "webPushIcon": null, - "templateId": 1020396, - "labels": [], - "createdAt": "2019-08-07 23:43:02 +00:00", - "templateName": "My template name", - "webPushMessage": "", - "messageTypeId": 9106, - "webPushBody": null, - "experimentId": null, - "webPushClickAction": null, - "campaignName": "My campaign name", - "workflowId": 53505, - "channelId": 8539 - }, - "receivedAt": "2019-08-07T23:43:02.000Z", - "timestamp": "2019-08-07T23:43:02.000Z", - "type": "track" - }, - { - "userId": "0e13848b1c7e27eb5d88c5d35b70783e", - "context": { - "integration": { - "name": "Iterable", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "docs@iterable.com" - } - }, - "event": "webPushSendSkip", - "integrations": { - "Iterable": false - }, - "properties": { - "createdAt": "2019-08-07 23:43:48 +00:00", - "reason": "DuplicateMarketingMessage", - "campaignId": 723636, - "messageId": "4238c918b20a41dfbe9a910275b76f12" - }, - "receivedAt": "2019-08-07T23:43:48.000Z", - "timestamp": "2019-08-07T23:43:48.000Z", - "type": "track" - } -] diff --git a/test/__tests__/data/mailjet_source.json b/test/__tests__/data/mailjet_source.json deleted file mode 100644 index 6d9562e2c4..0000000000 --- a/test/__tests__/data/mailjet_source.json +++ /dev/null @@ -1,369 +0,0 @@ -[ - { - "description": "MailJet email open event", - "input": [ - { - "event": "open", - "time": 1664443614, - "MessageID": 94857068804950690, - "Message_GUID": "54d6cdec-f659-4547-8926-13d9c4126b82", - "email": "test@rudderstack.com", - "mj_campaign_id": 108760, - "mj_contact_id": 399962859, - "customcampaign": "mj.nl=58424", - "ip": "66.249.84.231", - "geo": "US", - "agent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", - "CustomID": "", - "Payload": "" - } - ], - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "test@rudderstack.com" - }, - "ip": "66.249.84.231", - "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", - "externalId": [ - { - "type": "mailjetContactId", - "id": 399962859 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "open", - "properties": { - "ip": "66.249.84.231", - "customcampaign": "mj.nl=58424", - "mj_campaign_id": 108760, - "Payload": "" - }, - "originalTimestamp": "2022-09-29T09:26:54.000Z", - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" - } - ] - }, - { - "description": "MailJet email bounce event where input event is of type ", - "input": { - "event": "bounce", - "time": 1664444171, - "MessageID": 55169098999352350, - "Message_GUID": "447d7eab-3335-4aba-9a51-09454bc14b81", - "email": "test@rudderstack.com", - "mj_campaign_id": 108892, - "mj_contact_id": 373142816, - "customcampaign": "mj.nl=58486", - "blocked": false, - "hard_bounce": false, - "error_related_to": "system", - "error": "connection issue" - }, - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "test@rudderstack.com" - }, - "externalId": [ - { - "type": "mailjetContactId", - "id": 373142816 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "bounce", - "properties": { - "customcampaign": "mj.nl=58486", - "mj_campaign_id": 108892 - }, - "originalTimestamp": "2022-09-29T09:36:11.000Z", - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" - } - ] - }, - { - "description": "MailJet email sent event", - "input": [ - { - "event": "sent", - "time": 1664444171, - "MessageID": 92886743924596480, - "Message_GUID": "0230c73a-2b77-4aea-8ef2-ed15d0edc5fd", - "email": "test@rudderstack.com", - "mj_campaign_id": 108892, - "mj_contact_id": 372651182, - "customcampaign": "mj.nl=58486", - "smtp_reply": "250 2.0.0 OK DMARC:Quarantine 1664444171 u17-20020adfdd51000000b0022cc3f2bf13si3225188wrm.271 - gsmtp" - } - ], - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "test@rudderstack.com" - }, - "externalId": [ - { - "type": "mailjetContactId", - "id": 372651182 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "sent", - "properties": { - "customcampaign": "mj.nl=58486", - "mj_campaign_id": 108892 - }, - "originalTimestamp": "2022-09-29T09:36:11.000Z", - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" - } - ] - }, - { - "description": "MailJet email bounce event", - "input": [ - { - "event": "bounce", - "time": 1664444170, - "MessageID": 56013522696710744, - "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", - "email": "test@rudderstack.com", - "mj_campaign_id": 108892, - "mj_contact_id": 373142182, - "customcampaign": "mj.nl=58486", - "blocked": false, - "hard_bounce": false, - "error_related_to": "system", - "error": "connection issue" - } - ], - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "test@rudderstack.com" - }, - "externalId": [ - { - "type": "mailjetContactId", - "id": 373142182 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "bounce", - "properties": { - "customcampaign": "mj.nl=58486", - "mj_campaign_id": 108892 - }, - "originalTimestamp": "2022-09-29T09:36:10.000Z", - "userId": "5b6a3426dba2cb24e4f0aeec43bee9d7" - } - ] - }, - { - "description": "MailJet when no email is present", - "input": [ - { - "event": "bounce", - "time": 1664444170, - "MessageID": 56013522696710744, - "Message_GUID": "dbe4f0a3-4a5a-4784-a724-a9794d3c0444", - "mj_campaign_id": 108892, - "mj_contact_id": 373142182, - "customcampaign": "mj.nl=58486", - "blocked": false, - "hard_bounce": false, - "error_related_to": "system", - "error": "connection issue" - } - ], - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "MailJet" - }, - "externalId": [ - { - "type": "mailjetContactId", - "id": 373142182 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "bounce", - "properties": { - "customcampaign": "mj.nl=58486", - "mj_campaign_id": 108892 - }, - "originalTimestamp": "2022-09-29T09:36:10.000Z" - } - ] - }, - { - "description": "MailJet Multiple payloads in single request", - "input": [ - { - "event": "open", - "time": 1704458040, - "MessageID": 987654, - "Message_GUID": "876r-oihugyf-7tfygh", - "email": "abc@r.com", - "mj_campaign_id": 321, - "mj_contact_id": 123, - "customcampaign": "test_campaign", - "url": "https://www.example.com/", - "ip": "ip_info", - "geo": "some geo info", - "agent": "mailjet api test" - }, - { - "event": "click", - "time": 1704458041, - "MessageID": 12345234567, - "Message_GUID": "12345-kjhgfd-2efv", - "email": "abc@r.com", - "mj_campaign_id": 12, - "mj_contact_id": 32532, - "customcampaign": "test_campaign", - "url": "https://www.example.com/", - "ip": "ip_info", - "geo": "some geo info", - "agent": "mailjet api test" - } - ], - "output": [ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "ip": "ip_info", - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "abc@r.com" - }, - "page": { - "url": "https://www.example.com/" - }, - "userAgent": "mailjet api test", - "externalId": [ - { - "type": "mailjetContactId", - "id": 123 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "open", - "properties": { - "customcampaign": "test_campaign", - "mj_campaign_id": 321, - "ip": "ip_info", - "url": "https://www.example.com/" - }, - "userId": "593a5aff0b445b3b77a6d9676b7ec86e", - "originalTimestamp": "2024-01-05T12:34:00.000Z" - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "page": { - "url": "https://www.example.com/" - }, - - "integration": { - "name": "MailJet" - }, - "traits": { - "email": "abc@r.com" - }, - "userAgent": "mailjet api test", - "ip": "ip_info", - "externalId": [ - { - "type": "mailjetContactId", - "id": 32532 - } - ] - }, - "integrations": { - "MailJet": false - }, - "type": "track", - "event": "click", - "properties": { - "customcampaign": "test_campaign", - "mj_campaign_id": 12, - "ip": "ip_info", - "url": "https://www.example.com/" - }, - "userId": "593a5aff0b445b3b77a6d9676b7ec86e", - "originalTimestamp": "2024-01-05T12:34:01.000Z" - } - ] - } -] diff --git a/test/__tests__/data/mailmodo_source_input.json b/test/__tests__/data/mailmodo_source_input.json deleted file mode 100644 index 5ecc44b8f2..0000000000 --- a/test/__tests__/data/mailmodo_source_input.json +++ /dev/null @@ -1,153 +0,0 @@ -[ - { - "triggerData": { - "data": {}, - "triggerSource": "CsvList", - "email": "gouhgc@mailmodo.com", - "triggerDetails": "file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e", - "userId": "d3775892hvh4f2f-b9d5-e49810eb2cae", - "journeyId": "1a69df39hgvh4e0b-8b5c-73776157aa37", - "eventProperty": {} - } - }, - { - "fuuid": "27905", - "next-step-id": "success", - "total-steps": "3", - "responseId": "b9a5d224-cc5a-4e64-9800-5a3db9515fdf", - "recipientEmail": "test.rudderlabs21997@gmail.com", - "formId": "formosztd5", - "recordedAt": { - "ts": 1662695704, - "date": "2022-09-09", - "hour": 9, - "minute": 25 - }, - "submissionSource": "amp", - "elementjbtz42": "Everything ", - "element8jzo13": ["Reliable", "High Quality", "Useful"], - "recipientData": { - "email": "test.rudderlabs21997@gmail.com" - }, - "recommend": "9", - "liking": "upvote", - "satisfaction": "4", - "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", - "campaignName": "Campaign-testing" - }, - { - "triggerData": { - "data": {}, - "triggerSource": "Manual Add To List", - "email": "gou****@mailmodo.com", - "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "journeyId": "349e986e-f56c-****-bc3b-b5f13c3e34da", - "eventProperty": {} - } - }, - { - "triggerData": { - "data": {}, - "triggerSource": "Dashboard-change in property: first_name", - "email": "gou****@mailmodo.com", - "userId": "cc56708d-****-****-8c07-a4bfa5a7b79b", - "journeyId": "a78d7221-de34-47d8-81c6-5ad70cf4ee38", - "eventProperty": {} - } - }, - { - "triggerData": { - "data": {}, - "formSubmissionData": { - "element6ehxt3": "Te**", - "element6jkcy4": "Bang****", - "fuuid": "47949", - "next-step-id": "step7tr7n2", - "total-steps": "3", - "responseId": "4a8bfda7-****-4a8c-9cd1-a30d30a6dab9", - "recipientEmail": "gou****@mailmodo.com", - "formId": "formmqxnu2", - "recordedAt": { - "ts": 1657097786, - "date": "2022-07-06", - "hour": 14, - "minute": 26 - }, - "submissionSource": "amp" - }, - "email": "gou****@mailmodo.com", - "triggerSource": "form submission", - "userId": "11bff3e8-****-4e93-a533-fd8f9defc768", - "journeyId": "03664747-****-412e-8790-de9e9abe96a5", - "eventProperty": {} - } - }, - { - "triggerData": { - "data": {}, - "eventProperty": { - "Name": "APPLE iPhone 13 (Blue, 128 GB)", - "Category": "Mobiles", - "Is Purchased": "false", - "Price": "829", - "Currency": "USD" - }, - "triggerSource": "New Custom Event Trigger - Product Viewed", - "email": "gou****@mailmodo.com", - "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "journeyId": "3f135bf7-****-4e31-b265-f61cfe1bd423" - } - }, - { - "triggerData": { - "email": "gou****@mailmodo.com", - "data": {}, - "userId": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "journeyId": "b1ee6bf6-****-4b5a-b7b5-0637853cd8c3", - "triggerSource": "Api", - "eventProperty": {} - } - }, - { - "eventData": { - "type": "html" - }, - "triggerData": { - "data": {}, - "triggerSource": "CsvList", - "email": "gou****@mailmodo.com", - "triggerDetails": "file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af", - "userId": "cc56708d-****-4fea-8c07-a4bfa5a7b79b", - "journeyId": "5d31c2b4-****-4a84-acd3-834cae80231b", - "eventProperty": {} - }, - "lastCampaignEmailRef": "064c76e7-****-4780-a001-226c066aaa12", - "lastCampaignId": "31422f76-****-4a72-a630-dd6f9f615bc3" - }, - { - "fuuid": "98255", - "next-step-id": "success", - "total-steps": "3", - "responseId": "ad20a980-4fce-44b6-887d-2236df514a76", - "recipientEmail": "test@rudderstack.com", - "formId": "formosztd5", - "recordedAt": { - "ts": 1662695887, - "date": "2022-09-09", - "hour": 9, - "minute": 28 - }, - "submissionSource": "amp", - "elementjbtz42": "peace", - "element8jzo13": ["Useful"], - "recipientData": { - "email": "test@rudderstack.com", - "first_name": "abcda" - }, - "recommend": "1", - "liking": "downvote", - "satisfaction": "1", - "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", - "campaignName": "Campaign-testing" - } -] diff --git a/test/__tests__/data/mailmodo_source_output.json b/test/__tests__/data/mailmodo_source_output.json deleted file mode 100644 index 3ffcf147f1..0000000000 --- a/test/__tests__/data/mailmodo_source_output.json +++ /dev/null @@ -1,315 +0,0 @@ -[ - { - "anonymousId": "f43848cce166e51b097cbed2851adc16ed9d4c341928f1c790215c50cefb59b0", - "context": { - "externalId": [ - { - "id": "d3775892hvh4f2f-b9d5-e49810eb2cae", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gouhgc@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "CsvList", - "integrations": { - "Mailmodo": false - }, - "properties": { - "triggerData.triggerSource": "CsvList", - "triggerData.triggerDetails": "file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e", - "triggerData.journeyId": "1a69df39hgvh4e0b-8b5c-73776157aa37" - }, - "type": "track" - }, - { - "anonymousId": "a80b34ec43ca959c7b8e5116ac626c3cf8561f62616e000a01729a8a900cc0a0", - "context": { - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test.rudderlabs21997@gmail.com" - } - }, - "event": "Form Submitted", - "integrations": { - "Mailmodo": false - }, - "originalTimestamp": "2022-09-09T03:55:04.000Z", - "properties": { - "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", - "campaignName": "Campaign-testing", - "element8jzo13[0]": "Reliable", - "element8jzo13[1]": "High Quality", - "element8jzo13[2]": "Useful", - "elementjbtz42": "Everything ", - "formId": "formosztd5", - "fuuid": "27905", - "liking": "upvote", - "next-step-id": "success", - "recommend": "9", - "responseId": "b9a5d224-cc5a-4e64-9800-5a3db9515fdf", - "satisfaction": "4", - "submissionSource": "amp", - "total-steps": "3" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "Manual Add To List", - "integrations": { - "Mailmodo": false - }, - "properties": { - "triggerData.triggerSource": "Manual Add To List", - "triggerData.journeyId": "349e986e-f56c-****-bc3b-b5f13c3e34da" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "cc56708d-****-****-8c07-a4bfa5a7b79b", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "Dashboard-change in property: first_name", - "integrations": { - "Mailmodo": false - }, - "properties": { - "triggerData.triggerSource": "Dashboard-change in property: first_name", - "triggerData.journeyId": "a78d7221-de34-47d8-81c6-5ad70cf4ee38" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "11bff3e8-****-4e93-a533-fd8f9defc768", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "form submission", - "integrations": { - "Mailmodo": false - }, - "originalTimestamp": "2022-07-06T08:56:26.000Z", - "properties": { - "triggerData.triggerSource": "form submission", - "triggerData.formSubmissionData.element6ehxt3": "Te**", - "triggerData.formSubmissionData.element6jkcy4": "Bang****", - "triggerData.formSubmissionData.formId": "formmqxnu2", - "triggerData.formSubmissionData.fuuid": "47949", - "triggerData.formSubmissionData.next-step-id": "step7tr7n2", - "triggerData.formSubmissionData.responseId": "4a8bfda7-****-4a8c-9cd1-a30d30a6dab9", - "triggerData.formSubmissionData.submissionSource": "amp", - "triggerData.formSubmissionData.total-steps": "3", - "triggerData.journeyId": "03664747-****-412e-8790-de9e9abe96a5" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "New Custom Event Trigger - Product Viewed", - "integrations": { - "Mailmodo": false - }, - "properties": { - "triggerData.eventProperty.Category": "Mobiles", - "triggerData.eventProperty.Currency": "USD", - "triggerData.eventProperty.Is Purchased": "false", - "triggerData.eventProperty.Name": "APPLE iPhone 13 (Blue, 128 GB)", - "triggerData.eventProperty.Price": "829", - "triggerData.journeyId": "3f135bf7-****-4e31-b265-f61cfe1bd423", - "triggerData.triggerSource": "New Custom Event Trigger - Product Viewed" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "d3775892-****-4f2f-b9d5-e49810eb2cae", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "Api", - "integrations": { - "Mailmodo": false - }, - "properties": { - "triggerData.triggerSource": "Api", - "triggerData.journeyId": "b1ee6bf6-****-4b5a-b7b5-0637853cd8c3" - }, - "type": "track" - }, - { - "anonymousId": "26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92", - "context": { - "externalId": [ - { - "id": "cc56708d-****-4fea-8c07-a4bfa5a7b79b", - "type": "mailmodoUserId" - } - ], - "traits": { - "email": "gou****@mailmodo.com" - }, - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "event": "CsvList", - "integrations": { - "Mailmodo": false - }, - "properties": { - "eventData.type": "html", - "lastCampaignEmailRef": "064c76e7-****-4780-a001-226c066aaa12", - "lastCampaignId": "31422f76-****-4a72-a630-dd6f9f615bc3", - "triggerData.journeyId": "5d31c2b4-****-4a84-acd3-834cae80231b", - "triggerData.triggerDetails": "file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af", - "triggerData.triggerSource": "CsvList" - }, - "type": "track" - }, - { - "anonymousId": "1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd", - "context": { - "integration": { - "name": "Mailmodo", - "version": "1.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "email": "test@rudderstack.com", - "first_name": "abcda" - } - }, - "event": "Form Submitted", - "integrations": { - "Mailmodo": false - }, - "originalTimestamp": "2022-09-09T03:58:07.000Z", - "properties": { - "fuuid": "98255", - "next-step-id": "success", - "total-steps": "3", - "responseId": "ad20a980-4fce-44b6-887d-2236df514a76", - "formId": "formosztd5", - "submissionSource": "amp", - "elementjbtz42": "peace", - "element8jzo13[0]": "Useful", - "recommend": "1", - "liking": "downvote", - "satisfaction": "1", - "campaignId": "0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd", - "campaignName": "Campaign-testing" - }, - "type": "track" - } -] diff --git a/test/__tests__/data/monday_source_input.json b/test/__tests__/data/monday_source_input.json deleted file mode 100644 index bb4f729460..0000000000 --- a/test/__tests__/data/monday_source_input.json +++ /dev/null @@ -1,125 +0,0 @@ -[ - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3139815405, - "pulseId": 3160188786, - "pulseName": "New Sprint Item", - "groupId": "topics", - "groupName": "Group Title", - "groupColor": "#579bfc", - "isTopGroup": true, - "columnValues": {}, - "app": "monday", - "type": "create_pulse", - "triggerTime": "2022-08-30T09:02:39.191Z", - "subscriptionId": 150881106, - "triggerUuid": "049869226bf6711705c62e301a2c3eee" - } - }, - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3139815405, - "itemId": 3160188786, - "itemName": "New Sprint Item", - "app": "monday", - "type": "delete_pulse", - "triggerTime": "2022-08-30T09:06:09.176Z", - "subscriptionId": 150882006, - "triggerUuid": "4e4f87c8255c4ba4ba2f5e9934cb6d40" - } - }, - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3139815405, - "groupId": "topics", - "pulseId": 3160181387, - "pulseName": "New Sprint Item", - "columnId": "status", - "columnType": "color", - "columnTitle": "Status", - "value": { - "label": { - "index": 1, - "text": "Done", - "style": { - "color": "#00c875", - "border": "#00B461", - "var_name": "green-shadow" - }, - "is_done": true - }, - "post_id": null - }, - "previousValue": null, - "changedAt": 1661859406.8970098, - "isTopGroup": true, - "app": "monday", - "type": "update_column_value", - "triggerTime": "2022-08-30T11:36:47.406Z", - "subscriptionId": 150894742, - "triggerUuid": "51730730740a9d00ec45203bd392a9bd" - } - }, - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3139815405, - "groupId": "topics", - "pulseId": 3160181387, - "value": { - "name": "New Sprint Item renamed" - }, - "previousValue": { - "name": "New Sprint Item" - }, - "app": "monday", - "type": "update_name", - "triggerTime": "2022-08-30T11:40:17.351Z", - "subscriptionId": 150910867, - "triggerUuid": "05ce13d32d0256c4fb7dd5de25b1a1ba" - } - }, - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3160805239, - "pulseId": 3161163765, - "pulseName": "new subitem", - "groupId": "topics", - "groupName": "Subitems", - "groupColor": "#579bfc", - "isTopGroup": true, - "columnValues": {}, - "app": "monday", - "type": "create_pulse", - "triggerTime": "2022-08-30T12:56:27.281Z", - "subscriptionId": 150911592, - "triggerUuid": "70a2219427804e47a508a91b5c244543", - "parentItemId": "3160181387", - "parentItemBoardId": "3139815405", - "itemId": 3161163765 - } - }, - { - "event": { - "userId": 33556506, - "originalTriggerUuid": null, - "boardId": 3139815405, - "itemId": 3160181387, - "itemName": "New Sprint Item renamed", - "app": "monday", - "type": "archive_pulse", - "triggerTime": "2022-08-30T12:58:15.844Z", - "subscriptionId": 150925947, - "triggerUuid": "aa8bd5dbb6fd592aedd57322dd776379" - } - } -] diff --git a/test/__tests__/data/monday_source_output.json b/test/__tests__/data/monday_source_output.json deleted file mode 100644 index cf636d818a..0000000000 --- a/test/__tests__/data/monday_source_output.json +++ /dev/null @@ -1,251 +0,0 @@ -[ - { - "type": "track", - "event": "Create Pulse", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T09:02:39.191Z", - "properties": { - "app": "monday", - "type": "create_pulse", - "boardId": 3139815405, - "groupId": "topics", - "pulseId": 3160188786, - "groupName": "Group Title", - "pulseName": "New Sprint Item", - "groupColor": "#579bfc", - "isTopGroup": true, - "triggerUuid": "049869226bf6711705c62e301a2c3eee", - "columnValues": {}, - "subscriptionId": 150881106, - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T09:02:39.191Z" - }, - { - "type": "track", - "event": "Delete Pulse", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T09:06:09.176Z", - "properties": { - "app": "monday", - "type": "delete_pulse", - "itemId": 3160188786, - "boardId": 3139815405, - "itemName": "New Sprint Item", - "triggerUuid": "4e4f87c8255c4ba4ba2f5e9934cb6d40", - "subscriptionId": 150882006, - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T09:06:09.176Z" - }, - { - "type": "track", - "event": "Update Column Value", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T11:36:47.406Z", - "properties": { - "app": "monday", - "type": "update_column_value", - "value": { - "label": { - "text": "Done", - "index": 1, - "style": { - "color": "#00c875", - "border": "#00B461", - "var_name": "green-shadow" - }, - "is_done": true - }, - "post_id": null - }, - "boardId": 3139815405, - "groupId": "topics", - "pulseId": 3160181387, - "columnId": "status", - "changedAt": 1661859406.8970098, - "pulseName": "New Sprint Item", - "columnType": "color", - "isTopGroup": true, - "columnTitle": "Status", - "triggerUuid": "51730730740a9d00ec45203bd392a9bd", - "previousValue": null, - "subscriptionId": 150894742, - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T11:36:47.406Z" - }, - { - "type": "track", - "event": "Update Name", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T11:40:17.351Z", - "properties": { - "app": "monday", - "type": "update_name", - "value": { - "name": "New Sprint Item renamed" - }, - "boardId": 3139815405, - "groupId": "topics", - "pulseId": 3160181387, - "triggerUuid": "05ce13d32d0256c4fb7dd5de25b1a1ba", - "previousValue": { - "name": "New Sprint Item" - }, - "subscriptionId": 150910867, - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T11:40:17.351Z" - }, - { - "type": "track", - "event": "Create Pulse", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T12:56:27.281Z", - "properties": { - "app": "monday", - "type": "create_pulse", - "itemId": 3161163765, - "boardId": 3160805239, - "groupId": "topics", - "pulseId": 3161163765, - "groupName": "Subitems", - "pulseName": "new subitem", - "groupColor": "#579bfc", - "isTopGroup": true, - "triggerUuid": "70a2219427804e47a508a91b5c244543", - "columnValues": {}, - "parentItemId": "3160181387", - "subscriptionId": 150911592, - "parentItemBoardId": "3139815405", - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T12:56:27.281Z" - }, - { - "type": "track", - "event": "Archive Pulse", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "externalId": [ - { - "id": 33556506, - "type": "mondayUserId" - } - ], - "integration": { - "name": "MONDAY" - } - }, - "timestamp": "2022-08-30T12:58:15.844Z", - "properties": { - "app": "monday", - "type": "archive_pulse", - "itemId": 3160181387, - "boardId": 3139815405, - "itemName": "New Sprint Item renamed", - "triggerUuid": "aa8bd5dbb6fd592aedd57322dd776379", - "subscriptionId": 150925947, - "originalTriggerUuid": null - }, - "anonymousId": "6f0a3dc76a335860e17fa1d8ab779742e2ca", - "integrations": { - "MONDAY": false - }, - "originalTimestamp": "2022-08-30T12:58:15.844Z" - } -] diff --git a/test/__tests__/data/olark_source.json b/test/__tests__/data/olark_source.json deleted file mode 100644 index 96707bfbb2..0000000000 --- a/test/__tests__/data/olark_source.json +++ /dev/null @@ -1,299 +0,0 @@ -[ - { - "description": "Olark webhook response", - "input": { - "kind": "Conversation", - "id": "ho6HrHxoabmm6q0G103JU0JFaor0BobA", - "manuallySubmitted": false, - "items": [ - { - "kind": "OfflineMessage", - "timestamp": "1669285628.796693", - "body": "name: test rudderlabs\nemail: ruddertest@gmail.com\nMessage: I am Fine" - } - ], - "tags": [], - "visitor": { - "kind": "Visitor", - "id": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", - "fullName": "test", - "emailAddress": "ruddertest@gmail.com", - "ip": "", - "country": "India", - "countryCode": "IN", - "browser": "Chrome 105.0.0.0", - "operatingSystem": "Macintosh", - "conversationBeginPage": "http://localhost:5503/" - } - }, - "output": [ - { - "type": "track", - "event": "Conversation", - "traits": {}, - "userId": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", - "context": { - "os": { - "name": "Macintosh" - }, - "page": { - "url": "http://localhost:5503/" - }, - "traits": { - "name": "test", - "email": "ruddertest@gmail.com", - "country": "India" - }, - "browser": { - "name": "Chrome", - "version": "105.0.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Olark" - } - }, - "properties": { - "tags": [], - "items": [ - { - "body": "name: test rudderlabs\nemail: ruddertest@gmail.com\nMessage: I am Fine", - "kind": "OfflineMessage", - "timestamp": "1669285628.796693" - } - ] - }, - "integrations": { - "Olark": false - } - } - ] - }, - { - "description": "Olark webhook response", - "input": { - "kind": "Conversation", - "id": "NOTAREALTRANSCRIPT5LGcbVTa3hKBRB", - "manuallySubmitted": false, - "items": [ - { - "kind": "MessageToVisitor", - "nickname": "Olark operator", - "operatorId": "6208911878914048", - "timestamp": "1473774819.263083", - "body": "Hi from an operator" - }, - { - "kind": "MessageToOperator", - "nickname": "Returning Visitor | USA (San Francisco, CA) #7617", - "timestamp": "1473774821.411154", - "body": "Hi from a visitor", - "visitor_nickname": "Olark Visitor" - } - ], - "tags": ["test_example"], - "visitor": { - "kind": "Visitor", - "id": "NOTAREALVISITORIDS5LGl6QUrK2OaPP", - "fullName": "Olark", - "phoneNumber": "5555555555", - "emailAddress": "support+integrationtest@olark.com", - "ip": "", - "city": "San Francisco", - "region": "CA", - "country": "United States", - "countryCode": "US", - "organization": "Visitor Organization", - "browser": "Internet Explorer 11", - "operatingSystem": "Windows", - "referrer": "http://www.olark.com", - "conversationBeginPage": "http://www.olark.com", - "chat_feedback": { - "overall_chat": 4, - "responsiveness": 5, - "knowledge": 4, - "friendliness": 5 - } - }, - "operators": { - "6208911878914048": { - "kind": "Operator", - "id": "6208911878914048", - "nickname": "integration", - "emailAddress": "integration-accounts@rudderstack.com", - "username": "integration-accounts-92750bc547" - } - } - }, - "output": [ - { - "type": "track", - "event": "Conversation", - "traits": { - "organization": "Visitor Organization", - "chat_feedback": { - "knowledge": 4, - "friendliness": 5, - "overall_chat": 4, - "responsiveness": 5 - } - }, - "userId": "NOTAREALVISITORIDS5LGl6QUrK2OaPP", - "context": { - "os": { - "name": "Windows" - }, - "page": { - "url": "http://www.olark.com", - "referrer": "http://www.olark.com" - }, - "traits": { - "city": "San Francisco", - "name": "Olark", - "email": "support+integrationtest@olark.com", - "phone": "5555555555", - "region": "CA", - "country": "United States" - }, - "browser": { - "name": "Internet Explorer", - "version": "11" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Olark" - } - }, - "properties": { - "tags": ["test_example"], - "items": [ - { - "body": "Hi from an operator", - "kind": "MessageToVisitor", - "nickname": "Olark operator", - "timestamp": "1473774819.263083", - "operatorId": "6208911878914048" - }, - { - "body": "Hi from a visitor", - "kind": "MessageToOperator", - "nickname": "Returning Visitor | USA (San Francisco, CA) #7617", - "timestamp": "1473774821.411154", - "visitor_nickname": "Olark Visitor" - } - ] - }, - "integrations": { - "Olark": false - } - } - ] - }, - { - "description": "Olark webhook response", - "input": { - "kind": "Conversation", - "id": "ho6HrHxoabmm6q0G103JU0JFaor0BobA", - "manuallySubmitted": false, - "items": [ - { - "kind": "OfflineMessage", - "timestamp": "1669288532.567071", - "body": "name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv" - } - ], - "tags": [], - "groups": [ - { - "kind": "Group", - "id": "ca77f4296fb7568909ad864aebf48201", - "name": "Group 1" - } - ], - "visitor": { - "kind": "Visitor", - "id": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", - "fullName": "test rudderstack", - "emailAddress": "rudder14@gmail.com", - "ip": "", - "country": "India", - "countryCode": "IN", - "browser": "Chrome 105.0.0.0", - "operatingSystem": "Macintosh", - "conversationBeginPage": "http://localhost:5503/" - } - }, - "output": [ - { - "type": "track", - "event": "Conversation", - "traits": {}, - "userId": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", - "context": { - "os": { - "name": "Macintosh" - }, - "page": { - "url": "http://localhost:5503/" - }, - "traits": { - "name": "test rudderstack", - "email": "rudder14@gmail.com", - "country": "India" - }, - "browser": { - "name": "Chrome", - "version": "105.0.0.0" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Olark" - } - }, - "properties": { - "tags": [], - "items": [ - { - "body": "name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv", - "kind": "OfflineMessage", - "timestamp": "1669288532.567071" - } - ] - }, - "integrations": { - "Olark": false - } - }, - { - "name": "Group 1", - "type": "group", - "traits": { - "kind": "Group" - }, - "userId": "45WjM9eMYwJ7cJMo103JU0JaForAA6Db", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Olark" - } - }, - "groupId": "ca77f4296fb7568909ad864aebf48201", - "integrations": { - "Olark": false - } - } - ] - } -] diff --git a/test/__tests__/data/pagerduty_source.json b/test/__tests__/data/pagerduty_source.json deleted file mode 100644 index 0d116cff9b..0000000000 --- a/test/__tests__/data/pagerduty_source.json +++ /dev/null @@ -1,639 +0,0 @@ -[ - { - "description": "Incident Triggered", - "input": { - "event": { - "id": "01DEN0V2VIFEN5871PQGX72URP", - "event_type": "incident.triggered", - "resource_type": "incident", - "occurred_at": "2022-12-07T10:56:52.337Z", - "agent": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "client": { - "name": "Monitoring Service", - "url": "https://monitoring.service.com" - }, - "data": { - "id": "Q3S7IX2U5KTCOY", - "type": "incident", - "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "number": 2, - "status": "triggered", - "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", - "created_at": "2022-12-07T10:56:52Z", - "title": "Server Crashed", - "service": { - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "summary": "Database", - "type": "service_reference" - }, - "assignees": [ - { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - } - ], - "escalation_policy": { - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "summary": "Default", - "type": "escalation_policy_reference" - }, - "teams": [], - "priority": { - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "summary": "P1", - "type": "priority_reference" - }, - "urgency": "high", - "conference_bridge": null, - "resolve_reason": null - } - } - }, - "output": { - "type": "track", - "event": "Incident Triggered", - "userId": "PXZZD2E", - "context": { - "traits": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "PagerDuty" - } - }, - "messageId": "01DEN0V2VIFEN5871PQGX72URP", - "properties": { - "data": { - "id": "Q3S7IX2U5KTCOY", - "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "type": "incident", - "teams": [], - "title": "Server Crashed", - "number": 2, - "status": "triggered", - "service": { - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "type": "service_reference", - "summary": "Database", - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" - }, - "urgency": "high", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "priority": { - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "type": "priority_reference", - "summary": "P1", - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" - }, - "assignees": [ - { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - } - ], - "created_at": "2022-12-07T10:56:52Z", - "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", - "resolve_reason": null, - "conference_bridge": null, - "escalation_policy": { - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "type": "escalation_policy_reference", - "summary": "Default", - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" - } - }, - "client": { - "url": "https://monitoring.service.com", - "name": "Monitoring Service" - }, - "resourceType": "incident" - }, - "integrations": { - "PagerDuty": false - }, - "originalTimestamp": "2022-12-07T10:56:52.000Z" - } - }, - { - "description": "Incident Priority Updated", - "input": { - "event": { - "id": "01DFU6P4VDDZCIHVQ5Q0ME99OE", - "event_type": "incident.priority_updated", - "resource_type": "incident", - "occurred_at": "2022-12-20T11:43:24.342Z", - "agent": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "client": null, - "data": { - "id": "Q1KRTY75EUMGM0", - "type": "incident", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "number": 7, - "status": "acknowledged", - "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", - "created_at": "2022-12-20T11:37:19Z", - "title": "Event Stream Failure", - "service": { - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "summary": "Database", - "type": "service_reference" - }, - "assignees": [ - { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - } - ], - "escalation_policy": { - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "summary": "Default", - "type": "escalation_policy_reference" - }, - "teams": [], - "priority": { - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "summary": "P1", - "type": "priority_reference" - }, - "urgency": "high", - "conference_bridge": null, - "resolve_reason": null - } - } - }, - "output": { - "type": "track", - "event": "Incident Priority Updated", - "userId": "PXZZD2E", - "context": { - "traits": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "PagerDuty" - } - }, - "messageId": "01DFU6P4VDDZCIHVQ5Q0ME99OE", - "properties": { - "data": { - "id": "Q1KRTY75EUMGM0", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "type": "incident", - "teams": [], - "title": "Event Stream Failure", - "number": 7, - "status": "acknowledged", - "service": { - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "type": "service_reference", - "summary": "Database", - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" - }, - "urgency": "high", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "priority": { - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "type": "priority_reference", - "summary": "P1", - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" - }, - "assignees": [ - { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - } - ], - "created_at": "2022-12-20T11:37:19Z", - "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", - "resolve_reason": null, - "conference_bridge": null, - "escalation_policy": { - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "type": "escalation_policy_reference", - "summary": "Default", - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" - } - }, - "resourceType": "incident" - }, - "integrations": { - "PagerDuty": false - }, - "originalTimestamp": "2022-12-20T11:43:24.000Z" - } - }, - { - "description": "Incident Responder Added", - "input": { - "event": { - "id": "01DFU6Z1ZCLMV9SEK3X5JZ5WLW", - "event_type": "incident.responder.added", - "resource_type": "incident", - "occurred_at": "2022-12-20T11:46:44.213Z", - "agent": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "client": null, - "data": { - "incident": { - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "id": "Q1KRTY75EUMGM0", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "summary": "Event Stream Failure", - "type": "incident_reference" - }, - "user": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "escalation_policy": null, - "message": "Please help with \"Event Stream Failure\"", - "state": "pending", - "type": "incident_responder" - } - } - }, - "output": { - "type": "track", - "event": "Incident Responder Added", - "userId": "PXZZD2E", - "context": { - "traits": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "PagerDuty" - } - }, - "messageId": "01DFU6Z1ZCLMV9SEK3X5JZ5WLW", - "properties": { - "data": { - "type": "incident_responder", - "user": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "state": "pending", - "message": "Please help with \"Event Stream Failure\"", - "incident": { - "id": "Q1KRTY75EUMGM0", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "type": "incident_reference", - "summary": "Event Stream Failure", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0" - }, - "escalation_policy": null - }, - "resourceType": "incident" - }, - "integrations": { - "PagerDuty": false - }, - "originalTimestamp": "2022-12-20T11:46:44.000Z" - } - }, - { - "description": "Incident Escalated", - "input": { - "event": { - "id": "01DFU77KTKK9UUYX779UX0N1ZP", - "event_type": "incident.escalated", - "resource_type": "incident", - "occurred_at": "2022-12-20T11:49:35.385Z", - "agent": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "client": null, - "data": { - "id": "Q1KRTY75EUMGM0", - "type": "incident", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "number": 7, - "status": "triggered", - "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", - "created_at": "2022-12-20T11:37:19Z", - "title": "Event Stream Failure", - "service": { - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "summary": "Database", - "type": "service_reference" - }, - "assignees": [ - { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - } - ], - "escalation_policy": { - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "summary": "Default", - "type": "escalation_policy_reference" - }, - "teams": [], - "priority": { - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "summary": "P1", - "type": "priority_reference" - }, - "urgency": "high", - "conference_bridge": null, - "resolve_reason": null - } - } - }, - "output": { - "type": "track", - "event": "Incident Escalated", - "userId": "PXZZD2E", - "context": { - "traits": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "PagerDuty" - } - }, - "messageId": "01DFU77KTKK9UUYX779UX0N1ZP", - "properties": { - "data": { - "id": "Q1KRTY75EUMGM0", - "self": "https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "type": "incident", - "teams": [], - "title": "Event Stream Failure", - "number": 7, - "status": "triggered", - "service": { - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "type": "service_reference", - "summary": "Database", - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" - }, - "urgency": "high", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0", - "priority": { - "id": "PPMNDVQ", - "self": "https://api.pagerduty.com/priorities/PPMNDVQ", - "type": "priority_reference", - "summary": "P1", - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" - }, - "assignees": [ - { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - } - ], - "created_at": "2022-12-20T11:37:19Z", - "incident_key": "a3e0e442f8b74a8c94298f19de0dcbed", - "resolve_reason": null, - "conference_bridge": null, - "escalation_policy": { - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "type": "escalation_policy_reference", - "summary": "Default", - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" - } - }, - "resourceType": "incident" - }, - "integrations": { - "PagerDuty": false - }, - "originalTimestamp": "2022-12-20T11:49:35.000Z" - } - }, - { - "description": "Incident Resolved", - "input": { - "event": { - "id": "01DEN1HNLBC1VITK192ETJ1MPJ", - "event_type": "incident.resolved", - "resource_type": "incident", - "occurred_at": "2022-12-07T11:04:27.459Z", - "agent": { - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E", - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "summary": "rudder test", - "type": "user_reference" - }, - "client": null, - "data": { - "id": "Q3S7IX2U5KTCOY", - "type": "incident", - "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "number": 2, - "status": "resolved", - "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", - "created_at": "2022-12-07T10:56:52Z", - "title": "Server Crashed", - "service": { - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT", - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "summary": "Database", - "type": "service_reference" - }, - "assignees": [], - "escalation_policy": { - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4", - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "summary": "Default", - "type": "escalation_policy_reference" - }, - "teams": [], - "priority": { - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities", - "id": "P5DBC3A", - "self": "https://api.pagerduty.com/priorities/P5DBC3A", - "summary": "P3", - "type": "priority_reference" - }, - "urgency": "high", - "conference_bridge": { - "conference_number": "", - "conference_url": "" - }, - "resolve_reason": null - } - } - }, - "output": { - "type": "track", - "event": "Incident Resolved", - "userId": "PXZZD2E", - "context": { - "traits": { - "id": "PXZZD2E", - "self": "https://api.pagerduty.com/users/user@1", - "type": "user_reference", - "summary": "rudder test", - "html_url": "https://rudderlabs-com.pagerduty.com/users/PXZZD2E" - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "PagerDuty" - } - }, - "messageId": "01DEN1HNLBC1VITK192ETJ1MPJ", - "properties": { - "data": { - "id": "Q3S7IX2U5KTCOY", - "self": "https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "type": "incident", - "teams": [], - "title": "Server Crashed", - "number": 2, - "status": "resolved", - "service": { - "id": "PAJBUTT", - "self": "https://api.pagerduty.com/services/PAJBUTT", - "type": "service_reference", - "summary": "Database", - "html_url": "https://rudderlabs-com.pagerduty.com/services/PAJBUTT" - }, - "urgency": "high", - "html_url": "https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY", - "priority": { - "id": "P5DBC3A", - "self": "https://api.pagerduty.com/priorities/P5DBC3A", - "type": "priority_reference", - "summary": "P3", - "html_url": "https://rudderlabs-com.pagerduty.com/account/incident_priorities" - }, - "assignees": [], - "created_at": "2022-12-07T10:56:52Z", - "incident_key": "faaecfc0aca04b6ea07154188b5d3c6c", - "resolve_reason": null, - "conference_bridge": { - "conference_url": "", - "conference_number": "" - }, - "escalation_policy": { - "id": "PB7HKU4", - "self": "https://api.pagerduty.com/escalation_policies/PB7HKU4", - "type": "escalation_policy_reference", - "summary": "Default", - "html_url": "https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4" - } - }, - "resourceType": "incident" - }, - "integrations": { - "PagerDuty": false - }, - "originalTimestamp": "2022-12-07T11:04:27.000Z" - } - } -] diff --git a/test/__tests__/data/pipedream_source.json b/test/__tests__/data/pipedream_source.json deleted file mode 100644 index 2d542e8673..0000000000 --- a/test/__tests__/data/pipedream_source.json +++ /dev/null @@ -1,275 +0,0 @@ -[ - { - "description": "No type or userId is given", - "input": { - "anonymousId": "63767499ca6fb1b7c988d5bb", - "artist": "Gautam", - "genre": "Jazz", - "song": "Take Five" - }, - "output": { - "event": "pipedream_source_event", - "anonymousId": "63767499ca6fb1b7c988d5bb", - "context": { - "integration": { - "name": "PIPEDREAM" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "integrations": { - "PIPEDREAM": false - }, - "type": "track", - "properties": { - "anonymousId": "63767499ca6fb1b7c988d5bb", - "artist": "Gautam", - "genre": "Jazz", - "song": "Take Five" - } - } - }, - { - "description": "No type or anonymousId is given", - "input": { - "userId": "12", - "artist": "Gautam", - "genre": "Jazz", - "song": "Take Five" - }, - "output": { - "event": "pipedream_source_event", - "anonymousId": "12", - "context": { - "integration": { - "name": "PIPEDREAM" - }, - "library": { - "name": "unknown", - "version": "unknown" - } - }, - "integrations": { - "PIPEDREAM": false - }, - "type": "track", - "properties": { - "userId": "12", - "artist": "Gautam", - "genre": "Jazz", - "song": "Take Five" - } - } - }, - { - "description": "Track Call -> type and userId is given", - "input": { - "event": "Song Played", - "userId": "R1234", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe", - "userDeleted": false - }, - "locale": "en", - "location": { - "country": "IN", - "countryName": "India", - "short": "India", - "long": "India" - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "page": { - "referrer": "http://127.0.0.1:5500/testSm.html" - } - }, - "type": "track", - "properties": { - "artist": "John", - "Album": "ABCD" - } - }, - "output": { - "event": "Song Played", - "userId": "R1234", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe", - "userDeleted": false - }, - "locale": "en", - "location": { - "country": "IN", - "countryName": "India", - "short": "India", - "long": "India" - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "page": { - "referrer": "http://127.0.0.1:5500/testSm.html" - } - }, - "type": "track", - "properties": { - "artist": "John", - "Album": "ABCD" - } - } - }, - { - "description": "Identify type -> type and userId is given", - "input": { - "userId": "1", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "traits": { - "firstName": "John", - "lastName": "doe", - "email": "John@r.com", - "hasPurchased": "yes", - "address": { - "Home": { - "city": "iudcb" - }, - "Office": { - "abc": "jbc" - } - }, - "state": "Delhi", - "title": "Mr" - }, - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "identify" - }, - "output": { - "userId": "1", - "originalTimestamp": "2020-09-28T19:53:31.900Z", - "traits": { - "firstName": "John", - "lastName": "doe", - "email": "John@r.com", - "hasPurchased": "yes", - "address": { - "Home": { - "city": "iudcb" - }, - "Office": { - "abc": "jbc" - } - }, - "state": "Delhi", - "title": "Mr" - }, - "timestamp": "2020-09-29T14:50:29.907+05:30", - "type": "identify" - } - }, - { - "description": "Group type -> type and userId is given", - "input": { - "userId": "user123", - "groupId": "17", - "context": {}, - "traits": { - "operation": "add" - }, - "type": "group" - }, - "output": { - "userId": "user123", - "groupId": "17", - "context": {}, - "traits": { - "operation": "add" - }, - "type": "group" - } - }, - { - "description": "Page type -> type and userId is given", - "input": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "name": "Home", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "type": "page" - }, - "output": { - "anonymousId": "21e13f4bc7ceddad", - "channel": "mobile", - "context": { - "os": { - "name": "Android", - "version": "9" - }, - "timezone": "Asia/Kolkata", - "traits": { - "customProp": "customValue" - }, - "userAgent": "Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)" - }, - "name": "Home", - "properties": { - "title": "Home | RudderStack", - "url": "http://www.rudderstack.com" - }, - "receivedAt": "2020-09-29T14:50:43.005+05:30", - "type": "page" - } - }, - { - "description": "Alias type -> type and userId is given", - "input": { - "type": "alias", - "previousId": "name@surname.com", - "userId": "12345" - }, - "output": { - "type": "alias", - "previousId": "name@surname.com", - "userId": "12345" - } - } -] diff --git a/test/__tests__/data/refiner_source.json b/test/__tests__/data/refiner_source.json deleted file mode 100644 index c5ed3ab2e8..0000000000 --- a/test/__tests__/data/refiner_source.json +++ /dev/null @@ -1,394 +0,0 @@ -[ - { - "description": "Refiner webhook response", - "input": { - "uuid": "d769e130-49cf-11ed-968d-936a69fadf81", - "project_uuid": "0d8759d0-401c-11ed-8ded-9757c4929b55", - "remote_id": "user@17", - "email": "test17@user.com", - "display_name": "test user", - "first_seen_at": "2022-10-12T01:47:33.000000Z", - "last_seen_at": "2022-10-12T02:00:00.000000Z", - "attributes": { - "address": null, - "address_city": null, - "address_state": null, - "age": null, - "another_attribute": null, - "city": null, - "country": null, - "created_at": null, - "email": "test17@user.com", - "event": null, - "first_name": null, - "first_seen_at": "2022-10-12T01:47:33.000000Z", - "form_submissions_count": "1", - "form_views_count": "2", - "gender": null, - "last_form_submission_at": "2022-10-12T02:05:55.000000Z", - "last_form_view_at": "2022-10-12T02:03:46.000000Z", - "last_name": null, - "last_seen_at": "2022-10-12T02:00:00.000000Z", - "name": "test user", - "phone": null, - "some_attribute": null, - "status": null, - "student": null, - "tag": null, - "trait1": null, - "trait2": null, - "trait3": null, - "url": null, - "user_address_city": null, - "user_address_state": null, - "user_country": null, - "user_id": null, - "username": null, - "useroccupation": null, - "why_did_you_cancel_your_subscription": "Pricing" - }, - "segments": [ - { - "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", - "name": "All Users", - "created_at": "2022-10-12T01:47:34.000000Z", - "updated_at": "2022-10-12T01:47:34.000000Z" - }, - { - "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", - "name": "test-segment", - "created_at": "2022-10-12T01:47:34.000000Z", - "updated_at": "2022-10-12T01:47:34.000000Z" - } - ], - "account": { - "uuid": "d76c9e80-49cf-11ed-a783-6317eca951a6", - "remote_id": "ACCOUNT-ID-ABC-1", - "domain": null, - "display_name": "Awesome Inc.", - "first_seen_at": "2022-10-12T01:47:33.000000Z", - "last_seen_at": "2022-10-12T02:00:00.000000Z", - "attributes": { - "a_date_at": "2022-10-01T00:00:00.000000Z", - "business_email": null, - "company": null, - "email": null, - "isfunded": null, - "name": "Awesome Inc.", - "revenue": null, - "some_account_data": "something", - "trait1": null, - "trait2": null, - "trait3": null - } - }, - "triggered_event": "Completed Survey", - "form": { - "uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "name": "Customer Churn Survey" - }, - "response": { - "uuid": "eb117cb0-49cf-11ed-b050-03a44b32151c", - "first_shown_at": "2022-10-12T01:48:06.000000Z", - "last_shown_at": "2022-10-12T02:03:46.000000Z", - "show_counter": null, - "first_data_reception_at": "2022-10-12T02:05:55.000000Z", - "last_data_reception_at": "2022-10-12T02:05:55.000000Z", - "completed_at": "2022-10-12T02:05:55.000000Z", - "dismissed_at": null, - "received_at": "2022-10-12T02:05:55.000000Z", - "data": { - "why_did_you_cancel_your_subscription": "Pricing" - }, - "tags": [] - } - }, - "output": [ - { - "context": { - "traits": { - "email": "test17@user.com", - "segments": [ - { - "name": "All Users", - "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", - "created_at": "2022-10-12T01:47:34.000000Z", - "updated_at": "2022-10-12T01:47:34.000000Z" - }, - { - "name": "test-segment", - "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", - "created_at": "2022-10-12T01:47:34.000000Z", - "updated_at": "2022-10-12T01:47:34.000000Z" - } - ] - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Refiner" - }, - "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "formName": "Customer Churn Survey" - }, - "integrations": { "Refiner": false }, - "type": "identify", - "userId": "user@17", - "traits": { "why_did_you_cancel_your_subscription": "Pricing" }, - "originalTimestamp": "2022-10-12T02:05:55.000000Z" - }, - { - "type": "track", - "event": "Completed Survey", - "userId": "user@17", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "formName": "Customer Churn Survey", - "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "integration": { - "name": "Refiner" - } - }, - "properties": { - "response": { - "data": { - "why_did_you_cancel_your_subscription": "Pricing" - }, - "tags": [], - "uuid": "eb117cb0-49cf-11ed-b050-03a44b32151c", - "received_at": "2022-10-12T02:05:55.000000Z", - "completed_at": "2022-10-12T02:05:55.000000Z", - "last_shown_at": "2022-10-12T02:03:46.000000Z", - "first_shown_at": "2022-10-12T01:48:06.000000Z", - "last_data_reception_at": "2022-10-12T02:05:55.000000Z", - "first_data_reception_at": "2022-10-12T02:05:55.000000Z" - }, - "refiner_form_name": "Customer Churn Survey", - "refiner_form_uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae" - }, - "integrations": { - "Refiner": false - }, - "originalTimestamp": "2022-10-12T02:05:55.000000Z" - }, - { - "type": "group", - "traits": { - "name": "Awesome Inc.", - "a_date_at": "2022-10-01T00:00:00.000000Z", - "some_account_data": "something" - }, - "userId": "user@17", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Refiner" - } - }, - "groupId": "ACCOUNT-ID-ABC-1", - "integrations": { - "Refiner": false - }, - "originalTimestamp": "2022-10-12T02:05:55.000000Z" - } - ] - }, - { - "description": "Refiner webhook response", - "input": { - "uuid": "69b83e20-4ea2-11ed-941c-e1cb6c7a3870", - "cookie_uuid": "2f9b7e6a-9ba8-1c68-d474-48d719d92a60", - "project_uuid": "0d8759d0-401c-11ed-8ded-9757c4929b55", - "remote_id": "sdk@30", - "email": "sdk30@gmail.com", - "display_name": "", - "first_seen_at": "2022-10-18T05:04:58.000000Z", - "last_seen_at": "2022-10-18T05:04:58.000000Z", - "attributes": { - "address": null, - "address_city": null, - "address_state": null, - "age": null, - "another_attribute": null, - "city": null, - "country": null, - "created_at": null, - "email": "sdk30@gmail.com", - "event": null, - "first_name": null, - "first_seen_at": "2022-10-18T05:04:58.000000Z", - "form_submissions_count": "1", - "form_views_count": "1", - "gender": null, - "last_form_submission_at": "2022-10-18T05:05:45.000000Z", - "last_form_view_at": "2022-10-18T05:05:29.000000Z", - "last_name": null, - "last_seen_at": "2022-10-18T05:04:58.000000Z", - "name": null, - "phone": null, - "some_attribute": null, - "status": null, - "student": null, - "tag": null, - "trait1": null, - "trait2": null, - "trait3": null, - "url": null, - "user_address_city": null, - "user_address_state": null, - "user_country": null, - "user_id": null, - "username": null, - "useroccupation": null, - "why_did_you_cancel_your_subscription": "Missing features" - }, - "segments": [ - { - "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", - "name": "All Users", - "created_at": "2022-10-18T05:04:58.000000Z", - "updated_at": "2022-10-18T05:04:58.000000Z" - }, - { - "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", - "name": "test-segment", - "created_at": "2022-10-18T05:04:58.000000Z", - "updated_at": "2022-10-18T05:04:58.000000Z" - } - ], - "account": { - "uuid": "69ba2030-4ea2-11ed-adfc-595e70c7ab07", - "remote_id": null, - "domain": null, - "display_name": "", - "first_seen_at": "2022-10-18T05:04:58.000000Z", - "last_seen_at": "2022-10-18T05:04:58.000000Z", - "attributes": { - "1": null, - "2": null, - "3": null, - "4": null, - "a_date_at": null, - "business_email": null, - "company": null, - "email": null, - "isfunded": null, - "location": null, - "name": null, - "revenue": null, - "some_account_data": null, - "trait1": null, - "trait2": null, - "trait3": null, - "user_id": null - } - }, - "triggered_event": "Completed Survey", - "form": { - "uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "name": "Customer Churn Survey" - }, - "response": { - "uuid": "7c508c60-4ea2-11ed-9302-57708fe11d26", - "first_shown_at": "2022-10-18T05:05:29.000000Z", - "last_shown_at": "2022-10-18T05:05:29.000000Z", - "show_counter": null, - "first_data_reception_at": "2022-10-18T05:05:45.000000Z", - "last_data_reception_at": "2022-10-18T05:05:45.000000Z", - "completed_at": "2022-10-18T05:05:45.000000Z", - "dismissed_at": null, - "received_at": "2022-10-18T05:05:45.000000Z", - "data": { - "why_did_you_cancel_your_subscription": "Missing features" - }, - "tags": [] - } - }, - "output": [ - { - "type": "identify", - "traits": { - "why_did_you_cancel_your_subscription": "Missing features" - }, - "userId": "sdk@30", - "context": { - "traits": { - "email": "sdk30@gmail.com", - "segments": [ - { - "name": "All Users", - "uuid": "0d91d7a0-401c-11ed-8898-bb1ee0c23ae5", - "created_at": "2022-10-18T05:04:58.000000Z", - "updated_at": "2022-10-18T05:04:58.000000Z" - }, - { - "name": "test-segment", - "uuid": "f71ad940-455c-11ed-85e0-bf25f168b224", - "created_at": "2022-10-18T05:04:58.000000Z", - "updated_at": "2022-10-18T05:04:58.000000Z" - } - ] - }, - "library": { - "name": "unknown", - "version": "unknown" - }, - "formName": "Customer Churn Survey", - "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "integration": { - "name": "Refiner" - } - }, - "integrations": { - "Refiner": false - }, - "originalTimestamp": "2022-10-18T05:05:45.000000Z" - }, - { - "type": "track", - "event": "Completed Survey", - "userId": "sdk@30", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "formName": "Customer Churn Survey", - "formUuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae", - "integration": { - "name": "Refiner" - } - }, - "properties": { - "response": { - "data": { - "why_did_you_cancel_your_subscription": "Missing features" - }, - "tags": [], - "uuid": "7c508c60-4ea2-11ed-9302-57708fe11d26", - "received_at": "2022-10-18T05:05:45.000000Z", - "completed_at": "2022-10-18T05:05:45.000000Z", - "last_shown_at": "2022-10-18T05:05:29.000000Z", - "first_shown_at": "2022-10-18T05:05:29.000000Z", - "last_data_reception_at": "2022-10-18T05:05:45.000000Z", - "first_data_reception_at": "2022-10-18T05:05:45.000000Z" - }, - "refiner_form_name": "Customer Churn Survey", - "refiner_form_uuid": "0d94c790-401c-11ed-bb27-e31f6832c5ae" - }, - "integrations": { - "Refiner": false - }, - "originalTimestamp": "2022-10-18T05:05:45.000000Z" - } - ] - } -] diff --git a/test/__tests__/data/satismeter_source.json b/test/__tests__/data/satismeter_source.json deleted file mode 100644 index 97b8b44a15..0000000000 --- a/test/__tests__/data/satismeter_source.json +++ /dev/null @@ -1,443 +0,0 @@ -[ - { - "description": " All fields Check with event as completed", - "input": { - "response": { - "id": "63767499ca6fb1b7c988d5bb", - "created": "2022-11-17T17:51:21.764Z", - "rating": 5, - "feedback": "Many things to imporve\n", - "dismissed": false, - "pending": false, - "answers": [ - { - "label": "How likely are you to recommend us to your friends and colleagues?", - "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", - "value": 5, - "name": "SM_rating", - "type": "scale", - "metric": "nps" - }, - { - "label": "What could we do to improve?", - "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", - "value": "Many things to imporve\n", - "name": "SM_comment", - "type": "long-text" - }, - { - "label": "The company made it easy for me to handle my issue.", - "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "scale", - "metric": "ces" - }, - { - "label": "How satisfied were you with the service you received?", - "id": "24c5b290-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "smiley", - "metric": "csat" - }, - { - "label": "How you like to rate the surevy?", - "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", - "value": 4, - "type": "scale" - }, - { - "label": "Your Name (Single Answer)", - "id": "37a8c000-66a0-11ed-856c-6f39711bf041", - "value": "a", - "type": "single-choice" - }, - { - "label": "Your Name (Multiple Answer)", - "id": "4b435da0-66a0-11ed-856c-6f39711bf041", - "value": ["a1", "b1"], - "type": "multiple-choice" - } - ], - "category": "detractor", - "score": -100, - "user": { - "id": "63766fbb7ac7b72676145338", - "name": "John Doe", - "email": "john@doe.com", - "userId": "No response", - "deleted": false, - "groups": { - "group1": "grooupId" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe" - } - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "location": { - "country": "IN", - "countryName": "India", - "region": "", - "city": "", - "short": "India", - "long": "India" - }, - "referrer": "http://127.0.0.1:5500/testSm.html", - "method": "In-app", - "language": "en", - "project": "6372247a764986ebee62bf66", - "campaign": "6373271b764986ebee62bfca" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe" - }, - "campaign": { - "id": "6373271b764986ebee62bfca", - "name": "NPS Survey" - }, - "event": "completed" - }, - "output": { - "event": "Survey completed", - "anonymousId": "63766fbb7ac7b72676145338", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe", - "userDeleted": false - }, - "locale": "en", - "campaign": { - "id": "6373271b764986ebee62bfca", - "name": "NPS Survey" - }, - "integration": { - "name": "SATISMETER" - }, - "location": { - "country": "IN", - "countryName": "India", - "short": "India", - "long": "India" - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "page": { - "referrer": "http://127.0.0.1:5500/testSm.html" - } - }, - "integrations": { - "SATISMETER": false - }, - "type": "track", - "traits": { - "groups": { "group1": "grooupId" } - }, - "userId": "No response", - "properties": { - "category": "detractor", - "answers": [ - { - "label": "How likely are you to recommend us to your friends and colleagues?", - "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", - "value": 5, - "name": "SM_rating", - "type": "scale", - "metric": "nps" - }, - { - "label": "What could we do to improve?", - "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", - "value": "Many things to imporve\n", - "name": "SM_comment", - "type": "long-text" - }, - { - "label": "The company made it easy for me to handle my issue.", - "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "scale", - "metric": "ces" - }, - { - "label": "How satisfied were you with the service you received?", - "id": "24c5b290-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "smiley", - "metric": "csat" - }, - { - "label": "How you like to rate the surevy?", - "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", - "value": 4, - "type": "scale" - }, - { - "label": "Your Name (Single Answer)", - "id": "37a8c000-66a0-11ed-856c-6f39711bf041", - "value": "a", - "type": "single-choice" - }, - { - "label": "Your Name (Multiple Answer)", - "id": "4b435da0-66a0-11ed-856c-6f39711bf041", - "value": ["a1", "b1"], - "type": "multiple-choice" - } - ], - "surveyDismissed": false, - "surveyPending": false, - "receivedAt": "2022-11-17T17:51:21.764Z" - } - } - }, - { - "description": " Neither reponse.user.id or response.user.userId is provided in payload then mapping response.id to anonymousId", - "input": { - "response": { - "id": "63767499ca6fb1b7c988d5bb", - "created": "2022-11-17T17:51:21.764Z", - "rating": 5, - "feedback": "Many things to imporve\n", - "dismissed": false, - "pending": false, - "answers": [ - { - "label": "How likely are you to recommend us to your friends and colleagues?", - "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", - "value": 5, - "name": "SM_rating", - "type": "scale", - "metric": "nps" - }, - { - "label": "What could we do to improve?", - "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", - "value": "Many things to imporve\n", - "name": "SM_comment", - "type": "long-text" - }, - { - "label": "The company made it easy for me to handle my issue.", - "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "scale", - "metric": "ces" - }, - { - "label": "How satisfied were you with the service you received?", - "id": "24c5b290-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "smiley", - "metric": "csat" - }, - { - "label": "How you like to rate the surevy?", - "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", - "value": 4, - "type": "scale" - }, - { - "label": "Your Name (Single Answer)", - "id": "37a8c000-66a0-11ed-856c-6f39711bf041", - "value": "a", - "type": "single-choice" - }, - { - "label": "Your Name (Multiple Answer)", - "id": "4b435da0-66a0-11ed-856c-6f39711bf041", - "value": ["a1", "b1"], - "type": "multiple-choice" - } - ], - "category": "detractor", - "score": -100, - "user": { - "name": "John Doe", - "email": "john@doe.com", - "deleted": false, - "groups": { - "group1": "grooupId" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe" - } - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "location": { - "country": "IN", - "countryName": "India", - "region": "", - "city": "", - "short": "India", - "long": "India" - }, - "referrer": "http://127.0.0.1:5500/testSm.html", - "method": "In-app", - "language": "en", - "project": "6372247a764986ebee62bf66", - "campaign": "6373271b764986ebee62bfca" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe" - }, - "campaign": { - "id": "6373271b764986ebee62bfca", - "name": "NPS Survey" - }, - "event": "completed" - }, - "output": { - "event": "Survey completed", - "anonymousId": "63767499ca6fb1b7c988d5bb", - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "traits": { - "createdAt": "2022-10-15T05:41:06.016Z", - "custom": { - "key1": "v1", - "key2": "V2" - }, - "email": "john@doe.com", - "name": "John Doe", - "userDeleted": false - }, - "locale": "en", - "campaign": { - "id": "6373271b764986ebee62bfca", - "name": "NPS Survey" - }, - "integration": { - "name": "SATISMETER" - }, - "location": { - "country": "IN", - "countryName": "India", - "short": "India", - "long": "India" - }, - "device": { - "os": "macOS", - "type": "desktop" - }, - "page": { - "referrer": "http://127.0.0.1:5500/testSm.html" - } - }, - "integrations": { - "SATISMETER": false - }, - "type": "track", - "traits": { - "groups": { "group1": "grooupId" } - }, - "properties": { - "category": "detractor", - "answers": [ - { - "label": "How likely are you to recommend us to your friends and colleagues?", - "id": "7ddb22b0-64a8-11ed-a4c7-b3bed73771cd", - "value": 5, - "name": "SM_rating", - "type": "scale", - "metric": "nps" - }, - { - "label": "What could we do to improve?", - "id": "7ddb22b1-64a8-11ed-a4c7-b3bed73771cd", - "value": "Many things to imporve\n", - "name": "SM_comment", - "type": "long-text" - }, - { - "label": "The company made it easy for me to handle my issue.", - "id": "1dc53f60-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "scale", - "metric": "ces" - }, - { - "label": "How satisfied were you with the service you received?", - "id": "24c5b290-66a0-11ed-856c-6f39711bf041", - "value": 4, - "name": null, - "type": "smiley", - "metric": "csat" - }, - { - "label": "How you like to rate the surevy?", - "id": "27b3d1d0-66a0-11ed-856c-6f39711bf041", - "value": 4, - "type": "scale" - }, - { - "label": "Your Name (Single Answer)", - "id": "37a8c000-66a0-11ed-856c-6f39711bf041", - "value": "a", - "type": "single-choice" - }, - { - "label": "Your Name (Multiple Answer)", - "id": "4b435da0-66a0-11ed-856c-6f39711bf041", - "value": ["a1", "b1"], - "type": "multiple-choice" - } - ], - "surveyDismissed": false, - "surveyPending": false, - "receivedAt": "2022-11-17T17:51:21.764Z" - } - } - } -] diff --git a/test/__tests__/data/segment_source_input.json b/test/__tests__/data/segment_source_input.json deleted file mode 100644 index f5c7173e00..0000000000 --- a/test/__tests__/data/segment_source_input.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - [ - { - "date": "2020-07-10T07:43:07.766Z", - "type": "s", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - }, - { - "date": "2020-07-10T07:43:09.620Z", - "type": "seacft", - "description": "", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "okhttp 2.7.5 / Other 0.0.0", - "details": { - "code": "*************Xst" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": false - }, - { - "date": "2020-07-10T07:43:07.766Z", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - }, - { - "type": "s", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - } - ] -] diff --git a/test/__tests__/data/segment_source_output.json b/test/__tests__/data/segment_source_output.json deleted file mode 100644 index f5c7173e00..0000000000 --- a/test/__tests__/data/segment_source_output.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - [ - { - "date": "2020-07-10T07:43:07.766Z", - "type": "s", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - }, - { - "date": "2020-07-10T07:43:09.620Z", - "type": "seacft", - "description": "", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "okhttp 2.7.5 / Other 0.0.0", - "details": { - "code": "*************Xst" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": false - }, - { - "date": "2020-07-10T07:43:07.766Z", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - }, - { - "type": "s", - "connection_id": "", - "client_id": "********************************", - "client_name": "My App", - "ip": "47.15.6.58", - "user_agent": "Chrome Mobile 69.0.3497 / Android 0.0.0", - "details": { - "prompts": [], - "completedAt": 1594366987765, - "elapsedTime": null, - "session_id": "**************_***************" - }, - "hostname": "************.us.auth0.com", - "user_id": "auth0|************************", - "user_name": "example@test.com", - "auth0_client": { - "name": "Auth0.Android", - "env": { - "android": "28" - }, - "version": "1.23.0" - }, - "log_id": "********************************************************", - "_id": "********************************************************", - "isMobile": true - } - ] -] diff --git a/test/__tests__/data/shopify.json b/test/__tests__/data/shopify.json deleted file mode 100644 index 48ca8c75a0..0000000000 --- a/test/__tests__/data/shopify.json +++ /dev/null @@ -1,515 +0,0 @@ -[ - { - "description": "Track Call -> carts_create ", - "input": { - "id": "shopify_test3", - "query_parameters": { - "topic": ["carts_create"] - }, - "token": "shopify_test3", - "line_items": [], - "note": null, - "updated_at": "2023-02-10T12:16:07.251Z", - "created_at": "2023-02-10T12:05:04.402Z" - }, - "output": { - "outputToSource": { - "body": "T0s=", - "contentType": "text/plain" - }, - "statusCode": 200 - } - }, - { - "description": "No Query Parameters", - "input": {}, - "output": { - "error": "Query_parameters is missing" - } - }, - { - "description": "Invalid topic", - "input": { - "query_parameters": { - "signature": ["rudderstack"], - "writeKey": ["sample-write-key"] - } - }, - "output": { - "error": "Invalid topic in query_parameters" - } - }, - { - "description": "Topic Not found", - "input": { - "query_parameters": { - "topic": [], - "signature": ["rudderstack"], - "writeKey": ["sample-write-key"] - } - }, - "output": { - "error": "Topic not found" - } - }, - { - "description": "Unsupported Event Type", - "input": { - "query_parameters": { - "topic": ["random_event"], - "signature": ["rudderstack"], - "writeKey": ["sample-write-key"] - } - }, - "output": { - "outputToSource": { - "body": "T0s=", - "contentType": "text/plain" - }, - "statusCode": 200 - } - }, - { - "description": "Identify Call for customers create event", - "input": { - "query_parameters": { - "topic": ["customers_create"], - "signature": ["rudderstack"], - "writeKey": ["sample-write-key"] - }, - "id": 5747017285820, - "email": "anuraj@rudderstack.com", - "accepts_marketing": false, - "created_at": "2021-12-29T15:15:19+05:30", - "updated_at": "2021-12-29T15:15:20+05:30", - "first_name": "Anuraj", - "last_name": "Guha", - "orders_count": 0, - "state": "disabled", - "total_spent": "0.00", - "last_order_id": null, - "note": "", - "verified_email": true, - "multipass_identifier": null, - "tax_exempt": false, - "phone": "+919876543210", - "tags": "", - "last_order_name": null, - "currency": "INR", - "addresses": [ - { - "id": 6947581821116, - "customer_id": 5747017285820, - "first_name": "Anuraj", - "last_name": "Guha", - "company": "Rudderstack", - "address1": "Home", - "address2": "Apartment", - "city": "Kolkata", - "province": "West Bengal", - "country": "India", - "zip": "708091", - "phone": "+919876543210", - "name": "Anuraj Guha", - "province_code": "WB", - "country_code": "IN", - "country_name": "India", - "default": true - } - ], - "accepts_marketing_updated_at": "2021-12-29T15:15:20+05:30", - "marketing_opt_in_level": null, - "tax_exemptions": [], - "sms_marketing_consent": { - "state": "not_subscribed", - "opt_in_level": "single_opt_in", - "consent_updated_at": null, - "consent_collected_from": "SHOPIFY" - }, - "admin_graphql_api_id": "gid://shopify/Customer/5747017285820", - "default_address": { - "id": 6947581821116, - "customer_id": 5747017285820, - "first_name": "Anuraj", - "last_name": "Guha", - "company": "Rudderstack", - "address1": "Home", - "address2": "Apartment", - "city": "Kolkata", - "province": "West Bengal", - "country": "India", - "zip": "708091", - "phone": "+919876543210", - "name": "Anuraj Guha", - "province_code": "WB", - "country_code": "IN", - "country_name": "India", - "default": true - } - }, - "output": { - "context": { - "library": { - "name": "RudderStack Shopify Cloud", - "version": "1.0.0" - }, - "integration": { - "name": "SHOPIFY" - }, - "topic": "customers_create" - }, - "integrations": { - "SHOPIFY": true - }, - "type": "identify", - "userId": "5747017285820", - "traits": { - "email": "anuraj@rudderstack.com", - "firstName": "Anuraj", - "lastName": "Guha", - "phone": "+919876543210", - "addressList": [ - { - "id": 6947581821116, - "customer_id": 5747017285820, - "first_name": "Anuraj", - "last_name": "Guha", - "company": "Rudderstack", - "address1": "Home", - "address2": "Apartment", - "city": "Kolkata", - "province": "West Bengal", - "country": "India", - "zip": "708091", - "phone": "+919876543210", - "name": "Anuraj Guha", - "province_code": "WB", - "country_code": "IN", - "country_name": "India", - "default": true - } - ], - "address": { - "id": 6947581821116, - "customer_id": 5747017285820, - "first_name": "Anuraj", - "last_name": "Guha", - "company": "Rudderstack", - "address1": "Home", - "address2": "Apartment", - "city": "Kolkata", - "province": "West Bengal", - "country": "India", - "zip": "708091", - "phone": "+919876543210", - "name": "Anuraj Guha", - "province_code": "WB", - "country_code": "IN", - "country_name": "India", - "default": true - }, - "acceptsMarketing": false, - "orderCount": 0, - "state": "disabled", - "totalSpent": "0.00", - "note": "", - "verifiedEmail": true, - "taxExempt": false, - "tags": "", - "currency": "INR", - "taxExemptions": [], - "smsMarketingConsent": { - "state": "not_subscribed", - "opt_in_level": "single_opt_in", - "consent_updated_at": null, - "consent_collected_from": "SHOPIFY" - }, - "adminGraphqlApiId": "gid://shopify/Customer/5747017285820", - "acceptsMarketingUpdatedAt": "2021-12-29T15:15:20+05:30" - }, - "timestamp": "2021-12-29T09:45:20.000Z" - } - }, - { - "description": "Unsupported checkout event", - "input": { - "query_parameters": { - "topic": ["checkout_delete"], - "writeKey": ["sample-write-key"], - "signature": ["rudderstack"] - }, - "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", - "created_at": "2022-01-05T18:13:02+05:30", - "destination": null, - "id": 4124667937024, - "line_items": [], - "customer": { - "email": "test_person@email.com", - "first_name": "Test", - "last_name": "Person" - }, - "billing_address": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "shipping_address": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "location_id": 66855371008, - "name": "#1002.1", - "order_id": 4617255092480, - "origin_address": null, - "receipt": {}, - "service": "manual", - "shipment_status": null, - "status": "success", - "tracking_company": "Amazon Logistics UK", - "tracking_number": "Sample001test", - "tracking_numbers": ["Sample001test"], - "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", - "tracking_urls": ["https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530"], - "updated_at": "2022-01-05T18:16:48+05:30" - }, - "output": { - "outputToSource": { - "body": "T0s=", - "contentType": "text/plain" - }, - "statusCode": 200 - } - }, - { - "description": "Track Call -> Fullfillments updated event", - "input": { - "query_parameters": { - "topic": ["fulfillments_update"], - "writeKey": ["sample-write-key"], - "signature": ["rudderstack"] - }, - "shipping_address": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "billing_address": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", - "created_at": "2022-01-05T18:13:02+05:30", - "destination": null, - "email": "test_person@email.com", - "id": 4124667937024, - "line_items": [ - { - "admin_graphql_api_id": "gid://shopify/LineItem/11896203149568", - "discount_allocations": [], - "duties": [], - "fulfillable_quantity": 0, - "fulfillment_service": "manual", - "fulfillment_status": "fulfilled", - "gift_card": false, - "grams": 0, - "id": 11896203149568, - "name": "p1", - "origin_location": { - "address1": "74 CC/7, Anupama Housing Estate - II", - "address2": "", - "city": "Kolkatta", - "country_code": "IN", - "id": 3373642219776, - "name": "74 CC/7, Anupama Housing Estate - II", - "province_code": "WB", - "zip": "700052" - }, - "price": "5000.00", - "price_set": { - "presentment_money": { - "amount": "5000.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "5000.00", - "currency_code": "INR" - } - }, - "product_exists": true, - "product_id": 7510929801472, - "properties": [], - "quantity": 1, - "requires_shipping": true, - "sku": "15", - "tax_lines": [ - { - "channel_liable": false, - "price": "900.00", - "price_set": { - "presentment_money": { - "amount": "900.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "900.00", - "currency_code": "INR" - } - }, - "rate": 0.18, - "title": "IGST" - } - ], - "taxable": true, - "title": "p1", - "total_discount": "0.00", - "total_discount_set": { - "presentment_money": { - "amount": "0.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "0.00", - "currency_code": "INR" - } - }, - "variant_id": 42211160228096, - "variant_inventory_management": "shopify", - "variant_title": "", - "vendor": "rudderstack-store" - } - ], - "location_id": 66855371008, - "name": "#1002.1", - "order_id": 4617255092480, - "origin_address": null, - "receipt": {}, - "service": "manual", - "shipment_status": null, - "status": "success", - "tracking_company": "Amazon Logistics UK", - "tracking_number": "Sample001test", - "tracking_numbers": ["Sample001test"], - "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", - "tracking_urls": ["https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530"], - "updated_at": "2022-01-05T18:16:48+05:30" - }, - "output": { - "context": { - "library": { - "name": "RudderStack Shopify Cloud", - "version": "1.0.0" - }, - "integration": { - "name": "SHOPIFY" - }, - "topic": "fulfillments_update" - }, - "integrations": { - "SHOPIFY": true - }, - "type": "track", - "userId": "shopify-admin", - "event": "Fulfillments Update", - "properties": { - "admin_graphql_api_id": "gid://shopify/Fulfillment/4124667937024", - "created_at": "2022-01-05T18:13:02+05:30", - "destination": null, - "email": "test_person@email.com", - "id": 4124667937024, - "location_id": 66855371008, - "name": "#1002.1", - "order_id": 4617255092480, - "origin_address": null, - "receipt": {}, - "service": "manual", - "shipment_status": null, - "status": "success", - "tracking_company": "Amazon Logistics UK", - "tracking_number": "Sample001test", - "tracking_numbers": ["Sample001test"], - "tracking_url": "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530", - "tracking_urls": [ - "https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530" - ], - "updated_at": "2022-01-05T18:16:48+05:30", - "products": [ - { - "product_id": 7510929801472, - "sku": "15", - "title": "p1", - "price": "5000.00", - "brand": "rudderstack-store", - "quantity": 1, - "admin_graphql_api_id": "gid://shopify/LineItem/11896203149568", - "discount_allocations": [], - "duties": [], - "fulfillable_quantity": 0, - "fulfillment_service": "manual", - "fulfillment_status": "fulfilled", - "gift_card": false, - "grams": 0, - "id": 11896203149568, - "origin_location": { - "address1": "74 CC/7, Anupama Housing Estate - II", - "address2": "", - "city": "Kolkatta", - "country_code": "IN", - "id": 3373642219776, - "name": "74 CC/7, Anupama Housing Estate - II", - "province_code": "WB", - "zip": "700052" - }, - "price_set": { - "presentment_money": { - "amount": "5000.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "5000.00", - "currency_code": "INR" - } - }, - "product_exists": true, - "properties": [], - "requires_shipping": true, - "tax_lines": [ - { - "channel_liable": false, - "price": "900.00", - "price_set": { - "presentment_money": { - "amount": "900.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "900.00", - "currency_code": "INR" - } - }, - "rate": 0.18, - "title": "IGST" - } - ], - "taxable": true, - "total_discount": "0.00", - "total_discount_set": { - "presentment_money": { - "amount": "0.00", - "currency_code": "INR" - }, - "shop_money": { - "amount": "0.00", - "currency_code": "INR" - } - }, - "variant_inventory_management": "shopify", - "variant": "42211160228096 " - } - ] - }, - "traits": { - "shippingAddress": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "billingAddress": { - "address1": "11 Rani Sankari Lane Patuapara Bhowanipore" - }, - "email": "test_person@email.com" - } - } - } -] diff --git a/test/__tests__/data/signl4_source_input.json b/test/__tests__/data/signl4_source_input.json deleted file mode 100644 index a3309cd03c..0000000000 --- a/test/__tests__/data/signl4_source_input.json +++ /dev/null @@ -1,123 +0,0 @@ -[ - { - "eventType": 200, - "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", - "subscription": { - "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" - }, - "alert": { - "statusCode": 1, - "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "externalEventId": "INC091210", - "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - }, - "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" - }, - { - "eventType": 201, - "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", - "subscription": { - "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" - }, - "user": { - "username": "Rene", - "mailaddress": "rene@signl4.com", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - }, - "alert": { - "statusCode": 2, - "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "acknowledgedUserIds": ["f0bd5063-9588-51cf-b3d9-94e5647dedc5"], - "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - }, - "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" - }, - { - "eventType": 201, - "eventRaisedUtc": "2017-09-01T08:11:37.4815663Z", - "subscription": { - "id": "0acf8014-22f2-4503-88d7-f7d05b46744f" - }, - "user": { - "username": "Rene", - "mailaddress": "rene@signl4.com", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - }, - "alert": { - "statusCode": 4, - "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "acknowledgedUserIds": ["f0bd5063-9588-51cf-b3d9-94e5647dedc5"], - "id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - }, - "id": "dd209a2d-e037-41ee-b37d-f605cc0a39fb" - }, - { - "eventType": 202, - "eventRaisedUtc": "2020-01-10T12:27:19Z", - "subscription": { - "id": "b8fdd850-e2ad-45ff-924d-9c332a063200" - }, - "team": { - "id": "0e8979f7-0c6a-472d-8918-ecfd339252f8" - }, - "alert": { - "statusCode": 1, - "eventId": "2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9", - "externalEventId": "INC091210", - "acknowledgedUserIds": [], - "id": "2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2" - }, - "id": "27283793-47c8-4da2-9767-d37be224338d" - }, - { - "eventType": 203, - "eventRaisedUtc": "2018-04-17T15:00:32Z", - "subscription": { - "id": "1578ebd9-0a27-44ab-bc8e-52cd7d32e81d" - }, - "user": { - "username": "Rene", - "mailaddress": "rene@signl4.com", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - }, - "alert": { - "statusCode": 0, - "eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "id": "2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2" - }, - "annotation": { - "message": "OK, I'll take care about it.", - "id": "2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761" - }, - "id": "141c0f88-7831-4d5e-b055-f6e83c269770" - }, - { - "eventType": 300, - "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", - "team": { "id": "f1801955-4724-44de-902a-f6f02ba9e10f" }, - "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" - }, - { - "eventType": 301, - "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", - "team": { "id": "f1801955-4724-44de-902a-f6f02ba9e10f" }, - "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" - }, - { - "eventType": 302, - "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", - "team": { "id": "f1801955-4724-44de-902a-f6f02ba9e10f" }, - "user": { "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" }, - "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" - }, - { - "eventType": 303, - "eventRaisedUtc": "2017-09-01T09:16:17.3717355Z", - "team": { "id": "f1801955-4724-44de-902a-f6f02ba9e10f" }, - "user": { "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" }, - "id": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3" - } -] diff --git a/test/__tests__/data/signl4_source_output.json b/test/__tests__/data/signl4_source_output.json deleted file mode 100644 index a56fb814de..0000000000 --- a/test/__tests__/data/signl4_source_output.json +++ /dev/null @@ -1,269 +0,0 @@ -[ - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", - "originalTimestamp": "2017-09-01T08:11:37.000Z", - "event": "New Alert Created", - "properties": { - "eventType": 200, - "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", - "alert.statusCode": 1, - "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "alert.externalEventId": "INC091210", - "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - }, - "externalId": [ - { - "type": "signl4UserId", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - } - ], - "traits": { - "email": "rene@signl4.com", - "name": "Rene" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", - "originalTimestamp": "2017-09-01T08:11:37.000Z", - "event": "Alert Confirmed", - "properties": { - "eventType": 201, - "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", - "alert.statusCode": 2, - "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "alert.acknowledgedUserIds[0]": "f0bd5063-9588-51cf-b3d9-94e5647dedc5", - "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - }, - "externalId": [ - { - "type": "signl4UserId", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - } - ], - "traits": { - "email": "rene@signl4.com", - "name": "Rene" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "dd209a2d-e037-41ee-b37d-f605cc0a39fb", - "originalTimestamp": "2017-09-01T08:11:37.000Z", - "event": "Alert Resolved", - "properties": { - "eventType": 201, - "subscription.id": "0acf8014-22f2-4503-88d7-f7d05b46744f", - "alert.statusCode": 4, - "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "alert.acknowledgedUserIds[0]": "f0bd5063-9588-51cf-b3d9-94e5647dedc5", - "alert.id": "2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "27283793-47c8-4da2-9767-d37be224338d", - "originalTimestamp": "2020-01-10T12:27:19.000Z", - "event": "Alert Escalated", - "properties": { - "eventType": 202, - "subscription.id": "b8fdd850-e2ad-45ff-924d-9c332a063200", - "team.id": "0e8979f7-0c6a-472d-8918-ecfd339252f8", - "alert.statusCode": 1, - "alert.eventId": "2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9", - "alert.externalEventId": "INC091210", - "alert.id": "2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2", - "alert.acknowledgedUserIds": [] - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - }, - "externalId": [ - { - "type": "signl4UserId", - "id": "f0bd5063-9588-51cf-b3d9-94e5647dedc5" - } - ], - "traits": { - "email": "rene@signl4.com", - "name": "Rene" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "141c0f88-7831-4d5e-b055-f6e83c269770", - "originalTimestamp": "2018-04-17T15:00:32.000Z", - "event": "Alert Annotated", - "properties": { - "eventType": 203, - "subscription.id": "1578ebd9-0a27-44ab-bc8e-52cd7d32e81d", - "alert.statusCode": 0, - "alert.eventId": "2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2", - "alert.externalEventId": "Content you passed in the X-S4-ExternalID parameter", - "alert.id": "2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2", - "annotation.message": "OK, I'll take care about it.", - "annotation.id": "2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", - "originalTimestamp": "2017-09-01T09:16:17.000Z", - "event": "Duty Period Started", - "properties": { - "eventType": 300, - "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" - } - }, - - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - } - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", - "originalTimestamp": "2017-09-01T09:16:17.000Z", - "event": "Duty Period Ended", - "properties": { - "eventType": 301, - "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - }, - "externalId": [ - { - "type": "signl4UserId", - "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" - } - ] - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", - "originalTimestamp": "2017-09-01T09:16:17.000Z", - "event": "Somebody Punched-In", - "properties": { - "eventType": 302, - "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" - } - }, - { - "context": { - "library": { - "name": "unknown", - "version": "unknown" - }, - "integration": { - "name": "Signl4" - }, - "externalId": [ - { - "type": "signl4UserId", - "id": "e31da15f-7e13-43f1-b4a5-1ce3b470a504" - } - ] - }, - "integrations": { - "Signl4": false - }, - "type": "track", - "messageId": "f56a6b59-1197-4e7d-8eca-8d21a4b57ec3", - "originalTimestamp": "2017-09-01T09:16:17.000Z", - "event": "Somebody Punched-Out", - "properties": { - "eventType": 303, - "team.id": "f1801955-4724-44de-902a-f6f02ba9e10f" - } - } -] diff --git a/test/__tests__/formsort_source.test.js b/test/__tests__/formsort_source.test.js deleted file mode 100644 index 29c1c0831d..0000000000 --- a/test/__tests__/formsort_source.test.js +++ /dev/null @@ -1,26 +0,0 @@ -const integration = "formsort"; -const name = "formsort"; - -const version = "v0"; -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${name} Tests: payload: ${index} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - delete output.anonymousId; - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.message); - } - }); -}); diff --git a/test/__tests__/gpx_source.test.js b/test/__tests__/gpx_source.test.js deleted file mode 100644 index c8e7df5f4a..0000000000 --- a/test/__tests__/gpx_source.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const integration = "gainsightpx"; -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.error); - } - }); -}); diff --git a/test/__tests__/iterable_source.test.js b/test/__tests__/iterable_source.test.js deleted file mode 100644 index e478966bd7..0000000000 --- a/test/__tests__/iterable_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "iterable"; -const name = "Iterable"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/mailjet_source.test.js b/test/__tests__/mailjet_source.test.js deleted file mode 100644 index 7a778e7b4e..0000000000 --- a/test/__tests__/mailjet_source.test.js +++ /dev/null @@ -1,26 +0,0 @@ -const integration = "mailjet"; -const name = "MailJet"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${name} Tests: payload: ${index}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output); - } - }); -}); diff --git a/test/__tests__/mailmodo_source.test.js b/test/__tests__/mailmodo_source.test.js deleted file mode 100644 index d038e4236c..0000000000 --- a/test/__tests__/mailmodo_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "mailmodo"; -const name = "Mailmodo"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/monday_source.test.js b/test/__tests__/monday_source.test.js deleted file mode 100644 index d97f73451e..0000000000 --- a/test/__tests__/monday_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "monday"; -const name = "Monday"; - -const fs = require("fs"); -const path = require("path"); - -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/__tests__/olark_source.test.js b/test/__tests__/olark_source.test.js deleted file mode 100644 index 6e69bd466c..0000000000 --- a/test/__tests__/olark_source.test.js +++ /dev/null @@ -1,23 +0,0 @@ -const integration = "olark"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.message); - } - }); -}); diff --git a/test/__tests__/pagerduty_source.test.js b/test/__tests__/pagerduty_source.test.js deleted file mode 100644 index ddfb69aba6..0000000000 --- a/test/__tests__/pagerduty_source.test.js +++ /dev/null @@ -1,23 +0,0 @@ -const integration = "pagerduty"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.message); - } - }); -}); diff --git a/test/__tests__/pipedream_source.test.js b/test/__tests__/pipedream_source.test.js deleted file mode 100644 index 1edc642bad..0000000000 --- a/test/__tests__/pipedream_source.test.js +++ /dev/null @@ -1,23 +0,0 @@ -const integration = "pipedream"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.message); - } - }); -}); diff --git a/test/__tests__/refiner_source.test.js b/test/__tests__/refiner_source.test.js deleted file mode 100644 index 5a064d0472..0000000000 --- a/test/__tests__/refiner_source.test.js +++ /dev/null @@ -1,23 +0,0 @@ -const integration = "refiner"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.message); - } - }); -}); diff --git a/test/__tests__/satismeter_source.test.js b/test/__tests__/satismeter_source.test.js deleted file mode 100644 index d0d1a540d3..0000000000 --- a/test/__tests__/satismeter_source.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const integration = "satismeter"; -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source.json`) -); - -const testData = JSON.parse(testDataFile); - -testData.forEach((data, index) => { - it(`${index}. ${integration} - ${data.description}`, () => { - try { - const output = transformer.process(data.input); - expect(output).toEqual(data.output); - } catch (error) { - expect(error.message).toEqual(data.output.error); - } - }); -}); diff --git a/test/__tests__/segment_source.test.js b/test/__tests__/segment_source.test.js deleted file mode 100644 index 3668232e4a..0000000000 --- a/test/__tests__/segment_source.test.js +++ /dev/null @@ -1,22 +0,0 @@ -const integration = "segment"; -const name = "Segment"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - -test(`${name} Tests`, () => { - const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) - ); - const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) - ); - const inputData = JSON.parse(inputDataFile); - const expectedData = JSON.parse(outputDataFile); - inputData.forEach(async (input, index) => { - const output = transformer.process(input); - expect(output).toEqual(expectedData[index]); - }); -}); diff --git a/test/__tests__/shopify_source.test.js b/test/__tests__/shopify_source.test.js deleted file mode 100644 index 2a7e69bd82..0000000000 --- a/test/__tests__/shopify_source.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const integration = "shopify"; -const name = "Shopify"; - -const fs = require("fs"); -const path = require("path"); - -const transformer = require(`../../src/v0/sources/${integration}/transform`); - - -// Processor Test Data -const testDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}.json`) -); -const testData = JSON.parse(testDataFile); -describe(`${name} Tests`, () => { - describe("Processor", () => { - testData.forEach((dataPoint, index) => { - it(`${index}. ${integration} - ${dataPoint.description}`, async () => { - try { - const output = await transformer.process(dataPoint.input); - // anonId is being set dynamically by the transformer. - // so removing it before json comparison. - // Note: the anonymousId field is removed from the output json as well. - delete output.anonymousId; - expect(output).toEqual(dataPoint.output); - } catch (error) { - expect(error.message).toEqual(dataPoint.output.error); - } - }); - }); - }); -}); diff --git a/test/__tests__/signl4_source.test.js b/test/__tests__/signl4_source.test.js deleted file mode 100644 index 2bdec5aedf..0000000000 --- a/test/__tests__/signl4_source.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const integration = "signl4"; -const name = "SIGNL4"; - -const fs = require("fs"); -const path = require("path"); -const version = "v0"; - -const transformer = require(`../../src/${version}/sources/${integration}/transform`); - -const inputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_input.json`) -); -const outputDataFile = fs.readFileSync( - path.resolve(__dirname, `./data/${integration}_source_output.json`) -); - -const inputData = JSON.parse(inputDataFile); -const expectedData = JSON.parse(outputDataFile); - -inputData.forEach((input, index) => { - it(`${name} Tests: payload: ${index}`, async () => { - try { - const output = await transformer.process(input); - delete output.anonymousId; - expect(output).toEqual(expectedData[index]); - } catch (error) { - expect(error.message).toEqual(expectedData[index].message); - } - }); -}); diff --git a/test/integrations/component.test.ts b/test/integrations/component.test.ts index d4c109c55c..e7645db64d 100644 --- a/test/integrations/component.test.ts +++ b/test/integrations/component.test.ts @@ -211,6 +211,7 @@ const sourceTestHandler = async (tcData) => { // Trigger the test suites describe.each(allTestDataFilePaths)('%s Tests', (testDataPath) => { beforeEach(() => { + jest.resetAllMocks(); jest.clearAllMocks(); }); // add special mocks for specific destinations diff --git a/test/integrations/destinations/af/deleteUsers/data.ts b/test/integrations/destinations/af/deleteUsers/data.ts index c552b79f67..608e7e5586 100644 --- a/test/integrations/destinations/af/deleteUsers/data.ts +++ b/test/integrations/destinations/af/deleteUsers/data.ts @@ -7,7 +7,7 @@ import utils from '../../../../../src/v0/util'; const defaultMockFns = () => { jest.spyOn(Date.prototype, 'toISOString').mockReturnValue('2023-09-24T11:22:24.018Z'); - jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); + jest.spyOn(utils, 'generateUUID').mockReturnValueOnce('97fcd7b2-cc24-47d7-b776-057b7b199513'); }; const requests = [ diff --git a/test/integrations/destinations/airship/processor/data.ts b/test/integrations/destinations/airship/processor/data.ts index cafbd02e74..3a6c5394cb 100644 --- a/test/integrations/destinations/airship/processor/data.ts +++ b/test/integrations/destinations/airship/processor/data.ts @@ -2381,4 +2381,9 @@ export const data = [ }, }, }, -]; +].map((tc) => ({ + ...tc, + mockFns: (_) => { + jest.spyOn(Date.prototype, 'toISOString').mockReturnValue('2015-02-23T22:28:55Z'); + }, +})); diff --git a/test/integrations/destinations/airship/router/data.ts b/test/integrations/destinations/airship/router/data.ts index 8ed6f57a42..df500d7413 100644 --- a/test/integrations/destinations/airship/router/data.ts +++ b/test/integrations/destinations/airship/router/data.ts @@ -465,4 +465,10 @@ export const data = [ }, }, }, -]; +].map((tc) => ({ + ...tc, + mockFns: (_) => { + jest.spyOn(Date.prototype, 'toISOString').mockReturnValue('2015-02-23T22:28:55Z'); + // jest.spyOn(Date, 'now').mockReturnValue(new Date('2023-10-14T12:34:56.789Z').valueOf()); + }, +})); diff --git a/test/integrations/destinations/attentive_tag/processor/data.ts b/test/integrations/destinations/attentive_tag/processor/data.ts index f585fb58d8..12e0f4bea1 100644 --- a/test/integrations/destinations/attentive_tag/processor/data.ts +++ b/test/integrations/destinations/attentive_tag/processor/data.ts @@ -1,5 +1,5 @@ export const mockFns = (_) => { - jest.useFakeTimers().setSystemTime(new Date('2023-10-14')); + jest.spyOn(Date, 'now').mockReturnValue(new Date('2023-10-14T00:00:00.000Z').valueOf()); }; export const data = [ @@ -1678,4 +1678,4 @@ export const data = [ }, }, }, -]; +].map((d) => ({ ...d, mockFns })); diff --git a/test/integrations/destinations/emarsys/deleteUsers/data.ts b/test/integrations/destinations/emarsys/deleteUsers/data.ts index 2bafe58a4c..96b27cad0d 100644 --- a/test/integrations/destinations/emarsys/deleteUsers/data.ts +++ b/test/integrations/destinations/emarsys/deleteUsers/data.ts @@ -1,10 +1,10 @@ +import crypto from 'crypto'; + +const buf = Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex'); export const mockFns = (_) => { + jest.spyOn(Date.prototype, 'toISOString').mockReturnValueOnce('2023-10-14T00:00:00.000Z'); // @ts-ignore - jest.useFakeTimers().setSystemTime(new Date('2023-10-14')); - jest.mock('crypto', () => ({ - ...jest.requireActual('crypto'), - randomBytes: jest.fn().mockReturnValue(Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex')), - })); + jest.spyOn(crypto, 'randomBytes').mockReturnValue(buf); }; const commonEventMap = [ diff --git a/test/integrations/destinations/emarsys/processor/data.ts b/test/integrations/destinations/emarsys/processor/data.ts index cfa53fd4f6..badd14e7cc 100644 --- a/test/integrations/destinations/emarsys/processor/data.ts +++ b/test/integrations/destinations/emarsys/processor/data.ts @@ -1,10 +1,12 @@ +import crypto from 'crypto'; + +const buf = Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex'); + export const mockFns = (_) => { // @ts-ignore - jest.useFakeTimers().setSystemTime(new Date('2023-10-14')); - jest.mock('crypto', () => ({ - ...jest.requireActual('crypto'), - randomBytes: jest.fn().mockReturnValue(Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex')), - })); + jest.spyOn(Date.prototype, 'toISOString').mockReturnValueOnce('2023-10-14T00:00:00.000Z'); + // @ts-ignore + jest.spyOn(crypto, 'randomBytes').mockReturnValue(buf); }; const comonHeader = { diff --git a/test/integrations/destinations/emarsys/router/data.ts b/test/integrations/destinations/emarsys/router/data.ts index 8f449bd351..5f6dad1077 100644 --- a/test/integrations/destinations/emarsys/router/data.ts +++ b/test/integrations/destinations/emarsys/router/data.ts @@ -53,13 +53,13 @@ const commonDestination = { Enabled: true, }; +const buf = Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex'); + export const mockFns = (_) => { // @ts-ignore - jest.useFakeTimers().setSystemTime(new Date('2019-10-14')); - jest.mock('crypto', () => ({ - ...jest.requireActual('crypto'), - randomBytes: jest.fn().mockReturnValue(Buffer.from('5398e214ae99c2e50afb709a3bc423f9', 'hex')), - })); + jest.spyOn(Date.prototype, 'toISOString').mockReturnValueOnce('2019-10-14T00:00:00.000Z'); + // @ts-ignore + jest.spyOn(crypto, 'randomBytes').mockReturnValue(buf); }; export const data = [ diff --git a/test/integrations/destinations/facebook_conversions/mocks.ts b/test/integrations/destinations/facebook_conversions/mocks.ts index c155897bc4..ea2c8f8205 100644 --- a/test/integrations/destinations/facebook_conversions/mocks.ts +++ b/test/integrations/destinations/facebook_conversions/mocks.ts @@ -1,3 +1,3 @@ export const defaultMockFns = () => { - jest.spyOn(Date, 'now').mockImplementation(() => new Date('2023-11-12T15:46:51.000Z').valueOf()); + jest.spyOn(Date, 'now').mockReturnValue(new Date('2023-11-12T15:46:51.000Z').valueOf()); }; diff --git a/test/integrations/destinations/ga4/mocks.ts b/test/integrations/destinations/ga4/mocks.ts index 3a27349ff7..19bb0c8ff4 100644 --- a/test/integrations/destinations/ga4/mocks.ts +++ b/test/integrations/destinations/ga4/mocks.ts @@ -1,5 +1,3 @@ -export const defaultMockFns = () => { - return jest - .spyOn(Date, 'now') - .mockImplementation(() => new Date('2022-04-29T05:17:09Z').valueOf()); +export const defaultMockFns = (_) => { + return jest.spyOn(Date, 'now').mockReturnValueOnce(new Date('2022-04-29T05:17:09Z').valueOf()); }; diff --git a/test/integrations/destinations/ga4/processor/validationTestData.ts b/test/integrations/destinations/ga4/processor/validationTestData.ts index 4e5d09bfcf..0030ee178e 100644 --- a/test/integrations/destinations/ga4/processor/validationTestData.ts +++ b/test/integrations/destinations/ga4/processor/validationTestData.ts @@ -151,6 +151,7 @@ export const validationTestData: ProcessorTestData[] = [ ], }, }, + // @ts-ignore mockFns: defaultMockFns, }, { @@ -208,7 +209,11 @@ export const validationTestData: ProcessorTestData[] = [ ], }, }, - mockFns: defaultMockFns, + mockFns: (_) => { + return jest + .spyOn(Date, 'now') + .mockReturnValueOnce(new Date('2012-04-29T05:17:09Z').valueOf()); + }, }, { id: 'ga4-validation-test-3', @@ -756,6 +761,11 @@ export const validationTestData: ProcessorTestData[] = [ ], }, }, + mockFns: (_) => { + return jest + .spyOn(Date, 'now') + .mockReturnValueOnce(new Date('2023-04-29T05:17:09Z').valueOf()); + }, }, { id: 'ga4-validation-test-14', @@ -801,6 +811,11 @@ export const validationTestData: ProcessorTestData[] = [ ], }, }, + mockFns: (_) => { + return jest + .spyOn(Date, 'now') + .mockReturnValueOnce(new Date('2021-04-29T05:17:09Z').valueOf()); + }, }, { id: 'ga4-validation-test-15', diff --git a/test/integrations/destinations/ga4_v2/mocks.ts b/test/integrations/destinations/ga4_v2/mocks.ts index 3a27349ff7..e7f5e144eb 100644 --- a/test/integrations/destinations/ga4_v2/mocks.ts +++ b/test/integrations/destinations/ga4_v2/mocks.ts @@ -1,5 +1,3 @@ export const defaultMockFns = () => { - return jest - .spyOn(Date, 'now') - .mockImplementation(() => new Date('2022-04-29T05:17:09Z').valueOf()); + return jest.spyOn(Date, 'now').mockReturnValue(new Date('2022-04-29T05:17:09Z').valueOf()); }; diff --git a/test/integrations/destinations/moengage/processor/data.ts b/test/integrations/destinations/moengage/processor/data.ts index 1ce8705f53..df6e1226b6 100644 --- a/test/integrations/destinations/moengage/processor/data.ts +++ b/test/integrations/destinations/moengage/processor/data.ts @@ -1,3 +1,7 @@ +const mockFns = (_) => { + jest.spyOn(Date, 'now').mockReturnValueOnce(new Date('2023-10-14T00:00:00.000Z').valueOf()); +}; + export const data = [ { name: 'moengage', @@ -295,6 +299,7 @@ export const data = [ ], }, }, + mockFns, }, { name: 'moengage', @@ -1629,6 +1634,7 @@ export const data = [ ], }, }, + mockFns, }, { name: 'moengage', diff --git a/test/integrations/destinations/moengage/router/data.ts b/test/integrations/destinations/moengage/router/data.ts index 0f8a3de41b..b24453fd34 100644 --- a/test/integrations/destinations/moengage/router/data.ts +++ b/test/integrations/destinations/moengage/router/data.ts @@ -1,3 +1,7 @@ +const mockFns = (_) => { + jest.spyOn(Date, 'now').mockReturnValueOnce(new Date('2023-10-14T00:00:00.000Z').valueOf()); +}; + export const data = [ { name: 'moengage', @@ -432,5 +436,6 @@ export const data = [ }, }, }, + mockFns, }, ]; diff --git a/test/integrations/destinations/mp/common.ts b/test/integrations/destinations/mp/common.ts index d40afa0c02..f8aae81780 100644 --- a/test/integrations/destinations/mp/common.ts +++ b/test/integrations/destinations/mp/common.ts @@ -1,7 +1,7 @@ import { Destination } from '../../../../src/types'; const defaultMockFns = () => { - jest.spyOn(Date, 'now').mockImplementation(() => new Date(Date.UTC(2020, 0, 25)).valueOf()); + jest.spyOn(Date, 'now').mockReturnValue(new Date(Date.UTC(2020, 0, 25)).valueOf()); }; const sampleDestination: Destination = { diff --git a/test/integrations/destinations/mp/processor/data.ts b/test/integrations/destinations/mp/processor/data.ts index db5bc840c2..d13cf64cae 100644 --- a/test/integrations/destinations/mp/processor/data.ts +++ b/test/integrations/destinations/mp/processor/data.ts @@ -3670,6 +3670,9 @@ export const data = [ ], }, }, + mockFns: (_) => { + jest.spyOn(Date, 'now').mockReturnValueOnce(new Date('2018-12-20T10:26:33.451Z').valueOf()); + }, }, { name: 'mp', diff --git a/test/integrations/destinations/optimizely_fullstack/processor/data.ts b/test/integrations/destinations/optimizely_fullstack/processor/data.ts index 52fbdfe5fe..fb514bc6b8 100644 --- a/test/integrations/destinations/optimizely_fullstack/processor/data.ts +++ b/test/integrations/destinations/optimizely_fullstack/processor/data.ts @@ -1,7 +1,7 @@ import utils from '../../../../../src/v0/util'; export const mockFns = (_) => { // @ts-ignore - jest.spyOn(utils, 'generateUUID').mockImplementation(() => 'generated_uuid'); + jest.spyOn(utils, 'generateUUID').mockReturnValueOnce('generated_uuid'); }; export const data = [ { diff --git a/test/integrations/destinations/pagerduty/processor/data.ts b/test/integrations/destinations/pagerduty/processor/data.ts index 97fe22daa0..bfa924c3bd 100644 --- a/test/integrations/destinations/pagerduty/processor/data.ts +++ b/test/integrations/destinations/pagerduty/processor/data.ts @@ -1,287 +1,287 @@ export const data = [ - { - name: 'pagerduty', - description: 'No Message type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - sentAt: '2022-10-11T13:10:54.877+05:30', - userId: 'user@45', - rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', - messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', - timestamp: '2022-10-11T13:10:52.137+05:30', - receivedAt: '2022-10-11T13:10:52.138+05:30', - request_ip: '[::1]', - originalTimestamp: '2022-10-11T13:10:54.877+05:30', - }, - destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type is required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Routing Key is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - sentAt: '2022-10-11T13:10:54.877+05:30', - userId: 'user@45', - context: {}, - rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', - messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', - timestamp: '2022-10-11T13:10:52.137+05:30', - receivedAt: '2022-10-11T13:10:52.138+05:30', - request_ip: '[::1]', - originalTimestamp: '2022-10-11T13:10:54.877+05:30', - }, - destination: { Config: {} }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Routing Key Is Required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Unsupported Event type', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - type: 'alias', - sentAt: '2022-10-11T13:10:54.877+05:30', - userId: 'user@45', - context: {}, - rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', - messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', - timestamp: '2022-10-11T13:10:52.137+05:30', - receivedAt: '2022-10-11T13:10:52.138+05:30', - request_ip: '[::1]', - originalTimestamp: '2022-10-11T13:10:54.877+05:30', - }, - destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event type alias is not supported', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'event name is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: {}, - }, - destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Event name is required', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Parameter source is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'Event name is required', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e' }, - }, - destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Missing required value from "properties.source"', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'dedup_key is not present', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'Event name is required', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { action: 'resolve' }, - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - error: 'dedup_key required for resolve events', - statTags: { - destType: 'PAGERDUTY', - errorCategory: 'dataValidation', - errorType: 'instrumentation', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, + // { + // name: 'pagerduty', + // description: 'No Message type', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // sentAt: '2022-10-11T13:10:54.877+05:30', + // userId: 'user@45', + // rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + // messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + // timestamp: '2022-10-11T13:10:52.137+05:30', + // receivedAt: '2022-10-11T13:10:52.138+05:30', + // request_ip: '[::1]', + // originalTimestamp: '2022-10-11T13:10:54.877+05:30', + // }, + // destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'Event type is required', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'instrumentation', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Routing Key is not present', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // sentAt: '2022-10-11T13:10:54.877+05:30', + // userId: 'user@45', + // context: {}, + // rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + // messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + // timestamp: '2022-10-11T13:10:52.137+05:30', + // receivedAt: '2022-10-11T13:10:52.138+05:30', + // request_ip: '[::1]', + // originalTimestamp: '2022-10-11T13:10:54.877+05:30', + // }, + // destination: { Config: {} }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'Routing Key Is Required', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'configuration', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Unsupported Event type', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // type: 'alias', + // sentAt: '2022-10-11T13:10:54.877+05:30', + // userId: 'user@45', + // context: {}, + // rudderId: 'caae04c5-959f-467b-a293-86f6c62d59e6', + // messageId: 'b6ce7f31-5d76-4240-94d2-3eea020ef791', + // timestamp: '2022-10-11T13:10:52.137+05:30', + // receivedAt: '2022-10-11T13:10:52.138+05:30', + // request_ip: '[::1]', + // originalTimestamp: '2022-10-11T13:10:54.877+05:30', + // }, + // destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'Event type alias is not supported', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'instrumentation', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'event name is not present', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: {}, + // }, + // destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'Event name is required', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'instrumentation', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Parameter source is not present', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'Event name is required', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e' }, + // }, + // destination: { Config: { routingKey: '9552b56325dc490bd0139be85f7b8fac' } }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'Missing required value from "properties.source"', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'instrumentation', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'dedup_key is not present', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'Event name is required', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { action: 'resolve' }, + // }, + // destination: { + // Config: { + // routingKey: '9552b56325dc490bd0139be85f7b8fac', + // dedupKeyFieldIdentifier: 'properties.dedupKey', + // }, + // }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // error: 'dedup_key required for resolve events', + // statTags: { + // destType: 'PAGERDUTY', + // errorCategory: 'dataValidation', + // errorType: 'instrumentation', + // feature: 'processor', + // implementation: 'native', + // module: 'destination', + // }, + // statusCode: 400, + // }, + // ], + // }, + // }, + // }, { name: 'pagerduty', description: 'Timestamp older then 90 days', @@ -363,420 +363,425 @@ export const data = [ ], }, }, - }, - { - name: 'pagerduty', - description: 'Trigger event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'apiSecret is not present', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { - action: 'trigger', - dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', - severity: 'critical', - component: 'ui', - source: 'rudder-webapp', - group: 'destination', - class: 'connection settings', - customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, - imageURLs: [ - { - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - alt: 'first image', - }, - { - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - alt: 'second image', - }, - { alt: 'third image' }, - ], - linkURLs: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - { text: 'Destructure Error' }, - ], - }, - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - XML: {}, - FORM: {}, - JSON: { - links: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - ], - images: [ - { - alt: 'first image', - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - }, - { - alt: 'second image', - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - }, - ], - payload: { - class: 'connection settings', - group: 'destination', - source: 'rudder-webapp', - summary: 'apiSecret is not present', - severity: 'critical', - component: 'ui', - custom_details: { 'ping time': '1500ms', 'load avg': 0.75 }, - }, - dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', - routing_key: '9552b56325dc490bd0139be85f7b8fac', - event_action: 'trigger', - }, - JSON_ARRAY: {}, - }, - type: 'REST', - files: {}, - method: 'POST', - params: {}, - headers: { 'Content-Type': 'application/json' }, - version: '1', - endpoint: 'https://events.pagerduty.com/v2/enqueue', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Acknowledge event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'apiSecret is not present', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { - action: 'acknowledge', - dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', - severity: 'critical', - component: 'ui', - source: 'rudder-webapp', - group: 'destination', - class: 'connection settings', - customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, - imageURLs: [ - { - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - alt: 'first image', - }, - { - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - alt: 'second image', - }, - { alt: 'third image' }, - ], - linkURLs: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - { text: 'Destructure Error' }, - ], - }, - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - XML: {}, - FORM: {}, - JSON: { - dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', - routing_key: '9552b56325dc490bd0139be85f7b8fac', - event_action: 'acknowledge', - }, - JSON_ARRAY: {}, - }, - type: 'REST', - files: {}, - method: 'POST', - params: {}, - headers: { 'Content-Type': 'application/json' }, - version: '1', - endpoint: 'https://events.pagerduty.com/v2/enqueue', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Resolve event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'apiSecret is not present', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { - action: 'resolve', - dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', - severity: 'critical', - component: 'ui', - source: 'rudder-webapp', - group: 'destination', - class: 'connection settings', - customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, - imageURLs: [ - { - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - alt: 'first image', - }, - { - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - alt: 'second image', - }, - { alt: 'third image' }, - ], - linkURLs: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - { text: 'Destructure Error' }, - ], - }, - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - XML: {}, - FORM: {}, - JSON: { - dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', - routing_key: '9552b56325dc490bd0139be85f7b8fac', - event_action: 'resolve', - }, - JSON_ARRAY: {}, - }, - type: 'REST', - files: {}, - method: 'POST', - params: {}, - headers: { 'Content-Type': 'application/json' }, - version: '1', - endpoint: 'https://events.pagerduty.com/v2/enqueue', - userId: '', - }, - statusCode: 200, - }, - ], - }, - }, - }, - { - name: 'pagerduty', - description: 'Change event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - channel: 'web', - type: 'track', - event: 'Github CI/CD Triggered', - messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', - userId: 'user@45', - properties: { - source: 'rudder-webapp', - customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, - imageURLs: [ - { - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - alt: 'first image', - }, - { - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - alt: 'second image', - }, - { alt: 'third image' }, - ], - linkURLs: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - { text: 'Destructure Error' }, - ], - }, - integrations: { pagerduty: { type: 'changeEvent' } }, - }, - destination: { - Config: { - routingKey: '9552b56325dc490bd0139be85f7b8fac', - dedupKeyFieldIdentifier: 'properties.dedupKey', - }, - }, - }, - ], - method: 'POST', - }, - pathSuffix: '', - }, - output: { - response: { - status: 200, - body: [ - { - output: { - body: { - XML: {}, - FORM: {}, - JSON: { - links: [ - { - href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', - text: 'Js Object Error', - }, - { - href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', - text: 'Stack Overflow Error', - }, - ], - images: [ - { - alt: 'first image', - src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', - }, - { - alt: 'second image', - src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', - }, - ], - payload: { - source: 'rudder-webapp', - summary: 'Github CI/CD Triggered', - custom_details: { 'load avg': 0.75, 'ping time': '1500ms' }, - }, - routing_key: '9552b56325dc490bd0139be85f7b8fac', - }, - JSON_ARRAY: {}, - }, - type: 'REST', - files: {}, - method: 'POST', - params: {}, - headers: { 'Content-Type': 'application/json' }, - version: '1', - endpoint: 'https://events.pagerduty.com/v2/change/enqueue', - userId: '', - }, - statusCode: 200, - }, - ], - }, + mockFns: (_) => { + jest.spyOn(Date, 'now').mockImplementation(() => { + return new Date('2022-11-12T15:46:51.000Z').valueOf(); + }); }, }, + // { + // name: 'pagerduty', + // description: 'Trigger event', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'apiSecret is not present', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { + // action: 'trigger', + // dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + // severity: 'critical', + // component: 'ui', + // source: 'rudder-webapp', + // group: 'destination', + // class: 'connection settings', + // customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + // imageURLs: [ + // { + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // alt: 'first image', + // }, + // { + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // alt: 'second image', + // }, + // { alt: 'third image' }, + // ], + // linkURLs: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // { text: 'Destructure Error' }, + // ], + // }, + // }, + // destination: { + // Config: { + // routingKey: '9552b56325dc490bd0139be85f7b8fac', + // dedupKeyFieldIdentifier: 'properties.dedupKey', + // }, + // }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // output: { + // body: { + // XML: {}, + // FORM: {}, + // JSON: { + // links: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // ], + // images: [ + // { + // alt: 'first image', + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // }, + // { + // alt: 'second image', + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // }, + // ], + // payload: { + // class: 'connection settings', + // group: 'destination', + // source: 'rudder-webapp', + // summary: 'apiSecret is not present', + // severity: 'critical', + // component: 'ui', + // custom_details: { 'ping time': '1500ms', 'load avg': 0.75 }, + // }, + // dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + // routing_key: '9552b56325dc490bd0139be85f7b8fac', + // event_action: 'trigger', + // }, + // JSON_ARRAY: {}, + // }, + // type: 'REST', + // files: {}, + // method: 'POST', + // params: {}, + // headers: { 'Content-Type': 'application/json' }, + // version: '1', + // endpoint: 'https://events.pagerduty.com/v2/enqueue', + // userId: '', + // }, + // statusCode: 200, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Acknowledge event', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'apiSecret is not present', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { + // action: 'acknowledge', + // dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + // severity: 'critical', + // component: 'ui', + // source: 'rudder-webapp', + // group: 'destination', + // class: 'connection settings', + // customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + // imageURLs: [ + // { + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // alt: 'first image', + // }, + // { + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // alt: 'second image', + // }, + // { alt: 'third image' }, + // ], + // linkURLs: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // { text: 'Destructure Error' }, + // ], + // }, + // }, + // destination: { + // Config: { + // routingKey: '9552b56325dc490bd0139be85f7b8fac', + // dedupKeyFieldIdentifier: 'properties.dedupKey', + // }, + // }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // output: { + // body: { + // XML: {}, + // FORM: {}, + // JSON: { + // dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + // routing_key: '9552b56325dc490bd0139be85f7b8fac', + // event_action: 'acknowledge', + // }, + // JSON_ARRAY: {}, + // }, + // type: 'REST', + // files: {}, + // method: 'POST', + // params: {}, + // headers: { 'Content-Type': 'application/json' }, + // version: '1', + // endpoint: 'https://events.pagerduty.com/v2/enqueue', + // userId: '', + // }, + // statusCode: 200, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Resolve event', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'apiSecret is not present', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { + // action: 'resolve', + // dedupKey: '9116b734-7e6b-4497-ab51-c16744d4487e', + // severity: 'critical', + // component: 'ui', + // source: 'rudder-webapp', + // group: 'destination', + // class: 'connection settings', + // customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + // imageURLs: [ + // { + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // alt: 'first image', + // }, + // { + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // alt: 'second image', + // }, + // { alt: 'third image' }, + // ], + // linkURLs: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // { text: 'Destructure Error' }, + // ], + // }, + // }, + // destination: { + // Config: { + // routingKey: '9552b56325dc490bd0139be85f7b8fac', + // dedupKeyFieldIdentifier: 'properties.dedupKey', + // }, + // }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // output: { + // body: { + // XML: {}, + // FORM: {}, + // JSON: { + // dedup_key: '9116b734-7e6b-4497-ab51-c16744d4487e', + // routing_key: '9552b56325dc490bd0139be85f7b8fac', + // event_action: 'resolve', + // }, + // JSON_ARRAY: {}, + // }, + // type: 'REST', + // files: {}, + // method: 'POST', + // params: {}, + // headers: { 'Content-Type': 'application/json' }, + // version: '1', + // endpoint: 'https://events.pagerduty.com/v2/enqueue', + // userId: '', + // }, + // statusCode: 200, + // }, + // ], + // }, + // }, + // }, + // { + // name: 'pagerduty', + // description: 'Change event', + // feature: 'processor', + // module: 'destination', + // version: 'v0', + // input: { + // request: { + // body: [ + // { + // message: { + // channel: 'web', + // type: 'track', + // event: 'Github CI/CD Triggered', + // messageId: '9116b734-7e6b-4497-ab51-c16744d4487e', + // userId: 'user@45', + // properties: { + // source: 'rudder-webapp', + // customDetails: { 'ping time': '1500ms', 'load avg': 0.75 }, + // imageURLs: [ + // { + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // alt: 'first image', + // }, + // { + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // alt: 'second image', + // }, + // { alt: 'third image' }, + // ], + // linkURLs: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // { text: 'Destructure Error' }, + // ], + // }, + // integrations: { pagerduty: { type: 'changeEvent' } }, + // }, + // destination: { + // Config: { + // routingKey: '9552b56325dc490bd0139be85f7b8fac', + // dedupKeyFieldIdentifier: 'properties.dedupKey', + // }, + // }, + // }, + // ], + // method: 'POST', + // }, + // pathSuffix: '', + // }, + // output: { + // response: { + // status: 200, + // body: [ + // { + // output: { + // body: { + // XML: {}, + // FORM: {}, + // JSON: { + // links: [ + // { + // href: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error', + // text: 'Js Object Error', + // }, + // { + // href: 'https://www.techtarget.com/whatis/definition/stack-overflow#:~:text=A%20stack%20overflow%20is%20a,been%20allocated%20to%20that%20stack', + // text: 'Stack Overflow Error', + // }, + // ], + // images: [ + // { + // alt: 'first image', + // src: 'https://static.s4be.cochrane.org/app/uploads/2017/04/shutterstock_531145954.jpg', + // }, + // { + // alt: 'second image', + // src: 'https://chart.googleapis.com/chart?chs=600x400&chd=t:6,2,9,5,2,5,7,4,8,2,1&cht=lc&chds=a&chxt=y&chm=D,0033FF,0,0,5,1', + // }, + // ], + // payload: { + // source: 'rudder-webapp', + // summary: 'Github CI/CD Triggered', + // custom_details: { 'load avg': 0.75, 'ping time': '1500ms' }, + // }, + // routing_key: '9552b56325dc490bd0139be85f7b8fac', + // }, + // JSON_ARRAY: {}, + // }, + // type: 'REST', + // files: {}, + // method: 'POST', + // params: {}, + // headers: { 'Content-Type': 'application/json' }, + // version: '1', + // endpoint: 'https://events.pagerduty.com/v2/change/enqueue', + // userId: '', + // }, + // statusCode: 200, + // }, + // ], + // }, + // }, + // }, ]; diff --git a/test/integrations/destinations/pagerduty/router/data.ts b/test/integrations/destinations/pagerduty/router/data.ts index 87761656f9..26efa4a232 100644 --- a/test/integrations/destinations/pagerduty/router/data.ts +++ b/test/integrations/destinations/pagerduty/router/data.ts @@ -267,5 +267,10 @@ export const data = [ }, }, }, + mockFns: (_) => { + jest.spyOn(Date, 'now').mockImplementation(() => { + return new Date('2023-12-20T10:26:33.451Z').valueOf(); + }); + }, }, ]; diff --git a/test/integrations/sources/adjust/data.ts b/test/integrations/sources/adjust/data.ts index 733a1d6235..e57feb45d4 100644 --- a/test/integrations/sources/adjust/data.ts +++ b/test/integrations/sources/adjust/data.ts @@ -2,7 +2,7 @@ import { skip } from 'node:test'; import utils from '../../../../src/v0/util'; const defaultMockFns = () => { - jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); + jest.spyOn(utils, 'generateUUID').mockReturnValueOnce('97fcd7b2-cc24-47d7-b776-057b7b199513'); }; export const data = [ @@ -11,7 +11,6 @@ export const data = [ description: 'Simple track call', module: 'source', version: 'v0', - skipGo: 'FIXME', input: { request: { body: [ @@ -45,6 +44,7 @@ export const data = [ output: { batch: [ { + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', context: { library: { name: 'unknown', @@ -70,7 +70,6 @@ export const data = [ custom: 'custom', tracker_name: 'dummy', }, - anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', }, ], }, @@ -107,15 +106,19 @@ export const data = [ output: { response: { status: 200, - error: 'Query_parameters is missing', - statTags: { - destinationId: 'Non determinable', - errorCategory: 'transformation', - implementation: 'native', - module: 'source', - workspaceId: 'Non determinable', - }, - statusCode: 400, + body: [ + { + error: 'Query_parameters is missing', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], }, }, mockFns: () => { diff --git a/test/integrations/sources/appcenter/data.ts b/test/integrations/sources/appcenter/data.ts new file mode 100644 index 0000000000..0342b622d2 --- /dev/null +++ b/test/integrations/sources/appcenter/data.ts @@ -0,0 +1,372 @@ +import utils from '../../../../src/v0/util'; + +export const data = [ + { + name: 'appcenter', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + text: 'Hello from your abc-test app in App Center!', + sent_at: '2023-01-02T07: 53: 28.3117824Z', + url: 'https://appcenter.ms/users/abc-rudderstack.com/apps/abc-test', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + outputToSource: { + body: 'eyJ0ZXh0IjoiSGVsbG8gZnJvbSB5b3VyIGFiYy10ZXN0IGFwcCBpbiBBcHAgQ2VudGVyISIsInNlbnRfYXQiOiIyMDIzLTAxLTAyVDA3OiA1MzogMjguMzExNzgyNFoiLCJ1cmwiOiJodHRwczovL2FwcGNlbnRlci5tcy91c2Vycy9hYmMtcnVkZGVyc3RhY2suY29tL2FwcHMvYWJjLXRlc3QifQ==', + contentType: 'application/json', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'appcenter', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + app_name: 'MSAppCenterTesting', + branch: 'master', + build_status: 'Succeeded', + build_id: '1', + build_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1', + build_reason: 'manual', + finish_time: '2021-03-02T16:41:29.891411Z', + icon_link: null, + notification_settings_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications', + os: 'Android', + start_time: '2021-03-02T16:34:13.9184874Z', + source_version: '7ed5c7b279316f19e9a0c45bb0fb49c0655471af', + sent_at: '2021-03-02T16:41:55.8819564Z', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'APPCENTER' }, + app: { name: 'MSAppCenterTesting', build: '1' }, + device: { type: 'Android' }, + + os: { name: 'Android' }, + }, + integrations: { APPCENTER: false }, + properties: { + app_name: 'MSAppCenterTesting', + branch: 'master', + build_status: 'Succeeded', + build_id: '1', + build_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/1', + build_reason: 'manual', + finish_time: '2021-03-02T16:41:29.891411Z', + icon_link: null, + notification_settings_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications', + os: 'Android', + start_time: '2021-03-02T16:34:13.9184874Z', + source_version: '7ed5c7b279316f19e9a0c45bb0fb49c0655471af', + sent_at: '2021-03-02T16:41:55.8819564Z', + }, + type: 'track', + event: 'Build Succeeded', + originalTimeStamp: '2021-03-02T16:34:13.9184874Z', + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + sentAt: '2021-03-02T16:41:55.8819564Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appcenter', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + app_name: 'MSAppCenterTesting', + branch: 'master', + build_status: 'Broken', + build_id: '2', + build_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2', + build_reason: 'automatic', + finish_time: '2021-03-02T16:52:04.2587506Z', + icon_link: null, + notification_settings_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications', + os: 'Android', + start_time: '2021-03-02T16:50:52.2584107Z', + source_version: '0624e1e3e48eaf2371c37316208ff83bdd5c123b', + sent_at: '2021-03-02T16:52:35.8848052Z', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'APPCENTER' }, + app: { name: 'MSAppCenterTesting', build: '2' }, + device: { type: 'Android' }, + + os: { name: 'Android' }, + }, + integrations: { APPCENTER: false }, + properties: { + app_name: 'MSAppCenterTesting', + branch: 'master', + build_status: 'Broken', + build_id: '2', + build_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/build/branches/master/builds/2', + build_reason: 'automatic', + finish_time: '2021-03-02T16:52:04.2587506Z', + icon_link: null, + notification_settings_link: + 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/settings/notifications', + os: 'Android', + start_time: '2021-03-02T16:50:52.2584107Z', + source_version: '0624e1e3e48eaf2371c37316208ff83bdd5c123b', + sent_at: '2021-03-02T16:52:35.8848052Z', + }, + type: 'track', + event: 'Build Failed', + originalTimeStamp: '2021-03-02T16:50:52.2584107Z', + sentAt: '2021-03-02T16:52:35.8848052Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appcenter', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + app_name: 'MSAppCenterTesting', + app_display_name: 'MSAppCenterTesting', + release_id: '1', + platform: 'Android', + uploaded_at: '2021-03-02T17:49:35.463Z', + fingerprint: '9cbdc86d96c5359d2af3972fdda46624', + release_notes: 'Degraded to 4.0.0', + version: '1614707021', + short_version: '1.0', + min_os: '7.1', + mandatory_update: true, + size: 2919106, + provisioning_profile_name: null, + provisioning_profile_type: null, + bundle_identifier: 'tech.desusai.msappcentertesting', + install_link: + 'https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email', + icon_link: + 'https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r', + distribution_group_id: '00000000-0000-0000-0000-000000000000', + installable: true, + sent_at: '2021-03-02T17:49:37.127635Z', + app_id: 'ce8b5280-4605-4c1c-8c48-bd54c8fdda31', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'APPCENTER' }, + app: { + name: 'MSAppCenterTesting', + version: '1.0', + namespace: 'tech.desusai.msappcentertesting', + }, + device: { type: 'Android' }, + + os: { name: 'Android' }, + }, + integrations: { APPCENTER: false }, + properties: { + app_name: 'MSAppCenterTesting', + app_display_name: 'MSAppCenterTesting', + release_id: '1', + platform: 'Android', + uploaded_at: '2021-03-02T17:49:35.463Z', + fingerprint: '9cbdc86d96c5359d2af3972fdda46624', + release_notes: 'Degraded to 4.0.0', + version: '1614707021', + short_version: '1.0', + min_os: '7.1', + mandatory_update: true, + size: 2919106, + provisioning_profile_name: null, + provisioning_profile_type: null, + bundle_identifier: 'tech.desusai.msappcentertesting', + install_link: + 'https://install.appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/releases/1?source=email', + icon_link: + 'https://appcenter-filemanagement-distrib2ede6f06e.azureedge.net/dbbd3d57-9c09-448b-9782-0d57200f7c9b/ic_launcher.png?sv=2019-02-02&sr=c&sig=BNzQcMcvTbwf4fv59ByGiYXsr%2BA9PYDFyGJCqsE2RO0%3D&se=2021-03-09T17%3A49%3A35Z&sp=r', + distribution_group_id: '00000000-0000-0000-0000-000000000000', + installable: true, + sent_at: '2021-03-02T17:49:37.127635Z', + app_id: 'ce8b5280-4605-4c1c-8c48-bd54c8fdda31', + }, + type: 'track', + event: 'Released Version 1.0', + sentAt: '2021-03-02T17:49:37.127635Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appcenter', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + id: '1139624368u', + name: 'tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)', + reason: 'java.lang.ArithmeticException: divide by zero', + file_name: null, + line_number: null, + url: 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u', + app_display_name: 'MSAppCenterTesting', + app_platform: 'Java', + app_version: '1.0(1)', + stack_trace: [ + 'tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);', + ], + affected_users: 0, + crash_count: 0, + sent_at: '2021-03-02T18:14:33.9713246Z', + app_id: 'ce8b5280-4605-4c1c-8c48-bd54c8fdda31', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'APPCENTER' }, + app: { name: 'MSAppCenterTesting', version: '1.0(1)' }, + }, + integrations: { APPCENTER: false }, + properties: { + id: '1139624368u', + name: 'tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25)', + reason: 'java.lang.ArithmeticException: divide by zero', + file_name: null, + line_number: null, + url: 'https://appcenter.ms/users/venkat-rudderstack.com/apps/MSAppCenterTesting/crashes/errors/1139624368u', + app_display_name: 'MSAppCenterTesting', + app_platform: 'Java', + app_version: '1.0(1)', + stack_trace: [ + 'tech.desusai.msappcentertesting.MainActivity$1.onClick (MainActivity.java:25);', + ], + affected_users: 0, + crash_count: 0, + sent_at: '2021-03-02T18:14:33.9713246Z', + app_id: 'ce8b5280-4605-4c1c-8c48-bd54c8fdda31', + }, + type: 'track', + event: 'App Crashed', + sentAt: '2021-03-02T18:14:33.9713246Z', + }, + ], + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: () => { + jest.spyOn(utils, 'generateUUID').mockReturnValueOnce('97fcd7b2-cc24-47d7-b776-057b7b199513'); + }, +})); diff --git a/test/integrations/sources/appsflyer/data.ts b/test/integrations/sources/appsflyer/data.ts new file mode 100644 index 0000000000..5ec64a07a8 --- /dev/null +++ b/test/integrations/sources/appsflyer/data.ts @@ -0,0 +1,2050 @@ +import utils from '../../../../src/v0/util'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data = [ + { + name: 'appsflyer', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + device_type: 'iPhoneXR', + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'ios', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + model: 'iPhoneXR', + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'ios', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'ios', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + device_type: 'Nokia 5.3', + idfa: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'android', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + model: 'Nokia 5.3', + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'android', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'android', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + device_type: 'iPhoneXR', + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'ios', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Unknwon event type from Appsflyer', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + device_type: 'iPhoneXR', + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'ios', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + model: 'iPhoneXR', + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'ios', version: '12.3.1' }, + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + type: 'track', + event: 'My Apps', + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'ios', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'ios', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'ios', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'ios', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'watchos', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'watchos', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'watchos', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'ipados', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'ipados', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'ipados', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'appsflyer', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + customer_user_id: 'hi.from@appsflyer.example.com', + is_lat: null, + contributor_2_af_prt: null, + bundle_id: 'com.appsflyer.AppsFlyer', + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + app_version: '1.4.1', + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + city: 'Khu Pho Binh Hoa', + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + app_name: 'AppsFlyer', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + postal_code: '823941', + wifi: true, + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + country_code: 'VN', + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + appsflyer_id: '1547985076649-5309999', + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + ip: '1.1.1.1', + oaid: null, + event_time: '2020-01-15 14:57:24.898', + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + android_id: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + idfa: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + carrier: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + os_version: '12.3.1', + platform: 'tvos', + af_sub3: null, + contributor_3_match_type: null, + selected_timezone: 'UTC', + af_ad_id: null, + contributor_3_touch_time: null, + user_agent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'AF' }, + ip: '1.1.1.1', + timezone: 'UTC', + userAgent: 'AppsFlyer/1 CFNetwork/978.0.7 Darwin/18.6.0', + app: { + namespace: 'com.appsflyer.AppsFlyer', + version: '1.4.1', + name: 'AppsFlyer', + }, + device: { + advertisingId: 'A7071198-3848-40A5-B3D0-94578D9BZZZZ', + adTrackingEnabled: true, + }, + network: { wifi: true }, + os: { name: 'tvos', version: '12.3.1' }, + traits: { + address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' }, + userId: 'hi.from@appsflyer.example.com', + }, + externalId: [{ type: 'appsflyerExternalId', value: '1547985076649-5309999' }], + }, + integrations: { AF: false }, + properties: { + idfv: '868049A3-4B2F-4A11-9B00-CFFC362XXXXX', + device_category: 'phone', + af_sub1: null, + is_lat: null, + contributor_2_af_prt: null, + gp_broadcast_referrer: '', + contributor_2_touch_time: null, + contributor_3_touch_type: null, + event_source: 'SDK', + af_cost_value: null, + contributor_1_match_type: null, + contributor_3_af_prt: null, + custom_data: null, + contributor_2_touch_type: null, + gp_install_begin: null, + amazon_aid: null, + gp_referrer: null, + af_cost_model: null, + af_c_id: null, + attributed_touch_time_selected_timezone: null, + selected_currency: 'USD', + install_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + install_time: '2019-01-20 04:51:16.000', + operator: null, + attributed_touch_type: null, + af_attribution_lookback: null, + campaign_type: null, + keyword_match_type: null, + af_adset_id: null, + device_download_time_selected_timezone: '2019-01-20 04:51:16.000+0000', + contributor_2_media_source: null, + conversion_type: null, + contributor_2_match_type: null, + api_version: '2.0', + attributed_touch_time: null, + revenue_in_selected_currency: null, + is_retargeting: false, + gp_click_time: null, + contributor_1_af_prt: null, + match_type: null, + dma: 'None', + http_referrer: null, + af_sub5: null, + af_prt: null, + event_revenue_currency: 'USD', + store_reinstall: null, + install_app_store: null, + media_source: 'organic', + deeplink_url: null, + campaign: null, + af_keywords: null, + region: 'AS', + cost_in_selected_currency: null, + event_value: '{}', + oaid: null, + is_receipt_validated: null, + contributor_1_campaign: null, + af_sub4: null, + imei: null, + contributor_3_campaign: null, + event_revenue_usd: null, + af_sub2: null, + original_url: null, + contributor_2_campaign: null, + contributor_3_media_source: null, + af_adset: null, + af_ad: null, + state: '57', + network_account_id: null, + retargeting_conversion_type: null, + af_channel: null, + af_cost_currency: null, + contributor_1_media_source: null, + keyword_id: null, + device_download_time: '2019-01-20 04:51:16.000', + contributor_1_touch_type: null, + af_reengagement_window: null, + af_siteid: null, + language: 'en-US', + app_id: 'id1217828636', + contributor_1_touch_time: null, + event_revenue: null, + af_ad_type: null, + event_name: 'My Apps', + af_sub_siteid: null, + advertising_id: null, + af_sub3: null, + contributor_3_match_type: null, + af_ad_id: null, + contributor_3_touch_time: null, + is_primary_attribution: true, + sdk_version: 'v4.10.0', + event_time_selected_timezone: '2020-01-15 14:57:24.898+0000', + }, + type: 'track', + event: 'My Apps', + userId: 'hi.from@appsflyer.example.com', + timestamp: '2020-01-15 14:57:24.898', + originalTimestamp: '2020-01-15 14:57:24.898', + platform: 'tvos', + traits: { address: { city: 'Khu Pho Binh Hoa', zip: '823941', country: 'VN' } }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: () => { + defaultMockFns(); + }, +})); diff --git a/test/integrations/sources/auth0/data.ts b/test/integrations/sources/auth0/data.ts index 953888920b..daedf1b75d 100644 --- a/test/integrations/sources/auth0/data.ts +++ b/test/integrations/sources/auth0/data.ts @@ -10,7 +10,7 @@ export const data = [ description: 'successful signup', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', + input: { request: { body: [ @@ -533,7 +533,7 @@ export const data = [ description: 'add member to an organization', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', + input: { request: { body: [ @@ -673,7 +673,7 @@ export const data = [ description: 'update tenant settings', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', + input: { request: { body: [ @@ -1245,7 +1245,7 @@ export const data = [ description: 'missing userId', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', + input: { request: { body: [ @@ -1352,7 +1352,7 @@ export const data = [ description: 'missing userId for all the requests in a batch', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', + input: { request: { body: [ @@ -1508,7 +1508,6 @@ export const data = [ description: 'empty batch', module: 'source', version: 'v0', - skipGo: 'dynamic anonymousId', input: { request: { body: [], diff --git a/test/integrations/sources/braze/data.ts b/test/integrations/sources/braze/data.ts index e140bbc030..a4031e1bd0 100644 --- a/test/integrations/sources/braze/data.ts +++ b/test/integrations/sources/braze/data.ts @@ -1,11 +1,17 @@ +import utils from '../../../../src/v0/util'; import { commonSourceConfigProperties, commonSourceDefinition } from './common'; +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + export const data = [ { name: 'braze', description: 'event mapping done in UI', module: 'source', version: 'v1', + skipGo: 'Custom source config', input: { request: { body: [ @@ -88,6 +94,7 @@ export const data = [ description: 'The event is not mapped in the UI', module: 'source', version: 'v1', + input: { request: { body: [ @@ -170,6 +177,7 @@ export const data = [ description: 'users.messages.inappmessage.Click event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -270,6 +278,7 @@ export const data = [ description: 'users.messages.pushnotification.Send event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -365,6 +374,7 @@ export const data = [ description: 'users.messages.email.Open event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -460,6 +470,7 @@ export const data = [ description: 'users.messages.sms.Delivery send', module: 'source', version: 'v1', + input: { request: { body: [ @@ -553,6 +564,7 @@ export const data = [ description: 'users.messages.inappmessage.Click event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -655,6 +667,7 @@ export const data = [ description: 'users.messages.pushnotification.Send event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -752,6 +765,7 @@ export const data = [ description: 'users.messages.email.Open event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -849,6 +863,7 @@ export const data = [ description: 'users.messages.sms.Delivery event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -944,6 +959,7 @@ export const data = [ description: 'users.behaviors.CustomEvent any custom event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -1052,6 +1068,7 @@ export const data = [ description: 'users.behaviors.Purchase event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -1164,6 +1181,7 @@ export const data = [ description: 'users.behaviors.app.SessionStart event', module: 'source', version: 'v1', + input: { request: { body: [ @@ -1249,4 +1267,9 @@ export const data = [ }, }, }, -]; +].map((tc) => ({ + ...tc, + mockFns: () => { + defaultMockFns(); + }, +})); diff --git a/test/integrations/sources/canny/data.ts b/test/integrations/sources/canny/data.ts new file mode 100644 index 0000000000..ac471904f9 --- /dev/null +++ b/test/integrations/sources/canny/data.ts @@ -0,0 +1,1665 @@ +import utils from '../../../../src/v0/util'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data = [ + { + name: 'canny', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-28T10:52:46.294Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 13, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-28T10:52:46.172Z', + customFields: [{ id: '62e13820d7949d44b92d3876', name: 'abc', value: '123' }], + details: 'Array of images', + eta: null, + id: '62e26a7e1d4ea13c124337bd', + imageURLs: [ + 'https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg', + 'https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg', + ], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Custom Fields Testing', + url: 'https://rudder.canny.io/admin/board/features/p/custom-fields-testing', + }, + objectType: 'post', + type: 'post.created', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'post.created', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-28T10:52:46.294Z', + originalTimestamp: '2022-07-28T10:52:46.294Z', + type: 'track', + properties: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 13, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-28T10:52:46.172Z', + customFields: [{ id: '62e13820d7949d44b92d3876', name: 'abc', value: '123' }], + details: 'Array of images', + eta: null, + id: '62e26a7e1d4ea13c124337bd', + imageURLs: [ + 'https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg', + 'https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg', + ], + objectType: 'post', + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Custom Fields Testing', + url: 'https://rudder.canny.io/admin/board/features/p/custom-fields-testing', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T10:35:16.390Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 10, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-26T08:18:52.459Z', + deletedBy: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + details: "This is the post's details", + eta: null, + id: '62dfa36c9950e94655320fe7', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-4', + }, + objectType: 'post', + type: 'post.deleted', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'post.deleted', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T10:35:16.390Z', + originalTimestamp: '2022-07-26T10:35:16.390Z', + type: 'track', + properties: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 10, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-26T08:18:52.459Z', + deletedBy: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + details: "This is the post's details", + eta: null, + id: '62dfa36c9950e94655320fe7', + imageURLs: [], + objectType: 'post', + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-4', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T18:32:28.337Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + category: null, + commentCount: 0, + created: '2022-07-26T10:43:43.752Z', + details: "This is the post's details", + eta: null, + id: '62dfc55ffe7f6f465b9b4568', + imageURLs: [], + issue: { + description: + "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", + id: '10001', + key: 'TES-2', + status: 'To Do', + summary: 'Canny Source Testing', + url: 'https://rudderstack-user.atlassian.net/browse/TES-2', + }, + owner: null, + score: 2, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-8', + }, + objectType: 'post', + type: 'post.jira_issue_linked', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'post.jira_issue_linked', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T18:32:28.337Z', + originalTimestamp: '2022-07-26T18:32:28.337Z', + type: 'track', + properties: { + by: null, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + category: null, + commentCount: 0, + created: '2022-07-26T10:43:43.752Z', + details: "This is the post's details", + eta: null, + id: '62dfc55ffe7f6f465b9b4568', + imageURLs: [], + issue: { + description: + "This is the post's details\n\nhttps://rudder.canny.io/admin/board/features/p/post-title-8", + id: '10001', + key: 'TES-2', + status: 'To Do', + summary: 'Canny Source Testing', + url: 'https://rudderstack-user.atlassian.net/browse/TES-2', + }, + objectType: 'post', + owner: null, + score: 2, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-8', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-27T04:08:24.377Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + category: null, + commentCount: 0, + created: '2022-07-26T11:32:31.228Z', + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + issue: { + description: + 'Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2', + id: '10002', + key: 'TES-3', + status: 'To Do', + summary: 'Images testing', + url: 'https://rudderstack-user.atlassian.net/browse/TES-3', + }, + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + objectType: 'post', + type: 'post.jira_issue_unlinked', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'post.jira_issue_unlinked', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-27T04:08:24.377Z', + originalTimestamp: '2022-07-27T04:08:24.377Z', + type: 'track', + properties: { + objectType: 'post', + by: null, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + category: null, + commentCount: 0, + created: '2022-07-26T11:32:31.228Z', + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + issue: { + description: + 'Array of images\n\nhttps://rudder.canny.io/admin/board/features/p/images-testing-2', + id: '10002', + key: 'TES-3', + status: 'To Do', + summary: 'Images testing', + url: 'https://rudderstack-user.atlassian.net/browse/TES-3', + }, + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T18:07:03.143Z', + object: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + changeComment: { + imageURLs: ['https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp'], + value: '', + }, + changedAt: '2022-07-26T18:07:03.143Z', + changer: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + commentCount: 1, + created: '2022-07-26T08:22:31.089Z', + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + jira: { linkedIssues: [], linkedIssueIDs: [] }, + owner: null, + score: 2, + status: 'planned', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + objectType: 'post', + type: 'post.status_changed', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'post.status_changed', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T18:07:03.143Z', + originalTimestamp: '2022-07-26T18:07:03.143Z', + type: 'track', + properties: { + objectType: 'post', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + changeComment: { + imageURLs: ['https://canny.io/images/0a4b1c6a967ad9fc17f0c71dc11d1de2.webp'], + value: '', + }, + changedAt: '2022-07-26T18:07:03.143Z', + changer: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + commentCount: 1, + created: '2022-07-26T08:22:31.089Z', + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + jira: { linkedIssues: [], linkedIssueIDs: [] }, + owner: null, + score: 2, + status: 'planned', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T10:52:17.712Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 11, + url: 'https://rudder.canny.io/admin/board/features', + }, + created: '2022-07-26T10:52:17.618Z', + id: '62dfc761af6e2b467381b103', + imageURLs: ['https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp'], + internal: true, + mentions: [], + parentID: null, + post: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 1, + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + owner: null, + score: 2, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + private: false, + value: 'webhook-test', + }, + objectType: 'comment', + type: 'comment.created', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'comment.created', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T10:52:17.712Z', + originalTimestamp: '2022-07-26T10:52:17.712Z', + type: 'track', + properties: { + objectType: 'comment', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 11, + url: 'https://rudder.canny.io/admin/board/features', + }, + created: '2022-07-26T10:52:17.618Z', + id: '62dfc761af6e2b467381b103', + imageURLs: ['https://canny.io/images/59ef1b731f87d1c84bbdc078d0b9221e.webp'], + internal: true, + mentions: [], + parentID: null, + post: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 1, + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + owner: null, + score: 2, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + private: false, + value: 'webhook-test', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-27T04:12:09.290Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + created: '2022-07-27T04:11:59.942Z', + id: '62e0bb0faf6e2b467328b133', + imageURLs: [], + parentID: null, + post: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + private: false, + value: 'good', + }, + objectType: 'comment', + type: 'comment.deleted', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'comment.deleted', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-27T04:12:09.290Z', + originalTimestamp: '2022-07-27T04:12:09.290Z', + type: 'track', + properties: { + objectType: 'comment', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + created: '2022-07-27T04:11:59.942Z', + id: '62e0bb0faf6e2b467328b133', + imageURLs: [], + parentID: null, + post: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + private: false, + value: 'good', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T11:32:31.378Z', + object: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T11:32:31.263Z', + id: '62dfd0cfb2870d468c9618f5', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + score: 1, + voter: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + }, + objectType: 'vote', + type: 'vote.created', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'vote.created', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T11:32:31.378Z', + originalTimestamp: '2022-07-26T11:32:31.378Z', + type: 'track', + properties: { + objectType: 'vote', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T11:32:31.263Z', + id: '62dfd0cfb2870d468c9618f5', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + score: 1, + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-8', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T18:09:27.358Z', + object: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T08:22:31.109Z', + id: '62dfa4479950e9465532a338', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 1, + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + owner: null, + score: 1, + status: 'planned', + tags: [ + { + id: '62e02db67ad24c46bc175f56', + name: 'abc-tag', + postCount: 1, + url: 'https://rudder.canny.io/admin/board/features?tags=abc-tag', + }, + ], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + score: 0, + voter: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + }, + objectType: 'vote', + type: 'vote.deleted', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + event: 'vote.deleted', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T18:09:27.358Z', + originalTimestamp: '2022-07-26T18:09:27.358Z', + type: 'track', + properties: { + objectType: 'vote', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T08:22:31.109Z', + id: '62dfa4479950e9465532a338', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 1, + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + owner: null, + score: 1, + status: 'planned', + tags: [ + { + id: '62e02db67ad24c46bc175f56', + name: 'abc-tag', + postCount: 1, + url: 'https://rudder.canny.io/admin/board/features?tags=abc-tag', + }, + ], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + score: 0, + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-9', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-28T10:52:46.294Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: 'sampleuserId', + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 13, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-28T10:52:46.172Z', + customFields: [{ id: '62e13820d7949d44b92d3876', name: 'abc', value: '123' }], + details: 'Array of images', + eta: null, + id: '62e26a7e1d4ea13c124337bd', + imageURLs: [ + 'https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg', + 'https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg', + ], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Custom Fields Testing', + url: 'https://rudder.canny.io/admin/board/features/p/custom-fields-testing', + }, + objectType: 'post', + type: 'post.created', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: 'sampleuserId', + event: 'post.created', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-28T10:52:46.294Z', + originalTimestamp: '2022-07-28T10:52:46.294Z', + type: 'track', + properties: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 13, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-28T10:52:46.172Z', + customFields: [{ id: '62e13820d7949d44b92d3876', name: 'abc', value: '123' }], + details: 'Array of images', + eta: null, + id: '62e26a7e1d4ea13c124337bd', + imageURLs: [ + 'https://canny.io/images/6371453a825c79351c52a6063c3af476.jpg', + 'https://canny.io/images/47db6ee5035bfb45ea87a74f2eb17928.jpg', + ], + objectType: 'post', + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Custom Fields Testing', + url: 'https://rudder.canny.io/admin/board/features/p/custom-fields-testing', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-10', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T11:32:31.378Z', + object: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T11:32:31.263Z', + id: '62dfd0cfb2870d468c9618f5', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + score: 1, + voter: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: '123', + }, + }, + objectType: 'vote', + type: 'vote.created', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '123', + event: 'vote.created', + integrations: { Canny: false }, + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Canny', version: '1.0.0' }, + traits: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + }, + externalId: [{ type: 'cannyUserId', id: '62d14c90fff7c80d0ec08375' }], + }, + timestamp: '2022-07-26T11:32:31.378Z', + originalTimestamp: '2022-07-26T11:32:31.378Z', + type: 'track', + properties: { + objectType: 'vote', + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T11:32:31.263Z', + id: '62dfd0cfb2870d468c9618f5', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 0, + details: 'Array of images', + eta: null, + id: '62dfd0cfb2870d468c9618dd', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Images testing', + url: 'https://rudder.canny.io/admin/board/features/p/images-testing-2', + }, + score: 1, + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-11', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T18:09:27.358Z', + object: { + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 12, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + created: '2022-07-26T08:22:31.109Z', + id: '62dfa4479950e9465532a338', + post: { + author: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + by: null, + category: null, + commentCount: 1, + details: "This is the post's details", + eta: null, + id: '62dfa4479950e9465532a31e', + imageURLs: [], + owner: null, + score: 1, + status: 'planned', + tags: [ + { + id: '62e02db67ad24c46bc175f56', + name: 'abc-tag', + postCount: 1, + url: 'https://rudder.canny.io/admin/board/features?tags=abc-tag', + }, + ], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-7', + }, + score: 0, + voter: { + avatarURL: 'https://canny.io/images/cddfd145056cd4bc04132ee0e7de04ee.png', + created: '2022-07-15T11:16:32.648Z', + email: null, + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + }, + objectType: 'vote', + type: 'vote.deleted', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: + 'Missing essential fields from Canny. Error: (TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received null)', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + }, + ], + }, + }, + }, + { + name: 'canny', + description: 'test-12', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + created: '2022-07-26T10:35:16.390Z', + object: { + author: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + board: { + created: '2022-07-25T12:11:19.895Z', + id: '62de88676bc28b44aaaf25cc', + name: 'features', + postCount: 10, + url: 'https://rudder.canny.io/admin/board/features', + }, + by: null, + category: null, + commentCount: 0, + created: '2022-07-26T08:18:52.459Z', + deletedBy: { + created: '2022-07-15T11:16:32.648Z', + email: 'test@rudderstack.com', + id: '62d14c90fff7c80d0ec08375', + isAdmin: true, + name: 'Rudder Test', + url: 'https://rudder.canny.io/admin/users/dummyUser', + userID: null, + }, + details: "This is the post's details", + eta: null, + id: '62dfa36c9950e94655320fe7', + imageURLs: [], + owner: null, + score: 1, + status: 'open', + tags: [], + title: 'Post Title', + url: 'https://rudder.canny.io/admin/board/features/p/post-title-4', + }, + objectType: 'post', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + statusCode: 400, + error: 'Missing essential fields from Canny', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: () => { + defaultMockFns(); + }, +})); diff --git a/test/integrations/sources/customerio/data.ts b/test/integrations/sources/customerio/data.ts new file mode 100644 index 0000000000..be2fc1a62e --- /dev/null +++ b/test/integrations/sources/customerio/data.ts @@ -0,0 +1,1439 @@ +import utils from '../../../../src/v0/util'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data = [ + { + name: 'customerio', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: '0200102', + identifiers: { id: '0200102' }, + email_address: 'test@example.com', + }, + event_id: '01E4C4CT6YDC7Y5M7FE1GWWPQJ', + object_type: 'customer', + metric: 'subscribed', + timestamp: 'abc', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Customer Subscribed', + properties: { eventId: '01E4C4CT6YDC7Y5M7FE1GWWPQJ' }, + userId: '0200102', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: '0200102', + identifiers: { id: '0200102' }, + email_address: 'test@example.com', + }, + event_id: '01E4C4CT6YDC7Y5M7FE1GWWPQJ', + object_type: 'customer', + metric: 'subscribed', + timestamp: '1585250199', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Customer Subscribed', + properties: { eventId: '01E4C4CT6YDC7Y5M7FE1GWWPQJ' }, + userId: '0200102', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: '0200102', + identifiers: { id: '0200102' }, + email_address: 'test@example.com', + }, + event_id: '01E4C4CT6YDC7Y5M7FE1GWWPQJ', + object_type: 'customer', + metric: 'subscribed', + timestamp: 1585250199, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Customer Subscribed', + properties: { eventId: '01E4C4CT6YDC7Y5M7FE1GWWPQJ' }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:16:39.000Z', + sentAt: '2020-03-26T19:16:39.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: '0200102', + identifiers: { id: '0200102' }, + email_address: 'test@example.com', + }, + event_id: '01E4C4C6P79C12J5A6KPE6XNFD', + object_type: 'customer', + metric: 'unsubscribed', + timestamp: 1585250179, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Customer Unsubscribed', + properties: { eventId: '01E4C4C6P79C12J5A6KPE6XNFD' }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:16:19.000Z', + sentAt: '2020-03-26T19:16:19.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 36, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgABcRhIBqSp7kiPekGBIeVh', + }, + event_id: '01E4C4G1S0AMNG0XVF2M7RPH5S', + object_type: 'email', + metric: 'drafted', + timestamp: 1585250305, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Drafted', + properties: { + eventId: '01E4C4G1S0AMNG0XVF2M7RPH5S', + deliveryId: 'RPILAgABcRhIBqSp7kiPekGBIeVh', + actionId: 36, + broadcastId: 9, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:18:25.000Z', + sentAt: '2020-03-26T19:18:25.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + content_id: 1146, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=', + failure_message: '550 5.5.0 Requested action not taken: mailbox unavailable', + newsletter_id: 736, + recipient: 'test@example.com', + subject: 'Thanks for joining!', + }, + event_id: '12ASDG7S9P6MAZPTJ78DAND9GDC', + object_type: 'email', + metric: 'bounced', + timestamp: 1234567890, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Bounced', + properties: { + eventId: '12ASDG7S9P6MAZPTJ78DAND9GDC', + deliveryId: 'RMehBAAAAXE7r_ONUGXly9DBGkpq1JS31=', + contentId: 1146, + emailSubject: 'Thanks for joining!', + reason: '550 5.5.0 Requested action not taken: mailbox unavailable', + newsletterId: 736, + }, + userId: '0200102', + originalTimestamp: '2009-02-13T23:31:30.000Z', + sentAt: '2009-02-13T23:31:30.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 36, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgABcRhIBqSp7kiPekGBIeVh', + href: 'http://google.com', + link_id: 1, + recipient: 'test@example.com', + subject: 'hello', + }, + event_id: '01E4C8BES5XT87ZWRJFTB35YJ3', + object_type: 'email', + metric: 'clicked', + timestamp: 1585254348, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Link Clicked', + properties: { + eventId: '01E4C8BES5XT87ZWRJFTB35YJ3', + deliveryId: 'RPILAgABcRhIBqSp7kiPekGBIeVh', + actionId: 36, + broadcastId: 9, + emailSubject: 'hello', + link: { url: 'http://google.com', id: 1 }, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T20:25:48.000Z', + sentAt: '2020-03-26T20:25:48.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 42, + campaign_id: 23, + content: 'Welcome to the club, we are with you.', + customer_id: 'user-123', + delivery_id: 'RAECAAFwnUSneIa0ZXkmq8EdkAM==', + headers: { 'Custom-Header': ['custom-value'] }, + identifiers: { id: 'user-123' }, + recipient: 'test@example.com', + subject: 'Thanks for signing up', + }, + event_id: '01E2EMRMM6TZ12TF9WGZN0WJQT', + metric: 'sent', + object_type: 'email', + timestamp: 1644227937, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Sent', + properties: { + eventId: '01E2EMRMM6TZ12TF9WGZN0WJQT', + deliveryId: 'RAECAAFwnUSneIa0ZXkmq8EdkAM==', + actionId: 42, + content: 'Welcome to the club, we are with you.', + emailSubject: 'Thanks for signing up', + campaignId: 23, + }, + userId: 'user-123', + originalTimestamp: '2022-02-07T09:58:57.000Z', + sentAt: '2022-02-07T09:58:57.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-8', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: 'user-123', + delivery_id: 'REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==', + identifiers: { cio_id: '7ef807109981', id: 'user-123' }, + recipient: 'test@example.com', + subject: 'Thanks for signing up', + transactional_message_id: 2, + }, + event_id: '01ER4R5WB62QWCNREKFB4DYXGR', + metric: 'delivered', + object_type: 'email', + timestamp: 1675196819, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { cioId: '7ef807109981', email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Delivered', + properties: { + eventId: '01ER4R5WB62QWCNREKFB4DYXGR', + deliveryId: 'REAC4wUAAYYJgQgkyRqwwEPeOA6Nfv==', + emailSubject: 'Thanks for signing up', + transactionalMessageId: 2, + }, + userId: 'user-123', + originalTimestamp: '2023-01-31T20:26:59.000Z', + sentAt: '2023-01-31T20:26:59.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-9', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 38, + campaign_id: 6, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RAEABQFxN56fWzydfV4_EGvfobI=', + failure_message: 'NoDevicesSynced', + }, + event_id: '01E4VSX8SZ0T9AQMH4Q16NRB89', + object_type: 'push', + metric: 'attempted', + timestamp: 1585776075, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Push Attempted', + properties: { + eventId: '01E4VSX8SZ0T9AQMH4Q16NRB89', + deliveryId: 'RAEABQFxN56fWzydfV4_EGvfobI=', + actionId: 38, + reason: 'NoDevicesSynced', + campaignId: 6, + }, + userId: '0200102', + originalTimestamp: '2020-04-01T21:21:15.000Z', + sentAt: '2020-04-01T21:21:15.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-10', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 37, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + device_platform: 'android', + }, + ], + }, + event_id: '01E4C4HDQ7P1X9KTKF0ZX7PWHE', + object_type: 'push', + metric: 'sent', + timestamp: 1585250350, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Push Sent', + properties: { + eventId: '01E4C4HDQ7P1X9KTKF0ZX7PWHE', + deliveryId: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + actionId: 37, + broadcastId: 9, + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + device_platform: 'android', + }, + ], + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:19:10.000Z', + sentAt: '2020-03-26T19:19:10.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-11', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 37, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + href: 'ciosas://product/2', + link_id: 1, + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + }, + ], + }, + event_id: '01E4V2SBHYK4TNTG8WKMP39G9R', + object_type: 'push', + metric: 'clicked', + timestamp: 1585751829, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Push Link Clicked', + properties: { + eventId: '01E4V2SBHYK4TNTG8WKMP39G9R', + deliveryId: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + actionId: 37, + broadcastId: 9, + link: { url: 'ciosas://product/2', id: 1 }, + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + }, + ], + }, + userId: '0200102', + originalTimestamp: '2020-04-01T14:37:09.000Z', + sentAt: '2020-04-01T14:37:09.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-12', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 41, + campaign_id: 7, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'ROk1AAIBcR4iT6mueuxiDtzO8HXv', + failure_message: + "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309.", + }, + event_id: '01E4F3DCS83P8HT7R3E6DWQN1X', + object_type: 'sms', + metric: 'attempted', + timestamp: 1234567890, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'SMS Attempted', + properties: { + eventId: '01E4F3DCS83P8HT7R3E6DWQN1X', + deliveryId: 'ROk1AAIBcR4iT6mueuxiDtzO8HXv', + actionId: 41, + reason: + "Twilio Error 21408: Permission to send an SMS has not been enabled for the region indicated by the 'To' number: +18008675309.", + campaignId: 7, + }, + userId: '0200102', + originalTimestamp: '2009-02-13T23:31:30.000Z', + sentAt: '2009-02-13T23:31:30.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-13', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 38, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgIBcRh6qzHz-8gKvscP2UZa', + href: 'https://app.com/verify', + link_id: 1, + recipient: '+18008675309', + }, + event_id: '01E4XXPN42JDF4B1ATQKTZ8WHV', + object_type: 'sms', + metric: 'clicked', + timestamp: 1585847161, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: '+18008675309' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'SMS Link Clicked', + properties: { + eventId: '01E4XXPN42JDF4B1ATQKTZ8WHV', + deliveryId: 'RPILAgIBcRh6qzHz-8gKvscP2UZa', + actionId: 38, + broadcastId: 9, + link: { url: 'https://app.com/verify', id: 1 }, + }, + userId: '0200102', + originalTimestamp: '2020-04-02T17:06:01.000Z', + sentAt: '2020-04-02T17:06:01.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-14', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 39, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgQBcRhNAufb0s30bmz5HD7Y', + recipient: '#signups', + }, + event_id: '01E4C4TQKD6KJ274870J5DE2HB', + object_type: 'slack', + metric: 'sent', + timestamp: 1585250655, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: '#signups' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Slack Message Sent', + properties: { + eventId: '01E4C4TQKD6KJ274870J5DE2HB', + deliveryId: 'RPILAgQBcRhNAufb0s30bmz5HD7Y', + actionId: 39, + broadcastId: 9, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:24:15.000Z', + sentAt: '2020-03-26T19:24:15.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-15', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 39, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgQBcRhocpCJE3mFfwvRzNe6', + href: 'http://bing.com', + link_id: 1, + recipient: '#signups', + }, + event_id: '01E4C6HJTBNDX18XC4B88M3Y2G', + object_type: 'slack', + metric: 'clicked', + timestamp: 1585252451, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: '#signups' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Slack Message Link Clicked', + properties: { + eventId: '01E4C6HJTBNDX18XC4B88M3Y2G', + deliveryId: 'RPILAgQBcRhocpCJE3mFfwvRzNe6', + actionId: 39, + broadcastId: 9, + link: { url: 'http://bing.com', id: 1 }, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:54:11.000Z', + sentAt: '2020-03-26T19:54:11.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-16', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 39, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgQBcRhIBqRiZAc0fyQiLvkC', + failure_message: 'value passed for channel was invalid', + }, + event_id: '01E4C4HDQ77BCN0X23Z3WBE764', + object_type: 'slack', + metric: 'failed', + timestamp: 1585250350, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Slack Message Failed', + properties: { + eventId: '01E4C4HDQ77BCN0X23Z3WBE764', + deliveryId: 'RPILAgQBcRhIBqRiZAc0fyQiLvkC', + actionId: 39, + broadcastId: 9, + reason: 'value passed for channel was invalid', + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:19:10.000Z', + sentAt: '2020-03-26T19:19:10.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-17', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 40, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgEBcRhIBqSrYcXDr2ks6Pj9', + }, + event_id: '01E4C4G1S04QCV1NASF4NWMQNR', + object_type: 'webhook', + metric: 'drafted', + timestamp: 1585250305, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Webhook Message Drafted', + properties: { + eventId: '01E4C4G1S04QCV1NASF4NWMQNR', + deliveryId: 'RPILAgEBcRhIBqSrYcXDr2ks6Pj9', + actionId: 40, + broadcastId: 9, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:18:25.000Z', + sentAt: '2020-03-26T19:18:25.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-18', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 38, + broadcast_id: 6, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RAECAQFxNeUBx6LqgjqrN1j-BJc=', + failure_message: "Variable 'customer.test' is missing", + }, + event_id: '01E4TYA2KA9T0XGHCRJ784B774', + object_type: 'webhook', + metric: 'attempted', + timestamp: 1585747134, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Webhook Message Attempted', + properties: { + eventId: '01E4TYA2KA9T0XGHCRJ784B774', + deliveryId: 'RAECAQFxNeUBx6LqgjqrN1j-BJc=', + actionId: 38, + broadcastId: 6, + reason: "Variable 'customer.test' is missing", + }, + userId: '0200102', + originalTimestamp: '2020-04-01T13:18:54.000Z', + sentAt: '2020-04-01T13:18:54.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-19', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 40, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgEBcRhNAufr2aU82jtDZEh6', + recipient: 'https://test.example.com/process', + }, + event_id: '01E4C6EP0HCKRHKFARMZ5XEH7A', + object_type: 'webhook', + metric: 'sent', + timestamp: 1585252357, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'https://test.example.com/process' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Webhook Message Sent', + properties: { + eventId: '01E4C6EP0HCKRHKFARMZ5XEH7A', + deliveryId: 'RPILAgEBcRhNAufr2aU82jtDZEh6', + actionId: 40, + broadcastId: 9, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:52:37.000Z', + sentAt: '2020-03-26T19:52:37.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-20', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 40, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgEBcRhNAufr2aU82jtDZEh6', + href: 'http://bing.com', + link_id: 1, + recipient: 'https://test.example.com/process', + }, + event_id: '01E4C6F5N1Y54TVGJTN64Y1ZS9', + object_type: 'webhook', + metric: 'clicked', + timestamp: 1585252373, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'https://test.example.com/process' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Webhook Message Link Clicked', + properties: { + eventId: '01E4C6F5N1Y54TVGJTN64Y1ZS9', + deliveryId: 'RPILAgEBcRhNAufr2aU82jtDZEh6', + actionId: 40, + broadcastId: 9, + link: { url: 'http://bing.com', id: 1 }, + }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:52:53.000Z', + sentAt: '2020-03-26T19:52:53.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-21', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 38, + broadcast_id: 6, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RAECAQFxNeK3bC4SYqhQqFGBQrQ=', + failure_message: 'HTTP 404 Not Found []', + }, + event_id: '01E4TY5FVB0ZQ4KVDKRME0XSYZ', + object_type: 'webhook', + metric: 'failed', + timestamp: 1585746984, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Webhook Message Failed', + properties: { + eventId: '01E4TY5FVB0ZQ4KVDKRME0XSYZ', + deliveryId: 'RAECAQFxNeK3bC4SYqhQqFGBQrQ=', + actionId: 38, + broadcastId: 6, + reason: 'HTTP 404 Not Found []', + }, + userId: '0200102', + originalTimestamp: '2020-04-01T13:16:24.000Z', + sentAt: '2020-04-01T13:16:24.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'customerio', + description: 'test-22', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + action_id: 37, + broadcast_id: 9, + customer_id: '0200102', + identifiers: { id: '0200102' }, + delivery_id: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + href: 'ciosas://product/2', + link_id: 1, + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + }, + ], + }, + event_id: '01E4V2SBHYK4TNTG8WKMP39G9S', + object_type: 'push', + metric: 'delivered', + timestamp: 1585751830, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Push Delivered', + properties: { + eventId: '01E4V2SBHYK4TNTG8WKMP39G9S', + deliveryId: 'RPILAgUBcRhIBqSfeiIwdIYJKxTY', + actionId: 37, + broadcastId: 9, + link: { url: 'ciosas://product/2', id: 1 }, + recipients: [ + { + device_id: + 'eeC2XC_NVPo:APA91bEYRSgmu-dAZcOWi7RzKBbT9gdY3WJACOpLQEMAmAOsChJMAZWirvSlSF3EuHxb7qdwlYeOyCWtbsnR14Vyx5nwBmg5J3SyPxfNn-ey1tNgXIj5UOq8IBk2VwzMApk-xzD4JJof', + }, + ], + }, + userId: '0200102', + originalTimestamp: '2020-04-01T14:37:10.000Z', + sentAt: '2020-04-01T14:37:10.000Z', + }, + ], + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: () => { + defaultMockFns(); + }, +})); diff --git a/test/integrations/sources/formsort/data.ts b/test/integrations/sources/formsort/data.ts new file mode 100644 index 0000000000..ef275f6c1c --- /dev/null +++ b/test/integrations/sources/formsort/data.ts @@ -0,0 +1,126 @@ +export const data = [ + { + name: 'formsort', + description: 'when we receive finalized as false', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + answers: { + yes: true, + enter_email: 'test@user.com', + enter_name: '2022-11-17', + yes_or_no: false, + }, + responder_uuid: '66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7', + flow_label: 'new-flow-2022-11-25', + variant_label: 'main', + variant_uuid: '0828efa7-7215-4e7d-a7ab-6c1079010cea', + finalized: false, + created_at: '2022-11-25T14:41:22+00:00', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Formsort' }, + page: { title: 'new-flow-2022-11-25' }, + variantLabel: 'main', + variantUuid: '0828efa7-7215-4e7d-a7ab-6c1079010cea', + }, + integrations: { Formsort: false }, + type: 'track', + userId: '66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7', + originalTimestamp: '2022-11-25T14:41:22+00:00', + properties: { + yes: true, + enter_email: 'test@user.com', + enter_name: '2022-11-17', + yes_or_no: false, + }, + event: 'FlowLoaded', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'formsort', + description: 'when we receive finalized as true', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + answers: { + yes: true, + enter_email: 'test@user.com', + enter_name: '2022-11-17', + yes_or_no: false, + }, + responder_uuid: '66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7', + flow_label: 'new-flow-2022-11-25', + variant_label: 'main', + variant_uuid: '0828efa7-7215-4e7d-a7ab-6c1079010cea', + finalized: true, + created_at: '2022-11-25T14:41:22+00:00', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Formsort' }, + page: { title: 'new-flow-2022-11-25' }, + variantLabel: 'main', + variantUuid: '0828efa7-7215-4e7d-a7ab-6c1079010cea', + }, + integrations: { Formsort: false }, + type: 'track', + userId: '66a8e5bb-67e1-47ec-b55f-a26fd4be2dc7', + originalTimestamp: '2022-11-25T14:41:22+00:00', + properties: { + yes: true, + enter_email: 'test@user.com', + enter_name: '2022-11-17', + yes_or_no: false, + }, + event: 'FlowFinalized', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/gainsightpx/data.ts b/test/integrations/sources/gainsightpx/data.ts new file mode 100644 index 0000000000..b038001580 --- /dev/null +++ b/test/integrations/sources/gainsightpx/data.ts @@ -0,0 +1,1625 @@ +export const data = [ + { + name: 'gainsightpx', + description: 'Identify Call', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'SIGN_UP', + eventId: '1283c08b-f290-4bc4-9deb-75c7867d69ee', + propertyKey: 'AP-EOXPSEZGC5LA-2-1', + date: 1665582808376, + sessionId: 'AP-EOXPSEZGC5LA-2-1665582441084-16821368', + globalContext: {}, + userType: 'USER', + }, + configId: '32f07727-d231-4c9d-881e-fb50b80bad63', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'identify', + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + score: 0, + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + id: 'New!', + country: 'India', + account: { + id: 'IBM', + name: 'International Business Machine', + numberOfEmployees: 0, + numberOfUsers: 0, + }, + }, + userId: 'New!', + createdAt: '2022-10-12T13:53:11.753Z', + originalTimestamp: '2022-10-12T13:53:11.753Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Custom Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'CUSTOM', + eventId: 'df58cbd6-2736-4f8a-ad26-6049eac2e150', + propertyKey: 'AP-EOXPSEZGC5LA-2-1', + date: 1665656881448, + sessionId: 'AP-EOXPSEZGC5LA-2-1665656622955-48127533', + globalContext: {}, + userType: 'USER', + eventName: 'Product Clicked', + attributes: { + 'Audience Size': 5000, + name: 'TESTing TRACK CALL FIRST', + 'Launched date': 1520532660000, + Launched: true, + }, + url: 'http://127.0.0.1:5501/GPXTEST2.html', + referrer: '', + remoteHost: '122.161.66.140', + }, + configId: '32f07727-d231-4c9d-881e-fb50b80bad63', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + ip: '122.161.66.140', + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-EOXPSEZGC5LA-2-1', + 'Audience Size': 5000, + name: 'TESTing TRACK CALL FIRST', + 'Launched date': 1520532660000, + Launched: true, + ip: '122.161.66.140', + url: 'http://127.0.0.1:5501/GPXTEST2.html', + }, + userId: 'New!', + category: 'CUSTOM', + event: 'Product Clicked', + sentAt: '2022-10-13T10:28:01.448Z', + originalTimestamp: '2022-10-13T10:28:01.448Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Feedback Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'FEEDBACK', + eventId: 'd007bd76-decb-4a77-8456-d84fb15c6a83', + propertyKey: 'AP-E9VUBBLZ6BIS-2-1', + date: 1665415753621, + sessionId: 'AP-E9VUBBLZ6BIS-2-1665415678379-45445457', + globalContext: null, + userType: 'USER', + subject: 'feedback title', + category: 'Labels test', + description: 'feedback body', + labels: ['492120f5-3573-11ec-bef0-42010a800545'], + remoteHost: '122.161.66.140', + source: 'Knowledge Center Bot', + }, + configId: '32f07727-d231-4c9d-881e-fb50b80bad63', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + ip: '122.161.66.140', + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-E9VUBBLZ6BIS-2-1', + feedback: { + labels: ['492120f5-3573-11ec-bef0-42010a800545'], + description: 'feedback body', + subject: 'feedback title', + source: 'Knowledge Center Bot', + }, + ip: '122.161.66.140', + }, + userId: 'New!', + category: 'FEEDBACK', + event: 'Labels test', + sentAt: '2022-10-10T15:29:13.621Z', + originalTimestamp: '2022-10-10T15:29:13.621Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Feature Match Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'FEATURE_MATCH', + eventId: 'ae1e5538-1736-4088-86d1-e90a10ffe901-05951b40-944f-4052-9a4a-51c74683f658', + propertyKey: 'AP-8MF5LPSWUBFW-2-1', + date: 1665582808376, + sessionId: 'AP-8MF5LPSWUBFW-2-1601303023809-98881162', + globalContext: { role: 'Admin' }, + userType: 'USER', + featureId: '05951b40-944f-4052-9a4a-51c74683f658', + featureName: 'Charts', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-8MF5LPSWUBFW-2-1', + globalContext: { role: 'Admin' }, + featureId: '05951b40-944f-4052-9a4a-51c74683f658', + }, + userId: 'New!', + category: 'FEATURE_MATCH', + event: 'Charts', + sentAt: '2022-10-12T13:53:28.376Z', + originalTimestamp: '2022-10-12T13:53:28.376Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Segment Match Track Call and no userId and yes anonymousId as event.sessionId', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'SEGMENT', + eventId: 'ddb9ca94-beb1-449c-bdcd-b53190f8e784', + propertyKey: 'AP-8MF5LPSWUBFW-2-1', + date: 1665582808376, + sessionId: 'AP-8MF5LPSWUBFW-2-1601303023809-98881162', + globalContext: { role: 'Admin' }, + userType: 'USER', + segmentId: 'e3ab2e48-24f9-4602-ab92-b9f1f4343845', + segmentName: 'Linux User', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: 'AP-8MF5LPSWUBFW-2-1601303023809-98881162', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-8MF5LPSWUBFW-2-1', + globalContext: { role: 'Admin' }, + segmentId: 'e3ab2e48-24f9-4602-ab92-b9f1f4343845', + }, + category: 'SEGMENT', + event: 'Linux User', + sentAt: '2022-10-12T13:53:28.376Z', + originalTimestamp: '2022-10-12T13:53:28.376Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'No Match Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + eventType: 'Unavailable', + eventId: 'ddb9ca94-beb1-449c-bdcd-b53190f8e784', + propertyKey: 'AP-8MF5LPSWUBFW-2-1', + date: 1601303075964, + sessionId: 'AP-8MF5LPSWUBFW-2-1601303023809-98881162', + globalContext: { role: 'Admin' }, + userType: 'USER', + segmentId: 'e3ab2e48-24f9-4602-ab92-b9f1f4343845', + segmentName: 'Linux User', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Event type Unavailable not supported', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Survey Track Call -> Multi Question Survey ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'SURVEY', + eventId: 'c9883e3b-05d4-4f96-8b9c-e2ce10430493', + propertyKey: 'AP-N6SV00EVMR1E-2-1', + date: 1601303075964, + sessionId: 'AP-N6SV00EVMR1E-2-1605265939566-23853426', + globalContext: { role: 'Admin' }, + userType: 'EMPTY_USER_TYPE', + contentType: 'IN_APP_MULTIPLE_QUESTION_SURVEY', + engagementId: 'e5362226-75da-4ef6-999a-823727e3d7a7', + engagementName: 'Quarterly Survey', + surveyType: 'Multi Question', + interaction: 'SINGLE_STEP_SURVEY_RESPONDED', + score: 0, + activation: 'Auto', + executionId: '1ad2d383-d1fa-425d-84f0-2a531e17a5d9', + executionDate: 1605265939965, + questionType: 'Multi choice', + questionId: 'de9e6bf1-351c-46ec-907d-c985bd420c2b', + questionHtml: + '
Favorite travel destinations
', + questionText: 'Favorite travel destinations', + answers: [ + { + answerId: '563e2103-2906-4088-869f-bcccd185f288', + answerHtml: '
Europe
', + answerText: 'Europe', + }, + ], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-N6SV00EVMR1E-2-1', + globalContext: { role: 'Admin' }, + engagementId: 'e5362226-75da-4ef6-999a-823727e3d7a7', + contentType: 'IN_APP_MULTIPLE_QUESTION_SURVEY', + surveyType: 'Multi Question', + interaction: 'SINGLE_STEP_SURVEY_RESPONDED', + survey: { + activation: 'Auto', + questionType: 'Multi choice', + score: 0, + questionId: 'de9e6bf1-351c-46ec-907d-c985bd420c2b', + questionHtml: + '
Favorite travel destinations
', + questionText: 'Favorite travel destinations', + answers: [ + { + answerId: '563e2103-2906-4088-869f-bcccd185f288', + answerHtml: '
Europe
', + answerText: 'Europe', + }, + ], + }, + }, + userId: 'New!', + category: 'SURVEY', + event: 'Quarterly Survey', + sentAt: '2020-09-28T14:24:35.964Z', + originalTimestamp: '2020-09-28T14:24:35.964Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Survey Track Call -> NPS ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'SURVEY', + eventId: 'c9883e3b-05d4-4f96-8b9c-e2ce10430493', + propertyKey: 'AP-N6SV00EVMR1E-2-1', + date: 1601303075964, + sessionId: 'AP-N6SV00EVMR1E-2-1605265939566-23853426', + globalContext: { role: 'Admin' }, + userType: 'EMPTY_USER_TYPE', + contentType: 'IN_APP_MULTIPLE_QUESTION_SURVEY', + engagementId: 'e5362226-75da-4ef6-999a-823727e3d7a7', + engagementName: 'Quarterly Survey', + surveyType: 'Multi Question', + interaction: 'SINGLE_STEP_SURVEY_RESPONDED', + score: 0, + scoreType: null, + stepNumber: null, + userInput: 'I like new features', + activation: 'Auto', + executionId: '1ad2d383-d1fa-425d-84f0-2a531e17a5d9', + executionDate: 1605265939965, + questionType: 'Open text question', + questionHtml: + '
\n
\n How was your experience?\n
\n
\n', + questionText: 'How was your experience?', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-N6SV00EVMR1E-2-1', + globalContext: { role: 'Admin' }, + engagementId: 'e5362226-75da-4ef6-999a-823727e3d7a7', + contentType: 'IN_APP_MULTIPLE_QUESTION_SURVEY', + surveyType: 'Multi Question', + interaction: 'SINGLE_STEP_SURVEY_RESPONDED', + survey: { + activation: 'Auto', + userInput: 'I like new features', + questionType: 'Open text question', + score: 0, + questionHtml: + '
\n
\n How was your experience?\n
\n
\n', + questionText: 'How was your experience?', + }, + }, + userId: 'New!', + category: 'SURVEY', + event: 'Quarterly Survey', + sentAt: '2020-09-28T14:24:35.964Z', + originalTimestamp: '2020-09-28T14:24:35.964Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'Engagement Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'ENGAGEMENT', + eventId: '6494e73a-976b-4ee5-b8a8-de9effff7e80', + propertyKey: 'AP-N6SV00EVMR1E-2-1', + date: 1605262539389, + sessionId: 'AP-N6SV00EVMR1E-2-1605262502068-24197555', + globalContext: { role: 'Admin' }, + userType: 'EMPTY_USER_TYPE', + contentType: 'IN_APP_DIALOG', + engagementId: '83c30d4e-88c3-4054-a0fa-33451a6ea7fc', + engagementType: 'Dialog', + engagementName: 'Release Announcement', + interaction: 'VIEWED', + stepNumber: 1, + activation: 'Auto', + executionId: 'b633945f-d4a5-404a-ae39-5ced5b542240', + executionDate: 1605262539389, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-N6SV00EVMR1E-2-1', + engagementId: '83c30d4e-88c3-4054-a0fa-33451a6ea7fc', + contentType: 'IN_APP_DIALOG', + engagementType: 'Dialog', + interaction: 'VIEWED', + globalContext: { role: 'Admin' }, + engagement: { stepNumber: 1, activation: 'Auto' }, + }, + userId: 'New!', + category: 'ENGAGEMENT', + event: 'Release Announcement', + sentAt: '2020-11-13T10:15:39.389Z', + originalTimestamp: '2020-11-13T10:15:39.389Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'gainsightpx', + description: 'SegmentIO S2S Track Call ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + user: { + aptrinsicId: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + identifyId: 'New!', + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + lastSeenDate: 1665582808669, + signUpDate: 1665582791753, + firstVisitDate: 1665582791753, + title: 'Mr.', + phone: '', + score: 0, + role: '', + subscriptionId: '', + accountId: 'IBM', + numberOfVisits: 1, + location: { + countryName: 'India', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665582808376, + lastModifiedDate: 1665582808717, + customAttributes: null, + globalUnsubscribe: false, + sfdcContactId: '', + lastVisitedUserAgentData: null, + id: 'New!', + lastInferredLocation: null, + }, + account: { + id: 'IBM', + name: 'International Business Machine', + trackedSubscriptionId: '', + sfdcId: '', + lastSeenDate: 1665582808669, + dunsNumber: '', + industry: '', + numberOfEmployees: 0, + sicCode: '', + website: '', + naicsCode: '', + plan: '', + location: { + countryName: '', + countryCode: '', + stateName: '', + stateCode: '', + city: '', + street: '', + postalCode: '', + continent: '', + regionName: '', + timeZone: '', + coordinates: { latitude: 0, longitude: 0 }, + }, + numberOfUsers: 0, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + createDate: 1665578567565, + lastModifiedDate: 1665582808669, + customAttributes: null, + parentGroupId: '', + }, + event: { + eventType: 'SEGMENT_IO', + eventId: 'ajs-next-69810a17571dc115ccead5281cc3fb7d', + propertyKey: 'AP-EOXPSEZGC5LA-2-1', + date: 1666687235178, + sessionId: '31a524fa-1490-48db-9600-adfb1fa95333', + globalContext: {}, + userType: 'USER', + segmentIOEvent: { + pxPropertyKey: 'AP-EOXPSEZGC5LA-2', + type: 'group', + userId: '1001', + anonymousId: 'a4303a13-eb10-46d8-8935-d787daf1cfbd', + context: { + ip: '122.161.67.121', + library: { name: 'analytics.js', version: 'next-1.45.0' }, + locale: 'en-GB', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', + page: { + path: '/abc.html', + title: 'Engage Testing', + url: 'http://127.0.0.1:5501/abc.html', + }, + }, + messageId: 'ajs-next-69810a17571dc115ccead5281cc3fb7d', + receivedAt: '2022-10-25T08:40:35.184Z', + sentAt: '2022-10-25T08:40:34.809Z', + timestamp: '2022-10-25T08:40:35.178Z', + traits: { name: 'International Business Machine' }, + version: 2, + channel: 'client', + groupId: 'IBM', + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'GAINSIGHTPX' }, + traits: { + type: 'USER', + gender: 'EMPTY_GENDER', + email: 'userEmail@address.com', + firstName: 'test', + lastName: 'rudderlabs', + title: 'Mr.', + globalUnsubscribe: false, + accountId: 'IBM', + numberOfVisits: 1, + propertyKeys: ['AP-EOXPSEZGC5LA-2-1'], + score: 0, + id: 'New!', + country: 'India', + account: { + numberOfEmployees: 0, + numberOfUsers: 0, + id: 'IBM', + name: 'International Business Machine', + }, + }, + externalId: [ + { + type: 'gainsightpxAptrinsicId', + id: 'cab9c469-8602-4933-acdb-68338fbb9ab1', + }, + ], + }, + integrations: { GAINSIGHTPX: false }, + type: 'track', + properties: { + propertyKey: 'AP-EOXPSEZGC5LA-2-1', + pxPropertyKey: 'AP-EOXPSEZGC5LA-2', + type: 'group', + userId: '1001', + anonymousId: 'a4303a13-eb10-46d8-8935-d787daf1cfbd', + context: { + ip: '122.161.67.121', + library: { name: 'analytics.js', version: 'next-1.45.0' }, + locale: 'en-GB', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36', + page: { + path: '/abc.html', + title: 'Engage Testing', + url: 'http://127.0.0.1:5501/abc.html', + }, + }, + messageId: 'ajs-next-69810a17571dc115ccead5281cc3fb7d', + receivedAt: '2022-10-25T08:40:35.184Z', + sentAt: '2022-10-25T08:40:34.809Z', + timestamp: '2022-10-25T08:40:35.178Z', + traits: { name: 'International Business Machine' }, + version: 2, + channel: 'client', + groupId: 'IBM', + }, + userId: 'New!', + category: 'SEGMENT_IO', + event: 'SegmentIO Cloud Server', + sentAt: '2022-10-25T08:40:35.178Z', + originalTimestamp: '2022-10-25T08:40:35.178Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/iterable/data.ts b/test/integrations/sources/iterable/data.ts new file mode 100644 index 0000000000..b6fda071e4 --- /dev/null +++ b/test/integrations/sources/iterable/data.ts @@ -0,0 +1,2219 @@ +export const data = [ + { + name: 'iterable', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'test@rudderstack.com', + eventName: 'emailSubscribe', + dataFields: { + profileUpdatedAt: '2022-04-19 03:33:50 +00:00', + publicIdString: 'ad474bf7-e785-480f-b9d0-861b85ab5bf5', + signupSource: 'WebForm', + email: 'test@rudderstack.com', + createdAt: '2022-04-19 03:33:50 +00:00', + messageTypeIds: [], + emailListIds: [1589748], + channelIds: [], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test@rudderstack.com' }, + }, + event: 'emailSubscribe', + integrations: { Iterable: false }, + properties: { + channelIds: [], + createdAt: '2022-04-19 03:33:50 +00:00', + emailListIds: [1589748], + messageTypeIds: [], + profileUpdatedAt: '2022-04-19 03:33:50 +00:00', + publicIdString: 'ad474bf7-e785-480f-b9d0-861b85ab5bf5', + signupSource: 'WebForm', + }, + receivedAt: '2022-04-19T03:33:50.000Z', + timestamp: '2022-04-19T03:33:50.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventName: 'emailSubscribe', + dataFields: { + profileUpdatedAt: '2022-04-19 03:33:50 +00:00', + publicIdString: 'ad474bf7-e785-480f-b9d0-861b85ab5bf5', + signupSource: 'WebForm', + email: 'test@abcd.com', + createdAt: '2022-04-19 03:33:50 +00:00', + messageTypeIds: [], + emailListIds: [1589748], + channelIds: [], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Unknwon event type from Iterable', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'test@ruddstack.com', + eventTitle: 'smsReceived', + dataFields: { + fromPhoneNumber: '+16503926753', + toPhoneNumber: '+14155824541', + smsMessage: 'Message text', + email: 'docs@iterable.com', + createdAt: '2016-12-05 22:51:25 +00:00', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Unknwon event type from Iterable', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [{ email: 'test@rudderstack.com', eventName: 'inAppSendSkip' }], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test@rudderstack.com' }, + }, + event: 'inAppSendSkip', + integrations: { Iterable: false }, + type: 'track', + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'test@rudderstack.com', + eventName: 'emailSend', + dataFields: { + contentId: 331201, + email: 'test@rudderstack.com', + createdAt: '2016-12-02 20:21:04 +00:00', + campaignId: 59667, + templateId: 93849, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c59667:t93849:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test@rudderstack.com' }, + }, + event: 'emailSend', + integrations: { Iterable: false }, + properties: { + contentId: 331201, + createdAt: '2016-12-02 20:21:04 +00:00', + campaignId: 59667, + templateId: 93849, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c59667:t93849:docs@iterable.com', + }, + receivedAt: '2016-12-02T20:21:04.000Z', + timestamp: '2016-12-02T20:21:04.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'invalid_email@iterable.com', + eventName: 'emailBounce', + dataFields: { + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2598, + messageTypeId: 2870, + experimentId: null, + recipientState: 'HardBounce', + templateId: 167484, + email: 'invalid_email@iterable.com', + createdAt: '2017-05-15 23:59:47 +00:00', + campaignId: 114746, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailId: 'c114746:t167484:invalid_email@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: 'b053765f5d0d23b0d5e4dd960be9513f', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'invalid_email@iterable.com' }, + }, + event: 'emailBounce', + integrations: { Iterable: false }, + properties: { + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2598, + messageTypeId: 2870, + experimentId: null, + recipientState: 'HardBounce', + templateId: 167484, + createdAt: '2017-05-15 23:59:47 +00:00', + campaignId: 114746, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailId: 'c114746:t167484:invalid_email@iterable.com', + }, + receivedAt: '2017-05-15T23:59:47.000Z', + timestamp: '2017-05-15T23:59:47.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailClick', + dataFields: { + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36', + ip: '162.245.22.184', + templateId: 93849, + userAgentDevice: 'Mac', + url: 'https://www.iterable.com', + canonicalUrlId: '3145668988', + city: 'San Francisco', + region: 'CA', + email: 'docs@iterable.com', + createdAt: '2016-12-02 20:31:39 +00:00', + campaignId: 59667, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + linkUrl: 'https://www.iterable.com', + linkId: '3145668988', + emailId: 'c59667:t93849:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailClick', + integrations: { Iterable: false }, + properties: { + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36', + ip: '162.245.22.184', + templateId: 93849, + userAgentDevice: 'Mac', + url: 'https://www.iterable.com', + canonicalUrlId: '3145668988', + city: 'San Francisco', + region: 'CA', + createdAt: '2016-12-02 20:31:39 +00:00', + campaignId: 59667, + messageId: 'd0aa7801f91f4824997a631f3ed583c3', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + linkUrl: 'https://www.iterable.com', + linkId: '3145668988', + emailId: 'c59667:t93849:docs@iterable.com', + }, + receivedAt: '2016-12-02T20:31:39.000Z', + timestamp: '2016-12-02T20:31:39.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailComplaint', + dataFields: { + recipientState: 'Complaint', + templateId: 79190, + email: 'docs@iterable.com', + createdAt: '2016-12-09 18:52:19 +00:00', + campaignId: 49313, + messageId: 'd3c44d47b4994306b4db8d16a94db025', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'test template', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailComplaint', + integrations: { Iterable: false }, + properties: { + recipientState: 'Complaint', + templateId: 79190, + createdAt: '2016-12-09 18:52:19 +00:00', + campaignId: 49313, + messageId: 'd3c44d47b4994306b4db8d16a94db025', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'test template', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + receivedAt: '2016-12-09T18:52:19.000Z', + timestamp: '2016-12-09T18:52:19.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-8', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailOpen', + dataFields: { + userAgent: + 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)', + proxySource: 'Gmail', + ip: '66.249.84.204', + templateId: 79190, + device: 'Gmail', + email: 'docs@iterable.com', + createdAt: '2016-12-02 18:51:45 +00:00', + campaignId: 49313, + messageId: '210badf49fe54f2591d64ad0d055f4fb', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailOpen', + integrations: { Iterable: false }, + properties: { + userAgent: + 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)', + proxySource: 'Gmail', + ip: '66.249.84.204', + templateId: 79190, + device: 'Gmail', + createdAt: '2016-12-02 18:51:45 +00:00', + campaignId: 49313, + messageId: '210badf49fe54f2591d64ad0d055f4fb', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + receivedAt: '2016-12-02T18:51:45.000Z', + timestamp: '2016-12-02T18:51:45.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-9', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailSendSkip', + dataFields: { + createdAt: '2019-08-07 18:56:10 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 721398, + messageId: '98430abe1b9842c991ce221010121553', + email: 'docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailSendSkip', + integrations: { Iterable: false }, + properties: { + createdAt: '2019-08-07 18:56:10 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 721398, + messageId: '98430abe1b9842c991ce221010121553', + }, + receivedAt: '2019-08-07T18:56:10.000Z', + timestamp: '2019-08-07T18:56:10.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-10', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'test@rudderstack.com', + eventName: 'emailSubscribe', + dataFields: { + profileUpdatedAt: '2022-04-19 03:33:50 +00:00', + publicIdString: 'ad474bf7-e785-480f-b9d0-861b85ab5bf5', + signupSource: 'WebForm', + email: 'test@abcd.com', + createdAt: '2022-04-19 03:33:50 +00:00', + messageTypeIds: [], + emailListIds: [1589748], + channelIds: [], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test@rudderstack.com' }, + }, + event: 'emailSubscribe', + integrations: { Iterable: false }, + properties: { + channelIds: [], + createdAt: '2022-04-19 03:33:50 +00:00', + emailListIds: [1589748], + messageTypeIds: [], + profileUpdatedAt: '2022-04-19 03:33:50 +00:00', + publicIdString: 'ad474bf7-e785-480f-b9d0-861b85ab5bf5', + signupSource: 'WebForm', + }, + receivedAt: '2022-04-19T03:33:50.000Z', + timestamp: '2022-04-19T03:33:50.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-11', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailUnSubscribe', + dataFields: { + campaignId: 1089024, + messageId: 'bf008db8ab194b65816398c05bf30f99', + emailId: 'c1089024:t1526112:docs@iterable.com', + workflowName: 'My test workflow', + messageTypeIds: [], + locale: null, + templateId: 1526112, + emailSubject: 'Upcoming events!', + labels: [], + unsubSource: 'EmailLink', + createdAt: '2020-03-20 23:34:15 +00:00', + templateName: 'My test template', + emailListIds: [], + messageTypeId: 31082, + experimentId: null, + channelIds: [27447], + campaignName: 'My test campaign', + workflowId: 76786, + email: 'docs@iterable.com', + channelId: 27447, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailUnSubscribe', + integrations: { Iterable: false }, + properties: { + campaignId: 1089024, + messageId: 'bf008db8ab194b65816398c05bf30f99', + emailId: 'c1089024:t1526112:docs@iterable.com', + workflowName: 'My test workflow', + messageTypeIds: [], + locale: null, + templateId: 1526112, + emailSubject: 'Upcoming events!', + labels: [], + unsubSource: 'EmailLink', + createdAt: '2020-03-20 23:34:15 +00:00', + templateName: 'My test template', + emailListIds: [], + messageTypeId: 31082, + experimentId: null, + channelIds: [27447], + campaignName: 'My test campaign', + workflowId: 76786, + channelId: 27447, + }, + receivedAt: '2020-03-20T23:34:15.000Z', + timestamp: '2020-03-20T23:34:15.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-12', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + userId: '1', + eventName: 'hostedUnsubscribeClick', + dataFields: { + country: 'United States', + city: 'San Jose', + campaignId: 1074721, + ip: '192.168.0.1', + userAgentDevice: 'Mac', + messageId: 'ceb3d4d929fc406ca93b28a0ef1efff1', + emailId: 'c1074721:t1506266:docs@iterable.com', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + workflowName: 'My workflow', + locale: null, + templateId: 1506266, + emailSubject: 'My email subject', + url: 'https://iterable.com', + labels: [], + createdAt: '2020-03-21 00:24:08 +00:00', + templateName: 'My email template', + messageTypeId: 13406, + experimentId: null, + region: 'CA', + campaignName: 'My email campaign', + workflowId: 60102, + email: 'docs@iterable.com', + channelId: 12466, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '1', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'hostedUnsubscribeClick', + integrations: { Iterable: false }, + properties: { + country: 'United States', + city: 'San Jose', + campaignId: 1074721, + ip: '192.168.0.1', + userAgentDevice: 'Mac', + messageId: 'ceb3d4d929fc406ca93b28a0ef1efff1', + emailId: 'c1074721:t1506266:docs@iterable.com', + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36', + workflowName: 'My workflow', + locale: null, + templateId: 1506266, + emailSubject: 'My email subject', + url: 'https://iterable.com', + labels: [], + createdAt: '2020-03-21 00:24:08 +00:00', + templateName: 'My email template', + messageTypeId: 13406, + experimentId: null, + region: 'CA', + campaignName: 'My email campaign', + workflowId: 60102, + channelId: 12466, + }, + receivedAt: '2020-03-21T00:24:08.000Z', + timestamp: '2020-03-21T00:24:08.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-13', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'inAppClick', + dataFields: { + email: 'docs@iterable.com', + createdAt: '2018-03-27 00:44:40 +00:00', + campaignId: 269450, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'inAppClick', + integrations: { Iterable: false }, + properties: { createdAt: '2018-03-27 00:44:40 +00:00', campaignId: 269450 }, + receivedAt: '2018-03-27T00:44:40.000Z', + timestamp: '2018-03-27T00:44:40.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-14', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'inAppOpen', + dataFields: { + email: 'docs@iterable.com', + createdAt: '2018-03-27 00:44:30 +00:00', + campaignId: 269450, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'inAppOpen', + integrations: { Iterable: false }, + properties: { createdAt: '2018-03-27 00:44:30 +00:00', campaignId: 269450 }, + receivedAt: '2018-03-27T00:44:30.000Z', + timestamp: '2018-03-27T00:44:30.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-15', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'inAppSend', + dataFields: { + messageContext: { saveToInbox: false, trigger: 'immediate' }, + campaignId: 732678, + contentId: 18997, + messageId: 'vA16d48VVi4LQ5hMuZuquKzL0BXTdQJJUMJRjKnL1', + workflowName: null, + emailId: 'c732678:t1032729:docs@iterable.com', + locale: null, + templateId: 1032729, + inAppBody: '', + email: 'docs@iterable.com', + createdAt: '2016-12-10 01:00:38 +00:00', + campaignId: 74768, + templateId: 113554, + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'yourpath/subpath' }, + sound: '', + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'pushBounce', + integrations: { Iterable: false }, + properties: { + platformEndpoint: '', + createdAt: '2016-12-10 01:00:38 +00:00', + campaignId: 74768, + templateId: 113554, + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'yourpath/subpath' }, + sound: '', + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + receivedAt: '2016-12-10T01:00:38.000Z', + timestamp: '2016-12-10T01:00:38.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-18', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'pushOpen', + dataFields: { + appAlreadyRunning: false, + email: 'docs@iterable.com', + createdAt: '2016-12-08 01:25:22 +00:00', + campaignId: 74768, + templateId: 113554, + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'shop_home' }, + sound: null, + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'pushOpen', + integrations: { Iterable: false }, + properties: { + appAlreadyRunning: false, + createdAt: '2016-12-08 01:25:22 +00:00', + campaignId: 74768, + templateId: 113554, + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'shop_home' }, + sound: null, + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + receivedAt: '2016-12-08T01:25:22.000Z', + timestamp: '2016-12-08T01:25:22.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-19', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'pushSend', + dataFields: { + contentId: 6724, + platformEndpoint: '', + email: 'docs@iterable.com', + createdAt: '2016-12-08 00:53:11 +00:00', + campaignId: 74758, + templateId: 113541, + messageId: '73f2d3f13cd04db0b56c6143b179adc5', + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 1744, + messageTypeId: 1759, + experimentId: null, + payload: { a: '2' }, + sound: '', + badge: '', + contentAvailable: false, + deeplink: null, + locale: null, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'pushSend', + integrations: { Iterable: false }, + properties: { + contentId: 6724, + platformEndpoint: '', + createdAt: '2016-12-08 00:53:11 +00:00', + campaignId: 74758, + templateId: 113541, + messageId: '73f2d3f13cd04db0b56c6143b179adc5', + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 1744, + messageTypeId: 1759, + experimentId: null, + payload: { a: '2' }, + sound: '', + badge: '', + contentAvailable: false, + deeplink: null, + locale: null, + }, + receivedAt: '2016-12-08T00:53:11.000Z', + timestamp: '2016-12-08T00:53:11.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-20', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'pushSendSkip', + dataFields: { + createdAt: '2019-08-07 22:28:51 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 732667, + messageId: '8306ae0c74324635b7554947c5ec0e56', + email: 'docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'pushSendSkip', + integrations: { Iterable: false }, + properties: { + createdAt: '2019-08-07 22:28:51 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 732667, + messageId: '8306ae0c74324635b7554947c5ec0e56', + }, + receivedAt: '2019-08-07T22:28:51.000Z', + timestamp: '2019-08-07T22:28:51.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-21', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'pushUninstall', + dataFields: { + isGhostPush: false, + platformEndpoint: '', + email: 'docs@iterable.com', + createdAt: '2016-12-09 20:50:54 +00:00', + campaignId: 74768, + templateId: 113554, + messageId: '73f2d3f13cd04db0b56c6143b179adc5', + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'your_folder/30' }, + sound: '', + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'pushUninstall', + integrations: { Iterable: false }, + properties: { + isGhostPush: false, + platformEndpoint: '', + createdAt: '2016-12-09 20:50:54 +00:00', + campaignId: 74768, + templateId: 113554, + messageId: '73f2d3f13cd04db0b56c6143b179adc5', + pushMessage: 'Push message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 2203, + messageTypeId: 2439, + experimentId: null, + payload: { path: 'your_folder/30' }, + sound: '', + badge: null, + contentAvailable: false, + deeplink: null, + locale: null, + }, + receivedAt: '2016-12-09T20:50:54.000Z', + timestamp: '2016-12-09T20:50:54.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-22', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'smsBounce', + dataFields: { + smsProviderResponse: { + status: 404, + message: + 'The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found', + code: 20404, + more_info: 'https://www.twilio.com/docs/errors/20404', + }, + email: 'docs@iterable.com', + createdAt: '2016-12-05 22:43:24 +00:00', + campaignId: 74003, + templateId: 112561, + smsMessage: "Here is example message, please respond with 'received'", + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 4270, + messageTypeId: 4769, + experimentId: null, + fromPhoneNumberId: 268, + imageUrl: null, + locale: null, + emailId: 'c74003:t112561:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'smsBounce', + integrations: { Iterable: false }, + properties: { + smsProviderResponse: { + status: 404, + message: + 'The requested resource /2010-04-01/Accounts/ACCOUNT_NUMBER/Messages.json was not found', + code: 20404, + more_info: 'https://www.twilio.com/docs/errors/20404', + }, + createdAt: '2016-12-05 22:43:24 +00:00', + campaignId: 74003, + templateId: 112561, + smsMessage: "Here is example message, please respond with 'received'", + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 4270, + messageTypeId: 4769, + experimentId: null, + fromPhoneNumberId: 268, + imageUrl: null, + locale: null, + emailId: 'c74003:t112561:docs@iterable.com', + }, + receivedAt: '2016-12-05T22:43:24.000Z', + timestamp: '2016-12-05T22:43:24.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-23', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'smsClick', + dataFields: { + campaignId: 1234567, + campaignName: 'My test campaign', + workflowId: null, + workflowName: null, + templateName: 'My template', + locale: null, + channelId: 98765, + messageTypeId: 43210, + experimentId: null, + labels: [], + smsMessage: 'Test SMS! https://www.example.com', + fromPhoneNumberId: 1234, + imageUrl: null, + clickedUrl: 'https://www.example.com', + email: 'docs@iterable.com', + createdAt: '2022-03-10 05:00:14 +00:00', + templateId: 1112222, + messageId: 'ebd8f3cfc1f74353b423c5e0f3dd8b39', + emailId: 'c1234567:t9876543:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'smsClick', + integrations: { Iterable: false }, + properties: { + campaignId: 1234567, + campaignName: 'My test campaign', + workflowId: null, + workflowName: null, + templateName: 'My template', + locale: null, + channelId: 98765, + messageTypeId: 43210, + experimentId: null, + labels: [], + smsMessage: 'Test SMS! https://www.example.com', + fromPhoneNumberId: 1234, + imageUrl: null, + clickedUrl: 'https://www.example.com', + createdAt: '2022-03-10 05:00:14 +00:00', + templateId: 1112222, + messageId: 'ebd8f3cfc1f74353b423c5e0f3dd8b39', + emailId: 'c1234567:t9876543:docs@iterable.com', + }, + receivedAt: '2022-03-10T05:00:14.000Z', + timestamp: '2022-03-10T05:00:14.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-24', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'smsReceived', + dataFields: { + fromPhoneNumber: '+16503926753', + toPhoneNumber: '+14155824541', + smsMessage: 'Message text', + email: 'docs@iterable.com', + createdAt: '2016-12-05 22:51:25 +00:00', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'smsReceived', + integrations: { Iterable: false }, + properties: { + fromPhoneNumber: '+16503926753', + toPhoneNumber: '+14155824541', + smsMessage: 'Message text', + createdAt: '2016-12-05 22:51:25 +00:00', + }, + receivedAt: '2016-12-05T22:51:25.000Z', + timestamp: '2016-12-05T22:51:25.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-25', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'smsSend', + dataFields: { + toPhoneNumber: '+16503926753', + fromSMSSenderId: 258, + contentId: 2086, + email: 'docs@iterable.com', + createdAt: '2016-12-05 21:50:32 +00:00', + campaignId: 73974, + templateId: 112523, + smsMessage: 'Message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 4270, + messageTypeId: 4769, + experimentId: null, + fromPhoneNumberId: 258, + imageUrl: null, + locale: null, + emailId: 'c73974:t112523:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'smsSend', + integrations: { Iterable: false }, + properties: { + toPhoneNumber: '+16503926753', + fromSMSSenderId: 258, + contentId: 2086, + createdAt: '2016-12-05 21:50:32 +00:00', + campaignId: 73974, + templateId: 112523, + smsMessage: 'Message text', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 4270, + messageTypeId: 4769, + experimentId: null, + fromPhoneNumberId: 258, + imageUrl: null, + locale: null, + emailId: 'c73974:t112523:docs@iterable.com', + }, + receivedAt: '2016-12-05T21:50:32.000Z', + timestamp: '2016-12-05T21:50:32.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-26', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'smsSendSkip', + dataFields: { + createdAt: '2019-08-07 18:49:48 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 729390, + messageId: '2c780bf42f26485db0fc6571d2e0f6a0', + email: 'docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'smsSendSkip', + integrations: { Iterable: false }, + properties: { + createdAt: '2019-08-07 18:49:48 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 729390, + messageId: '2c780bf42f26485db0fc6571d2e0f6a0', + }, + receivedAt: '2019-08-07T18:49:48.000Z', + timestamp: '2019-08-07T18:49:48.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-27', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'emailSend', + dataFields: { + contentId: 274222, + email: 'docs@iterable.com', + createdAt: '2016-12-02 18:51:40 +00:00', + campaignId: 49313, + transactionalData: { + __comment: + 'transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total.', + }, + templateId: 79190, + messageId: '210badf49fe54f2591d64ad0d055f4fb', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'emailSend', + integrations: { Iterable: false }, + properties: { + contentId: 274222, + createdAt: '2016-12-02 18:51:40 +00:00', + campaignId: 49313, + transactionalData: { + __comment: + 'transactionalData lists the fields contained in the dataFields property of the API call or event used to trigger the email, campaign, or workflow. transactionalData must contain no more than 12k characters in total.', + }, + templateId: 79190, + messageId: '210badf49fe54f2591d64ad0d055f4fb', + emailSubject: 'My subject', + campaignName: 'My campaign name', + workflowId: null, + workflowName: null, + templateName: 'My template name', + channelId: 3420, + messageTypeId: 3866, + experimentId: null, + emailId: 'c49313:t79190:docs@iterable.com', + }, + receivedAt: '2016-12-02T18:51:40.000Z', + timestamp: '2016-12-02T18:51:40.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-28', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'webPushSend', + dataFields: { + campaignId: 723636, + browserToken: + 'cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b', + contentId: 3681, + messageId: 'af4c726ae76b48c7871b6d0d7760d47c', + workflowName: 'My workflow name', + emailId: 'c723636:t1020396:docs@iterable.com', + locale: null, + webPushIcon: null, + templateId: 1020396, + labels: [], + createdAt: '2019-08-07 23:43:02 +00:00', + templateName: 'My template name', + webPushMessage: '', + messageTypeId: 9106, + webPushBody: null, + experimentId: null, + webPushClickAction: null, + campaignName: 'My campaign name', + workflowId: 53505, + channelId: 8539, + email: 'docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'webPushSend', + integrations: { Iterable: false }, + properties: { + campaignId: 723636, + browserToken: + 'cZn_inqLGPk:APA91bHsn5jo0-4V55RB38eCeLHj8ZXVJYciU7k6Kipbit3lrRlEe2Dt6bNzR4lSf6r2YNVdWY8l90hV0jmb_Y7y5ufcJ68xNI7wbsH6Q2jbEghA_Qo4kWbtu6A4NZN4gxc1xsEbyh7b', + contentId: 3681, + messageId: 'af4c726ae76b48c7871b6d0d7760d47c', + workflowName: 'My workflow name', + emailId: 'c723636:t1020396:docs@iterable.com', + locale: null, + webPushIcon: null, + templateId: 1020396, + labels: [], + createdAt: '2019-08-07 23:43:02 +00:00', + templateName: 'My template name', + webPushMessage: '', + messageTypeId: 9106, + webPushBody: null, + experimentId: null, + webPushClickAction: null, + campaignName: 'My campaign name', + workflowId: 53505, + channelId: 8539, + }, + receivedAt: '2019-08-07T23:43:02.000Z', + timestamp: '2019-08-07T23:43:02.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'iterable', + description: 'test-29', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + email: 'docs@iterable.com', + eventName: 'webPushSendSkip', + dataFields: { + createdAt: '2019-08-07 23:43:48 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 723636, + messageId: '4238c918b20a41dfbe9a910275b76f12', + email: 'docs@iterable.com', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '0e13848b1c7e27eb5d88c5d35b70783e', + context: { + integration: { name: 'Iterable', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'docs@iterable.com' }, + }, + event: 'webPushSendSkip', + integrations: { Iterable: false }, + properties: { + createdAt: '2019-08-07 23:43:48 +00:00', + reason: 'DuplicateMarketingMessage', + campaignId: 723636, + messageId: '4238c918b20a41dfbe9a910275b76f12', + }, + receivedAt: '2019-08-07T23:43:48.000Z', + timestamp: '2019-08-07T23:43:48.000Z', + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/mailjet/data.ts b/test/integrations/sources/mailjet/data.ts new file mode 100644 index 0000000000..f7f56182c8 --- /dev/null +++ b/test/integrations/sources/mailjet/data.ts @@ -0,0 +1,393 @@ +export const data = [ + { + name: 'mailjet', + description: 'MailJet email open event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'open', + time: 1664443614, + MessageID: 94857068804950690, + Message_GUID: '54d6cdec-f659-4547-8926-13d9c4126b82', + email: 'test@rudderstack.com', + mj_campaign_id: 108760, + mj_contact_id: 399962859, + customcampaign: 'mj.nl=58424', + ip: '66.249.84.231', + geo: 'US', + agent: + 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)', + CustomID: '', + Payload: '', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'MailJet' }, + traits: { email: 'test@rudderstack.com' }, + ip: '66.249.84.231', + userAgent: + 'Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)', + externalId: [{ type: 'mailjetContactId', id: 399962859 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'open', + properties: { + ip: '66.249.84.231', + customcampaign: 'mj.nl=58424', + mj_campaign_id: 108760, + Payload: '', + }, + originalTimestamp: '2022-09-29T09:26:54.000Z', + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet email bounce event where input event is of type ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'bounce', + time: 1664444171, + MessageID: 55169098999352350, + Message_GUID: '447d7eab-3335-4aba-9a51-09454bc14b81', + email: 'test@rudderstack.com', + mj_campaign_id: 108892, + mj_contact_id: 373142816, + customcampaign: 'mj.nl=58486', + blocked: false, + hard_bounce: false, + error_related_to: 'system', + error: 'connection issue', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'MailJet' }, + traits: { email: 'test@rudderstack.com' }, + externalId: [{ type: 'mailjetContactId', id: 373142816 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'bounce', + properties: { customcampaign: 'mj.nl=58486', mj_campaign_id: 108892 }, + originalTimestamp: '2022-09-29T09:36:11.000Z', + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet email sent event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'sent', + time: 1664444171, + MessageID: 92886743924596480, + Message_GUID: '0230c73a-2b77-4aea-8ef2-ed15d0edc5fd', + email: 'test@rudderstack.com', + mj_campaign_id: 108892, + mj_contact_id: 372651182, + customcampaign: 'mj.nl=58486', + smtp_reply: + '250 2.0.0 OK DMARC:Quarantine 1664444171 u17-20020adfdd51000000b0022cc3f2bf13si3225188wrm.271 - gsmtp', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'MailJet' }, + traits: { email: 'test@rudderstack.com' }, + externalId: [{ type: 'mailjetContactId', id: 372651182 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'sent', + properties: { customcampaign: 'mj.nl=58486', mj_campaign_id: 108892 }, + originalTimestamp: '2022-09-29T09:36:11.000Z', + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet email bounce event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'bounce', + time: 1664444170, + MessageID: 56013522696710744, + Message_GUID: 'dbe4f0a3-4a5a-4784-a724-a9794d3c0444', + email: 'test@rudderstack.com', + mj_campaign_id: 108892, + mj_contact_id: 373142182, + customcampaign: 'mj.nl=58486', + blocked: false, + hard_bounce: false, + error_related_to: 'system', + error: 'connection issue', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'MailJet' }, + traits: { email: 'test@rudderstack.com' }, + externalId: [{ type: 'mailjetContactId', id: 373142182 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'bounce', + properties: { customcampaign: 'mj.nl=58486', mj_campaign_id: 108892 }, + originalTimestamp: '2022-09-29T09:36:10.000Z', + userId: '5b6a3426dba2cb24e4f0aeec43bee9d7', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet when no email is present', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'bounce', + time: 1664444170, + MessageID: 56013522696710744, + Message_GUID: 'dbe4f0a3-4a5a-4784-a724-a9794d3c0444', + mj_campaign_id: 108892, + mj_contact_id: 373142182, + customcampaign: 'mj.nl=58486', + blocked: false, + hard_bounce: false, + error_related_to: 'system', + error: 'connection issue', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'MailJet' }, + externalId: [{ type: 'mailjetContactId', id: 373142182 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'bounce', + properties: { customcampaign: 'mj.nl=58486', mj_campaign_id: 108892 }, + originalTimestamp: '2022-09-29T09:36:10.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailjet', + description: 'MailJet Multiple payloads in single request', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'open', + time: 1704458040, + MessageID: 987654, + Message_GUID: '876r-oihugyf-7tfygh', + email: 'abc@r.com', + mj_campaign_id: 321, + mj_contact_id: 123, + customcampaign: 'test_campaign', + url: 'https://www.example.com/', + ip: 'ip_info', + geo: 'some geo info', + agent: 'mailjet api test', + }, + { + event: 'click', + time: 1704458041, + MessageID: 12345234567, + Message_GUID: '12345-kjhgfd-2efv', + email: 'abc@r.com', + mj_campaign_id: 12, + mj_contact_id: 32532, + customcampaign: 'test_campaign', + url: 'https://www.example.com/', + ip: 'ip_info', + geo: 'some geo info', + agent: 'mailjet api test', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + ip: 'ip_info', + integration: { name: 'MailJet' }, + traits: { email: 'abc@r.com' }, + page: { url: 'https://www.example.com/' }, + userAgent: 'mailjet api test', + externalId: [{ type: 'mailjetContactId', id: 123 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'open', + properties: { + customcampaign: 'test_campaign', + mj_campaign_id: 321, + ip: 'ip_info', + url: 'https://www.example.com/', + }, + userId: '593a5aff0b445b3b77a6d9676b7ec86e', + originalTimestamp: '2024-01-05T12:34:00.000Z', + }, + ], + }, + }, + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + page: { url: 'https://www.example.com/' }, + integration: { name: 'MailJet' }, + traits: { email: 'abc@r.com' }, + userAgent: 'mailjet api test', + ip: 'ip_info', + externalId: [{ type: 'mailjetContactId', id: 32532 }], + }, + integrations: { MailJet: false }, + type: 'track', + event: 'click', + properties: { + customcampaign: 'test_campaign', + mj_campaign_id: 12, + ip: 'ip_info', + url: 'https://www.example.com/', + }, + userId: '593a5aff0b445b3b77a6d9676b7ec86e', + originalTimestamp: '2024-01-05T12:34:01.000Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/mailmodo/data.ts b/test/integrations/sources/mailmodo/data.ts new file mode 100644 index 0000000000..aa34363831 --- /dev/null +++ b/test/integrations/sources/mailmodo/data.ts @@ -0,0 +1,589 @@ +export const data = [ + { + name: 'mailmodo', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + data: {}, + triggerSource: 'CsvList', + email: 'gouhgc@mailmodo.com', + triggerDetails: + 'file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e', + userId: 'd3775892hvh4f2f-b9d5-e49810eb2cae', + journeyId: '1a69df39hgvh4e0b-8b5c-73776157aa37', + eventProperty: {}, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: 'f43848cce166e51b097cbed2851adc16ed9d4c341928f1c790215c50cefb59b0', + context: { + externalId: [ + { id: 'd3775892hvh4f2f-b9d5-e49810eb2cae', type: 'mailmodoUserId' }, + ], + traits: { email: 'gouhgc@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'CsvList', + integrations: { Mailmodo: false }, + properties: { + 'triggerData.triggerSource': 'CsvList', + 'triggerData.triggerDetails': + 'file:1a69df39hfbfg4e0b-8b5c-73776157aa37/7647792f-4ebc-4f9d-ac79-05fb0356137e', + 'triggerData.journeyId': '1a69df39hgvh4e0b-8b5c-73776157aa37', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + fuuid: '27905', + 'next-step-id': 'success', + 'total-steps': '3', + responseId: 'b9a5d224-cc5a-4e64-9800-5a3db9515fdf', + recipientEmail: 'test.rudderlabs21997@gmail.com', + formId: 'formosztd5', + recordedAt: { ts: 1662695704, date: '2022-09-09', hour: 9, minute: 25 }, + submissionSource: 'amp', + elementjbtz42: 'Everything ', + element8jzo13: ['Reliable', 'High Quality', 'Useful'], + recipientData: { email: 'test.rudderlabs21997@gmail.com' }, + recommend: '9', + liking: 'upvote', + satisfaction: '4', + campaignId: '0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd', + campaignName: 'Campaign-testing', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: 'a80b34ec43ca959c7b8e5116ac626c3cf8561f62616e000a01729a8a900cc0a0', + context: { + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test.rudderlabs21997@gmail.com' }, + }, + event: 'Form Submitted', + integrations: { Mailmodo: false }, + originalTimestamp: '2022-09-09T03:55:04.000Z', + properties: { + campaignId: '0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd', + campaignName: 'Campaign-testing', + 'element8jzo13[0]': 'Reliable', + 'element8jzo13[1]': 'High Quality', + 'element8jzo13[2]': 'Useful', + elementjbtz42: 'Everything ', + formId: 'formosztd5', + fuuid: '27905', + liking: 'upvote', + 'next-step-id': 'success', + recommend: '9', + responseId: 'b9a5d224-cc5a-4e64-9800-5a3db9515fdf', + satisfaction: '4', + submissionSource: 'amp', + 'total-steps': '3', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + data: {}, + triggerSource: 'Manual Add To List', + email: 'gou****@mailmodo.com', + userId: 'd3775892-****-4f2f-b9d5-e49810eb2cae', + journeyId: '349e986e-f56c-****-bc3b-b5f13c3e34da', + eventProperty: {}, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: 'd3775892-****-4f2f-b9d5-e49810eb2cae', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'Manual Add To List', + integrations: { Mailmodo: false }, + properties: { + 'triggerData.triggerSource': 'Manual Add To List', + 'triggerData.journeyId': '349e986e-f56c-****-bc3b-b5f13c3e34da', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + data: {}, + triggerSource: 'Dashboard-change in property: first_name', + email: 'gou****@mailmodo.com', + userId: 'cc56708d-****-****-8c07-a4bfa5a7b79b', + journeyId: 'a78d7221-de34-47d8-81c6-5ad70cf4ee38', + eventProperty: {}, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: 'cc56708d-****-****-8c07-a4bfa5a7b79b', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'Dashboard-change in property: first_name', + integrations: { Mailmodo: false }, + properties: { + 'triggerData.triggerSource': 'Dashboard-change in property: first_name', + 'triggerData.journeyId': 'a78d7221-de34-47d8-81c6-5ad70cf4ee38', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + data: {}, + formSubmissionData: { + element6ehxt3: 'Te**', + element6jkcy4: 'Bang****', + fuuid: '47949', + 'next-step-id': 'step7tr7n2', + 'total-steps': '3', + responseId: '4a8bfda7-****-4a8c-9cd1-a30d30a6dab9', + recipientEmail: 'gou****@mailmodo.com', + formId: 'formmqxnu2', + recordedAt: { ts: 1657097786, date: '2022-07-06', hour: 14, minute: 26 }, + submissionSource: 'amp', + }, + email: 'gou****@mailmodo.com', + triggerSource: 'form submission', + userId: '11bff3e8-****-4e93-a533-fd8f9defc768', + journeyId: '03664747-****-412e-8790-de9e9abe96a5', + eventProperty: {}, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: '11bff3e8-****-4e93-a533-fd8f9defc768', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'form submission', + integrations: { Mailmodo: false }, + originalTimestamp: '2022-07-06T08:56:26.000Z', + properties: { + 'triggerData.triggerSource': 'form submission', + 'triggerData.formSubmissionData.element6ehxt3': 'Te**', + 'triggerData.formSubmissionData.element6jkcy4': 'Bang****', + 'triggerData.formSubmissionData.formId': 'formmqxnu2', + 'triggerData.formSubmissionData.fuuid': '47949', + 'triggerData.formSubmissionData.next-step-id': 'step7tr7n2', + 'triggerData.formSubmissionData.responseId': + '4a8bfda7-****-4a8c-9cd1-a30d30a6dab9', + 'triggerData.formSubmissionData.submissionSource': 'amp', + 'triggerData.formSubmissionData.total-steps': '3', + 'triggerData.journeyId': '03664747-****-412e-8790-de9e9abe96a5', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + data: {}, + eventProperty: { + Name: 'APPLE iPhone 13 (Blue, 128 GB)', + Category: 'Mobiles', + 'Is Purchased': 'false', + Price: '829', + Currency: 'USD', + }, + triggerSource: 'New Custom Event Trigger - Product Viewed', + email: 'gou****@mailmodo.com', + userId: 'd3775892-****-4f2f-b9d5-e49810eb2cae', + journeyId: '3f135bf7-****-4e31-b265-f61cfe1bd423', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: 'd3775892-****-4f2f-b9d5-e49810eb2cae', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'New Custom Event Trigger - Product Viewed', + integrations: { Mailmodo: false }, + properties: { + 'triggerData.eventProperty.Category': 'Mobiles', + 'triggerData.eventProperty.Currency': 'USD', + 'triggerData.eventProperty.Is Purchased': 'false', + 'triggerData.eventProperty.Name': 'APPLE iPhone 13 (Blue, 128 GB)', + 'triggerData.eventProperty.Price': '829', + 'triggerData.journeyId': '3f135bf7-****-4e31-b265-f61cfe1bd423', + 'triggerData.triggerSource': 'New Custom Event Trigger - Product Viewed', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + triggerData: { + email: 'gou****@mailmodo.com', + data: {}, + userId: 'd3775892-****-4f2f-b9d5-e49810eb2cae', + journeyId: 'b1ee6bf6-****-4b5a-b7b5-0637853cd8c3', + triggerSource: 'Api', + eventProperty: {}, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: 'd3775892-****-4f2f-b9d5-e49810eb2cae', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'Api', + integrations: { Mailmodo: false }, + properties: { + 'triggerData.triggerSource': 'Api', + 'triggerData.journeyId': 'b1ee6bf6-****-4b5a-b7b5-0637853cd8c3', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventData: { type: 'html' }, + triggerData: { + data: {}, + triggerSource: 'CsvList', + email: 'gou****@mailmodo.com', + triggerDetails: + 'file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af', + userId: 'cc56708d-****-4fea-8c07-a4bfa5a7b79b', + journeyId: '5d31c2b4-****-4a84-acd3-834cae80231b', + eventProperty: {}, + }, + lastCampaignEmailRef: '064c76e7-****-4780-a001-226c066aaa12', + lastCampaignId: '31422f76-****-4a72-a630-dd6f9f615bc3', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '26c9ad4b531287858155ffa834be13dddc2c45df6e29af7230408953d732dd92', + context: { + externalId: [ + { id: 'cc56708d-****-4fea-8c07-a4bfa5a7b79b', type: 'mailmodoUserId' }, + ], + traits: { email: 'gou****@mailmodo.com' }, + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + }, + event: 'CsvList', + integrations: { Mailmodo: false }, + properties: { + 'eventData.type': 'html', + lastCampaignEmailRef: '064c76e7-****-4780-a001-226c066aaa12', + lastCampaignId: '31422f76-****-4a72-a630-dd6f9f615bc3', + 'triggerData.journeyId': '5d31c2b4-****-4a84-acd3-834cae80231b', + 'triggerData.triggerDetails': + 'file:5d31c2b4-****-4a84-acd3-834cae80231b/5a61e0b8-b6f6-4d7d-abf2-90357d6638af', + 'triggerData.triggerSource': 'CsvList', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'mailmodo', + description: 'test-8', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + fuuid: '98255', + 'next-step-id': 'success', + 'total-steps': '3', + responseId: 'ad20a980-4fce-44b6-887d-2236df514a76', + recipientEmail: 'test@rudderstack.com', + formId: 'formosztd5', + recordedAt: { ts: 1662695887, date: '2022-09-09', hour: 9, minute: 28 }, + submissionSource: 'amp', + elementjbtz42: 'peace', + element8jzo13: ['Useful'], + recipientData: { email: 'test@rudderstack.com', first_name: 'abcda' }, + recommend: '1', + liking: 'downvote', + satisfaction: '1', + campaignId: '0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd', + campaignName: 'Campaign-testing', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '1c5e54849f5c711ce38fa60716fbbe44bff478f9ca250897b39cdfc2438cd1bd', + context: { + integration: { name: 'Mailmodo', version: '1.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + traits: { email: 'test@rudderstack.com', first_name: 'abcda' }, + }, + event: 'Form Submitted', + integrations: { Mailmodo: false }, + originalTimestamp: '2022-09-09T03:58:07.000Z', + properties: { + fuuid: '98255', + 'next-step-id': 'success', + 'total-steps': '3', + responseId: 'ad20a980-4fce-44b6-887d-2236df514a76', + formId: 'formosztd5', + submissionSource: 'amp', + elementjbtz42: 'peace', + 'element8jzo13[0]': 'Useful', + recommend: '1', + liking: 'downvote', + satisfaction: '1', + campaignId: '0b53e1bf-84ae-4198-9184-8a4d6e1fa3dd', + campaignName: 'Campaign-testing', + }, + type: 'track', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/monday/data.ts b/test/integrations/sources/monday/data.ts new file mode 100644 index 0000000000..1bb2693090 --- /dev/null +++ b/test/integrations/sources/monday/data.ts @@ -0,0 +1,454 @@ +export const data = [ + { + name: 'monday', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3139815405, + pulseId: 3160188786, + pulseName: 'New Sprint Item', + groupId: 'topics', + groupName: 'Group Title', + groupColor: '#579bfc', + isTopGroup: true, + columnValues: {}, + app: 'monday', + type: 'create_pulse', + triggerTime: '2022-08-30T09:02:39.191Z', + subscriptionId: 150881106, + triggerUuid: '049869226bf6711705c62e301a2c3eee', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Create Pulse', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T09:02:39.191Z', + properties: { + app: 'monday', + type: 'create_pulse', + boardId: 3139815405, + groupId: 'topics', + pulseId: 3160188786, + groupName: 'Group Title', + pulseName: 'New Sprint Item', + groupColor: '#579bfc', + isTopGroup: true, + triggerUuid: '049869226bf6711705c62e301a2c3eee', + columnValues: {}, + subscriptionId: 150881106, + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T09:02:39.191Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'monday', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3139815405, + itemId: 3160188786, + itemName: 'New Sprint Item', + app: 'monday', + type: 'delete_pulse', + triggerTime: '2022-08-30T09:06:09.176Z', + subscriptionId: 150882006, + triggerUuid: '4e4f87c8255c4ba4ba2f5e9934cb6d40', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Delete Pulse', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T09:06:09.176Z', + properties: { + app: 'monday', + type: 'delete_pulse', + itemId: 3160188786, + boardId: 3139815405, + itemName: 'New Sprint Item', + triggerUuid: '4e4f87c8255c4ba4ba2f5e9934cb6d40', + subscriptionId: 150882006, + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T09:06:09.176Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'monday', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3139815405, + groupId: 'topics', + pulseId: 3160181387, + pulseName: 'New Sprint Item', + columnId: 'status', + columnType: 'color', + columnTitle: 'Status', + value: { + label: { + index: 1, + text: 'Done', + style: { color: '#00c875', border: '#00B461', var_name: 'green-shadow' }, + is_done: true, + }, + post_id: null, + }, + previousValue: null, + changedAt: 1661859406.8970098, + isTopGroup: true, + app: 'monday', + type: 'update_column_value', + triggerTime: '2022-08-30T11:36:47.406Z', + subscriptionId: 150894742, + triggerUuid: '51730730740a9d00ec45203bd392a9bd', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Update Column Value', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T11:36:47.406Z', + properties: { + app: 'monday', + type: 'update_column_value', + value: { + label: { + text: 'Done', + index: 1, + style: { color: '#00c875', border: '#00B461', var_name: 'green-shadow' }, + is_done: true, + }, + post_id: null, + }, + boardId: 3139815405, + groupId: 'topics', + pulseId: 3160181387, + columnId: 'status', + changedAt: 1661859406.8970098, + pulseName: 'New Sprint Item', + columnType: 'color', + isTopGroup: true, + columnTitle: 'Status', + triggerUuid: '51730730740a9d00ec45203bd392a9bd', + previousValue: null, + subscriptionId: 150894742, + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T11:36:47.406Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'monday', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3139815405, + groupId: 'topics', + pulseId: 3160181387, + value: { name: 'New Sprint Item renamed' }, + previousValue: { name: 'New Sprint Item' }, + app: 'monday', + type: 'update_name', + triggerTime: '2022-08-30T11:40:17.351Z', + subscriptionId: 150910867, + triggerUuid: '05ce13d32d0256c4fb7dd5de25b1a1ba', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Update Name', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T11:40:17.351Z', + properties: { + app: 'monday', + type: 'update_name', + value: { name: 'New Sprint Item renamed' }, + boardId: 3139815405, + groupId: 'topics', + pulseId: 3160181387, + triggerUuid: '05ce13d32d0256c4fb7dd5de25b1a1ba', + previousValue: { name: 'New Sprint Item' }, + subscriptionId: 150910867, + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T11:40:17.351Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'monday', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3160805239, + pulseId: 3161163765, + pulseName: 'new subitem', + groupId: 'topics', + groupName: 'Subitems', + groupColor: '#579bfc', + isTopGroup: true, + columnValues: {}, + app: 'monday', + type: 'create_pulse', + triggerTime: '2022-08-30T12:56:27.281Z', + subscriptionId: 150911592, + triggerUuid: '70a2219427804e47a508a91b5c244543', + parentItemId: '3160181387', + parentItemBoardId: '3139815405', + itemId: 3161163765, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Create Pulse', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T12:56:27.281Z', + properties: { + app: 'monday', + type: 'create_pulse', + itemId: 3161163765, + boardId: 3160805239, + groupId: 'topics', + pulseId: 3161163765, + groupName: 'Subitems', + pulseName: 'new subitem', + groupColor: '#579bfc', + isTopGroup: true, + triggerUuid: '70a2219427804e47a508a91b5c244543', + columnValues: {}, + parentItemId: '3160181387', + subscriptionId: 150911592, + parentItemBoardId: '3139815405', + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T12:56:27.281Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'monday', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + userId: 33556506, + originalTriggerUuid: null, + boardId: 3139815405, + itemId: 3160181387, + itemName: 'New Sprint Item renamed', + app: 'monday', + type: 'archive_pulse', + triggerTime: '2022-08-30T12:58:15.844Z', + subscriptionId: 150925947, + triggerUuid: 'aa8bd5dbb6fd592aedd57322dd776379', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Archive Pulse', + context: { + library: { name: 'unknown', version: 'unknown' }, + externalId: [{ id: 33556506, type: 'mondayUserId' }], + integration: { name: 'MONDAY' }, + }, + timestamp: '2022-08-30T12:58:15.844Z', + properties: { + app: 'monday', + type: 'archive_pulse', + itemId: 3160181387, + boardId: 3139815405, + itemName: 'New Sprint Item renamed', + triggerUuid: 'aa8bd5dbb6fd592aedd57322dd776379', + subscriptionId: 150925947, + originalTriggerUuid: null, + }, + anonymousId: '6f0a3dc76a335860e17fa1d8ab779742e2ca', + integrations: { MONDAY: false }, + originalTimestamp: '2022-08-30T12:58:15.844Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/olark/data.ts b/test/integrations/sources/olark/data.ts new file mode 100644 index 0000000000..3486e84907 --- /dev/null +++ b/test/integrations/sources/olark/data.ts @@ -0,0 +1,301 @@ +export const data = [ + { + name: 'olark', + description: 'Olark webhook response', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + kind: 'Conversation', + id: 'ho6HrHxoabmm6q0G103JU0JFaor0BobA', + manuallySubmitted: false, + items: [ + { + kind: 'OfflineMessage', + timestamp: '1669285628.796693', + body: 'name: test rudderlabs\nemail: ruddertest@gmail.com\nMessage: I am Fine', + }, + ], + tags: [], + visitor: { + kind: 'Visitor', + id: '45WjM9eMYwJ7cJMo103JU0JaForAA6Db', + fullName: 'test', + emailAddress: 'ruddertest@gmail.com', + ip: '', + country: 'India', + countryCode: 'IN', + browser: 'Chrome 105.0.0.0', + operatingSystem: 'Macintosh', + conversationBeginPage: 'http://localhost:5503/', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Conversation', + traits: {}, + userId: '45WjM9eMYwJ7cJMo103JU0JaForAA6Db', + context: { + os: { name: 'Macintosh' }, + page: { url: 'http://localhost:5503/' }, + traits: { name: 'test', email: 'ruddertest@gmail.com', country: 'India' }, + browser: { name: 'Chrome', version: '105.0.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Olark' }, + }, + properties: { + tags: [], + items: [ + { + body: 'name: test rudderlabs\nemail: ruddertest@gmail.com\nMessage: I am Fine', + kind: 'OfflineMessage', + timestamp: '1669285628.796693', + }, + ], + }, + integrations: { Olark: false }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'olark', + description: 'Olark webhook response', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + kind: 'Conversation', + id: 'NOTAREALTRANSCRIPT5LGcbVTa3hKBRB', + manuallySubmitted: false, + items: [ + { + kind: 'MessageToVisitor', + nickname: 'Olark operator', + operatorId: '6208911878914048', + timestamp: '1473774819.263083', + body: 'Hi from an operator', + }, + { + kind: 'MessageToOperator', + nickname: 'Returning Visitor | USA (San Francisco, CA) #7617', + timestamp: '1473774821.411154', + body: 'Hi from a visitor', + visitor_nickname: 'Olark Visitor', + }, + ], + tags: ['test_example'], + visitor: { + kind: 'Visitor', + id: 'NOTAREALVISITORIDS5LGl6QUrK2OaPP', + fullName: 'Olark', + phoneNumber: '5555555555', + emailAddress: 'support+integrationtest@olark.com', + ip: '', + city: 'San Francisco', + region: 'CA', + country: 'United States', + countryCode: 'US', + organization: 'Visitor Organization', + browser: 'Internet Explorer 11', + operatingSystem: 'Windows', + referrer: 'http://www.olark.com', + conversationBeginPage: 'http://www.olark.com', + chat_feedback: { overall_chat: 4, responsiveness: 5, knowledge: 4, friendliness: 5 }, + }, + operators: { + '6208911878914048': { + kind: 'Operator', + id: '6208911878914048', + nickname: 'integration', + emailAddress: 'integration-accounts@rudderstack.com', + username: 'integration-accounts-92750bc547', + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Conversation', + traits: { + organization: 'Visitor Organization', + chat_feedback: { + knowledge: 4, + friendliness: 5, + overall_chat: 4, + responsiveness: 5, + }, + }, + userId: 'NOTAREALVISITORIDS5LGl6QUrK2OaPP', + context: { + os: { name: 'Windows' }, + page: { url: 'http://www.olark.com', referrer: 'http://www.olark.com' }, + traits: { + city: 'San Francisco', + name: 'Olark', + email: 'support+integrationtest@olark.com', + phone: '5555555555', + region: 'CA', + country: 'United States', + }, + browser: { name: 'Internet Explorer', version: '11' }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Olark' }, + }, + properties: { + tags: ['test_example'], + items: [ + { + body: 'Hi from an operator', + kind: 'MessageToVisitor', + nickname: 'Olark operator', + timestamp: '1473774819.263083', + operatorId: '6208911878914048', + }, + { + body: 'Hi from a visitor', + kind: 'MessageToOperator', + nickname: 'Returning Visitor | USA (San Francisco, CA) #7617', + timestamp: '1473774821.411154', + visitor_nickname: 'Olark Visitor', + }, + ], + }, + integrations: { Olark: false }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'olark', + description: 'Olark webhook response', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + kind: 'Conversation', + id: 'ho6HrHxoabmm6q0G103JU0JFaor0BobA', + manuallySubmitted: false, + items: [ + { + kind: 'OfflineMessage', + timestamp: '1669288532.567071', + body: 'name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv', + }, + ], + tags: [], + groups: [{ kind: 'Group', id: 'ca77f4296fb7568909ad864aebf48201', name: 'Group 1' }], + visitor: { + kind: 'Visitor', + id: '45WjM9eMYwJ7cJMo103JU0JaForAA6Db', + fullName: 'test rudderstack', + emailAddress: 'rudder14@gmail.com', + ip: '', + country: 'India', + countryCode: 'IN', + browser: 'Chrome 105.0.0.0', + operatingSystem: 'Macintosh', + conversationBeginPage: 'http://localhost:5503/', + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Conversation', + traits: {}, + userId: '45WjM9eMYwJ7cJMo103JU0JaForAA6Db', + context: { + os: { name: 'Macintosh' }, + page: { url: 'http://localhost:5503/' }, + traits: { + name: 'test rudderstack', + email: 'rudder14@gmail.com', + country: 'India', + }, + browser: { name: 'Chrome', version: '105.0.0.0' }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Olark' }, + }, + properties: { + tags: [], + items: [ + { + body: 'name: test rudderstack\nemail: rudder14@gmail.com\nMessage: veavv', + kind: 'OfflineMessage', + timestamp: '1669288532.567071', + }, + ], + }, + integrations: { Olark: false }, + }, + { + name: 'Group 1', + type: 'group', + traits: { kind: 'Group' }, + userId: '45WjM9eMYwJ7cJMo103JU0JaForAA6Db', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Olark' }, + }, + groupId: 'ca77f4296fb7568909ad864aebf48201', + integrations: { Olark: false }, + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/pagerduty/data.ts b/test/integrations/sources/pagerduty/data.ts new file mode 100644 index 0000000000..fdfee6fc0d --- /dev/null +++ b/test/integrations/sources/pagerduty/data.ts @@ -0,0 +1,725 @@ +export const data = [ + { + name: 'pagerduty', + description: 'Incident Triggered', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + id: '01DEN0V2VIFEN5871PQGX72URP', + event_type: 'incident.triggered', + resource_type: 'incident', + occurred_at: '2022-12-07T10:56:52.337Z', + agent: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + client: { name: 'Monitoring Service', url: 'https://monitoring.service.com' }, + data: { + id: 'Q3S7IX2U5KTCOY', + type: 'incident', + self: 'https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + number: 2, + status: 'triggered', + incident_key: 'faaecfc0aca04b6ea07154188b5d3c6c', + created_at: '2022-12-07T10:56:52Z', + title: 'Server Crashed', + service: { + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + summary: 'Database', + type: 'service_reference', + }, + assignees: [ + { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + ], + escalation_policy: { + html_url: 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + summary: 'Default', + type: 'escalation_policy_reference', + }, + teams: [], + priority: { + html_url: 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + summary: 'P1', + type: 'priority_reference', + }, + urgency: 'high', + conference_bridge: null, + resolve_reason: null, + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Incident Triggered', + userId: 'PXZZD2E', + context: { + traits: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'PagerDuty' }, + }, + messageId: '01DEN0V2VIFEN5871PQGX72URP', + properties: { + data: { + id: 'Q3S7IX2U5KTCOY', + self: 'https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + type: 'incident', + teams: [], + title: 'Server Crashed', + number: 2, + status: 'triggered', + service: { + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + type: 'service_reference', + summary: 'Database', + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + }, + urgency: 'high', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + priority: { + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + type: 'priority_reference', + summary: 'P1', + html_url: + 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + }, + assignees: [ + { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + ], + created_at: '2022-12-07T10:56:52Z', + incident_key: 'faaecfc0aca04b6ea07154188b5d3c6c', + resolve_reason: null, + conference_bridge: null, + escalation_policy: { + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + type: 'escalation_policy_reference', + summary: 'Default', + html_url: + 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + }, + }, + client: { url: 'https://monitoring.service.com', name: 'Monitoring Service' }, + resourceType: 'incident', + }, + integrations: { PagerDuty: false }, + originalTimestamp: '2022-12-07T10:56:52.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Incident Priority Updated', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + id: '01DFU6P4VDDZCIHVQ5Q0ME99OE', + event_type: 'incident.priority_updated', + resource_type: 'incident', + occurred_at: '2022-12-20T11:43:24.342Z', + agent: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + client: null, + data: { + id: 'Q1KRTY75EUMGM0', + type: 'incident', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + number: 7, + status: 'acknowledged', + incident_key: 'a3e0e442f8b74a8c94298f19de0dcbed', + created_at: '2022-12-20T11:37:19Z', + title: 'Event Stream Failure', + service: { + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + summary: 'Database', + type: 'service_reference', + }, + assignees: [ + { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + ], + escalation_policy: { + html_url: 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + summary: 'Default', + type: 'escalation_policy_reference', + }, + teams: [], + priority: { + html_url: 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + summary: 'P1', + type: 'priority_reference', + }, + urgency: 'high', + conference_bridge: null, + resolve_reason: null, + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Incident Priority Updated', + userId: 'PXZZD2E', + context: { + traits: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'PagerDuty' }, + }, + messageId: '01DFU6P4VDDZCIHVQ5Q0ME99OE', + properties: { + data: { + id: 'Q1KRTY75EUMGM0', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + type: 'incident', + teams: [], + title: 'Event Stream Failure', + number: 7, + status: 'acknowledged', + service: { + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + type: 'service_reference', + summary: 'Database', + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + }, + urgency: 'high', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + priority: { + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + type: 'priority_reference', + summary: 'P1', + html_url: + 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + }, + assignees: [ + { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + ], + created_at: '2022-12-20T11:37:19Z', + incident_key: 'a3e0e442f8b74a8c94298f19de0dcbed', + resolve_reason: null, + conference_bridge: null, + escalation_policy: { + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + type: 'escalation_policy_reference', + summary: 'Default', + html_url: + 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + }, + }, + resourceType: 'incident', + }, + integrations: { PagerDuty: false }, + originalTimestamp: '2022-12-20T11:43:24.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Incident Responder Added', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + id: '01DFU6Z1ZCLMV9SEK3X5JZ5WLW', + event_type: 'incident.responder.added', + resource_type: 'incident', + occurred_at: '2022-12-20T11:46:44.213Z', + agent: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + client: null, + data: { + incident: { + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + id: 'Q1KRTY75EUMGM0', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + summary: 'Event Stream Failure', + type: 'incident_reference', + }, + user: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + escalation_policy: null, + message: 'Please help with "Event Stream Failure"', + state: 'pending', + type: 'incident_responder', + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Incident Responder Added', + userId: 'PXZZD2E', + context: { + traits: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'PagerDuty' }, + }, + messageId: '01DFU6Z1ZCLMV9SEK3X5JZ5WLW', + properties: { + data: { + type: 'incident_responder', + user: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + state: 'pending', + message: 'Please help with "Event Stream Failure"', + incident: { + id: 'Q1KRTY75EUMGM0', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + type: 'incident_reference', + summary: 'Event Stream Failure', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + }, + escalation_policy: null, + }, + resourceType: 'incident', + }, + integrations: { PagerDuty: false }, + originalTimestamp: '2022-12-20T11:46:44.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Incident Escalated', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + id: '01DFU77KTKK9UUYX779UX0N1ZP', + event_type: 'incident.escalated', + resource_type: 'incident', + occurred_at: '2022-12-20T11:49:35.385Z', + agent: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + client: null, + data: { + id: 'Q1KRTY75EUMGM0', + type: 'incident', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + number: 7, + status: 'triggered', + incident_key: 'a3e0e442f8b74a8c94298f19de0dcbed', + created_at: '2022-12-20T11:37:19Z', + title: 'Event Stream Failure', + service: { + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + summary: 'Database', + type: 'service_reference', + }, + assignees: [ + { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + ], + escalation_policy: { + html_url: 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + summary: 'Default', + type: 'escalation_policy_reference', + }, + teams: [], + priority: { + html_url: 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + summary: 'P1', + type: 'priority_reference', + }, + urgency: 'high', + conference_bridge: null, + resolve_reason: null, + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Incident Escalated', + userId: 'PXZZD2E', + context: { + traits: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'PagerDuty' }, + }, + messageId: '01DFU77KTKK9UUYX779UX0N1ZP', + properties: { + data: { + id: 'Q1KRTY75EUMGM0', + self: 'https://api.pagerduty.com/incidents/Q1KRTY75EUMGM0', + type: 'incident', + teams: [], + title: 'Event Stream Failure', + number: 7, + status: 'triggered', + service: { + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + type: 'service_reference', + summary: 'Database', + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + }, + urgency: 'high', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q1KRTY75EUMGM0', + priority: { + id: 'PPMNDVQ', + self: 'https://api.pagerduty.com/priorities/PPMNDVQ', + type: 'priority_reference', + summary: 'P1', + html_url: + 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + }, + assignees: [ + { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + ], + created_at: '2022-12-20T11:37:19Z', + incident_key: 'a3e0e442f8b74a8c94298f19de0dcbed', + resolve_reason: null, + conference_bridge: null, + escalation_policy: { + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + type: 'escalation_policy_reference', + summary: 'Default', + html_url: + 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + }, + }, + resourceType: 'incident', + }, + integrations: { PagerDuty: false }, + originalTimestamp: '2022-12-20T11:49:35.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pagerduty', + description: 'Incident Resolved', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: { + id: '01DEN1HNLBC1VITK192ETJ1MPJ', + event_type: 'incident.resolved', + resource_type: 'incident', + occurred_at: '2022-12-07T11:04:27.459Z', + agent: { + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + summary: 'rudder test', + type: 'user_reference', + }, + client: null, + data: { + id: 'Q3S7IX2U5KTCOY', + type: 'incident', + self: 'https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + number: 2, + status: 'resolved', + incident_key: 'faaecfc0aca04b6ea07154188b5d3c6c', + created_at: '2022-12-07T10:56:52Z', + title: 'Server Crashed', + service: { + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + summary: 'Database', + type: 'service_reference', + }, + assignees: [], + escalation_policy: { + html_url: 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + summary: 'Default', + type: 'escalation_policy_reference', + }, + teams: [], + priority: { + html_url: 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + id: 'P5DBC3A', + self: 'https://api.pagerduty.com/priorities/P5DBC3A', + summary: 'P3', + type: 'priority_reference', + }, + urgency: 'high', + conference_bridge: { conference_number: '', conference_url: '' }, + resolve_reason: null, + }, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'track', + event: 'Incident Resolved', + userId: 'PXZZD2E', + context: { + traits: { + id: 'PXZZD2E', + self: 'https://api.pagerduty.com/users/user@1', + type: 'user_reference', + summary: 'rudder test', + html_url: 'https://rudderlabs-com.pagerduty.com/users/PXZZD2E', + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'PagerDuty' }, + }, + messageId: '01DEN1HNLBC1VITK192ETJ1MPJ', + properties: { + data: { + id: 'Q3S7IX2U5KTCOY', + self: 'https://api.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + type: 'incident', + teams: [], + title: 'Server Crashed', + number: 2, + status: 'resolved', + service: { + id: 'PAJBUTT', + self: 'https://api.pagerduty.com/services/PAJBUTT', + type: 'service_reference', + summary: 'Database', + html_url: 'https://rudderlabs-com.pagerduty.com/services/PAJBUTT', + }, + urgency: 'high', + html_url: 'https://rudderlabs-com.pagerduty.com/incidents/Q3S7IX2U5KTCOY', + priority: { + id: 'P5DBC3A', + self: 'https://api.pagerduty.com/priorities/P5DBC3A', + type: 'priority_reference', + summary: 'P3', + html_url: + 'https://rudderlabs-com.pagerduty.com/account/incident_priorities', + }, + assignees: [], + created_at: '2022-12-07T10:56:52Z', + incident_key: 'faaecfc0aca04b6ea07154188b5d3c6c', + resolve_reason: null, + conference_bridge: { conference_url: '', conference_number: '' }, + escalation_policy: { + id: 'PB7HKU4', + self: 'https://api.pagerduty.com/escalation_policies/PB7HKU4', + type: 'escalation_policy_reference', + summary: 'Default', + html_url: + 'https://rudderlabs-com.pagerduty.com/escalation_policies/PB7HKU4', + }, + }, + resourceType: 'incident', + }, + integrations: { PagerDuty: false }, + originalTimestamp: '2022-12-07T11:04:27.000Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/pipedream/data.ts b/test/integrations/sources/pipedream/data.ts new file mode 100644 index 0000000000..4be5621f0c --- /dev/null +++ b/test/integrations/sources/pipedream/data.ts @@ -0,0 +1,345 @@ +export const data = [ + { + name: 'pipedream', + description: 'No type or userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + anonymousId: '63767499ca6fb1b7c988d5bb', + artist: 'Gautam', + genre: 'Jazz', + song: 'Take Five', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + event: 'pipedream_source_event', + anonymousId: '63767499ca6fb1b7c988d5bb', + context: { + integration: { name: 'PIPEDREAM' }, + library: { name: 'unknown', version: 'unknown' }, + }, + integrations: { PIPEDREAM: false }, + type: 'track', + properties: { + anonymousId: '63767499ca6fb1b7c988d5bb', + artist: 'Gautam', + genre: 'Jazz', + song: 'Take Five', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'No type or anonymousId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [{ userId: '12', artist: 'Gautam', genre: 'Jazz', song: 'Take Five' }], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + event: 'pipedream_source_event', + anonymousId: '12', + context: { + integration: { name: 'PIPEDREAM' }, + library: { name: 'unknown', version: 'unknown' }, + }, + integrations: { PIPEDREAM: false }, + type: 'track', + properties: { userId: '12', artist: 'Gautam', genre: 'Jazz', song: 'Take Five' }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'Track Call -> type and userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + event: 'Song Played', + userId: 'R1234', + context: { + library: { name: 'unknown', version: 'unknown' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + userDeleted: false, + }, + locale: 'en', + location: { country: 'IN', countryName: 'India', short: 'India', long: 'India' }, + device: { os: 'macOS', type: 'desktop' }, + page: { referrer: 'http://127.0.0.1:5500/testSm.html' }, + }, + type: 'track', + properties: { artist: 'John', Album: 'ABCD' }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + event: 'Song Played', + userId: 'R1234', + context: { + library: { name: 'unknown', version: 'unknown' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + userDeleted: false, + }, + locale: 'en', + location: { + country: 'IN', + countryName: 'India', + short: 'India', + long: 'India', + }, + device: { os: 'macOS', type: 'desktop' }, + page: { referrer: 'http://127.0.0.1:5500/testSm.html' }, + }, + type: 'track', + properties: { artist: 'John', Album: 'ABCD' }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'Identify type -> type and userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + userId: '1', + originalTimestamp: '2020-09-28T19:53:31.900Z', + traits: { + firstName: 'John', + lastName: 'doe', + email: 'John@r.com', + hasPurchased: 'yes', + address: { Home: { city: 'iudcb' }, Office: { abc: 'jbc' } }, + state: 'Delhi', + title: 'Mr', + }, + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'identify', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: '1', + originalTimestamp: '2020-09-28T19:53:31.900Z', + traits: { + firstName: 'John', + lastName: 'doe', + email: 'John@r.com', + hasPurchased: 'yes', + address: { Home: { city: 'iudcb' }, Office: { abc: 'jbc' } }, + state: 'Delhi', + title: 'Mr', + }, + timestamp: '2020-09-29T14:50:29.907+05:30', + type: 'identify', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'Group type -> type and userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + userId: 'user123', + groupId: '17', + context: {}, + traits: { operation: 'add' }, + type: 'group', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + userId: 'user123', + groupId: '17', + context: {}, + traits: { operation: 'add' }, + type: 'group', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'Page type -> type and userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + anonymousId: '21e13f4bc7ceddad', + channel: 'mobile', + context: { + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + name: 'Home', + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + type: 'page', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + anonymousId: '21e13f4bc7ceddad', + channel: 'mobile', + context: { + os: { name: 'Android', version: '9' }, + timezone: 'Asia/Kolkata', + traits: { customProp: 'customValue' }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + name: 'Home', + properties: { title: 'Home | RudderStack', url: 'http://www.rudderstack.com' }, + receivedAt: '2020-09-29T14:50:43.005+05:30', + type: 'page', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'pipedream', + description: 'Alias type -> type and userId is given', + module: 'source', + version: 'v0', + input: { + request: { + body: [{ type: 'alias', previousId: 'name@surname.com', userId: '12345' }], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { batch: [{ type: 'alias', previousId: 'name@surname.com', userId: '12345' }] }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/refiner/data.ts b/test/integrations/sources/refiner/data.ts new file mode 100644 index 0000000000..255004322c --- /dev/null +++ b/test/integrations/sources/refiner/data.ts @@ -0,0 +1,391 @@ +export const data = [ + { + name: 'refiner', + description: 'Refiner webhook response', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + uuid: 'd769e130-49cf-11ed-968d-936a69fadf81', + project_uuid: '0d8759d0-401c-11ed-8ded-9757c4929b55', + remote_id: 'user@17', + email: 'test17@user.com', + display_name: 'test user', + first_seen_at: '2022-10-12T01:47:33.000000Z', + last_seen_at: '2022-10-12T02:00:00.000000Z', + attributes: { + address: null, + address_city: null, + address_state: null, + age: null, + another_attribute: null, + city: null, + country: null, + created_at: null, + email: 'test17@user.com', + event: null, + first_name: null, + first_seen_at: '2022-10-12T01:47:33.000000Z', + form_submissions_count: '1', + form_views_count: '2', + gender: null, + last_form_submission_at: '2022-10-12T02:05:55.000000Z', + last_form_view_at: '2022-10-12T02:03:46.000000Z', + last_name: null, + last_seen_at: '2022-10-12T02:00:00.000000Z', + name: 'test user', + phone: null, + some_attribute: null, + status: null, + student: null, + tag: null, + trait1: null, + trait2: null, + trait3: null, + url: null, + user_address_city: null, + user_address_state: null, + user_country: null, + user_id: null, + username: null, + useroccupation: null, + why_did_you_cancel_your_subscription: 'Pricing', + }, + segments: [ + { + uuid: '0d91d7a0-401c-11ed-8898-bb1ee0c23ae5', + name: 'All Users', + created_at: '2022-10-12T01:47:34.000000Z', + updated_at: '2022-10-12T01:47:34.000000Z', + }, + { + uuid: 'f71ad940-455c-11ed-85e0-bf25f168b224', + name: 'test-segment', + created_at: '2022-10-12T01:47:34.000000Z', + updated_at: '2022-10-12T01:47:34.000000Z', + }, + ], + account: { + uuid: 'd76c9e80-49cf-11ed-a783-6317eca951a6', + remote_id: 'ACCOUNT-ID-ABC-1', + domain: null, + display_name: 'Awesome Inc.', + first_seen_at: '2022-10-12T01:47:33.000000Z', + last_seen_at: '2022-10-12T02:00:00.000000Z', + attributes: { + a_date_at: '2022-10-01T00:00:00.000000Z', + business_email: null, + company: null, + email: null, + isfunded: null, + name: 'Awesome Inc.', + revenue: null, + some_account_data: 'something', + trait1: null, + trait2: null, + trait3: null, + }, + }, + triggered_event: 'Completed Survey', + form: { uuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', name: 'Customer Churn Survey' }, + response: { + uuid: 'eb117cb0-49cf-11ed-b050-03a44b32151c', + first_shown_at: '2022-10-12T01:48:06.000000Z', + last_shown_at: '2022-10-12T02:03:46.000000Z', + show_counter: null, + first_data_reception_at: '2022-10-12T02:05:55.000000Z', + last_data_reception_at: '2022-10-12T02:05:55.000000Z', + completed_at: '2022-10-12T02:05:55.000000Z', + dismissed_at: null, + received_at: '2022-10-12T02:05:55.000000Z', + data: { why_did_you_cancel_your_subscription: 'Pricing' }, + tags: [], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + traits: { + email: 'test17@user.com', + segments: [ + { + name: 'All Users', + uuid: '0d91d7a0-401c-11ed-8898-bb1ee0c23ae5', + created_at: '2022-10-12T01:47:34.000000Z', + updated_at: '2022-10-12T01:47:34.000000Z', + }, + { + name: 'test-segment', + uuid: 'f71ad940-455c-11ed-85e0-bf25f168b224', + created_at: '2022-10-12T01:47:34.000000Z', + updated_at: '2022-10-12T01:47:34.000000Z', + }, + ], + }, + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Refiner' }, + formUuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + formName: 'Customer Churn Survey', + }, + integrations: { Refiner: false }, + type: 'identify', + userId: 'user@17', + traits: { why_did_you_cancel_your_subscription: 'Pricing' }, + originalTimestamp: '2022-10-12T02:05:55.000000Z', + }, + { + type: 'track', + event: 'Completed Survey', + userId: 'user@17', + context: { + library: { name: 'unknown', version: 'unknown' }, + formName: 'Customer Churn Survey', + formUuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + integration: { name: 'Refiner' }, + }, + properties: { + response: { + data: { why_did_you_cancel_your_subscription: 'Pricing' }, + tags: [], + uuid: 'eb117cb0-49cf-11ed-b050-03a44b32151c', + received_at: '2022-10-12T02:05:55.000000Z', + completed_at: '2022-10-12T02:05:55.000000Z', + last_shown_at: '2022-10-12T02:03:46.000000Z', + first_shown_at: '2022-10-12T01:48:06.000000Z', + last_data_reception_at: '2022-10-12T02:05:55.000000Z', + first_data_reception_at: '2022-10-12T02:05:55.000000Z', + }, + refiner_form_name: 'Customer Churn Survey', + refiner_form_uuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + }, + integrations: { Refiner: false }, + originalTimestamp: '2022-10-12T02:05:55.000000Z', + }, + { + type: 'group', + traits: { + name: 'Awesome Inc.', + a_date_at: '2022-10-01T00:00:00.000000Z', + some_account_data: 'something', + }, + userId: 'user@17', + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Refiner' }, + }, + groupId: 'ACCOUNT-ID-ABC-1', + integrations: { Refiner: false }, + originalTimestamp: '2022-10-12T02:05:55.000000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'refiner', + description: 'Refiner webhook response', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + uuid: '69b83e20-4ea2-11ed-941c-e1cb6c7a3870', + cookie_uuid: '2f9b7e6a-9ba8-1c68-d474-48d719d92a60', + project_uuid: '0d8759d0-401c-11ed-8ded-9757c4929b55', + remote_id: 'sdk@30', + email: 'sdk30@gmail.com', + display_name: '', + first_seen_at: '2022-10-18T05:04:58.000000Z', + last_seen_at: '2022-10-18T05:04:58.000000Z', + attributes: { + address: null, + address_city: null, + address_state: null, + age: null, + another_attribute: null, + city: null, + country: null, + created_at: null, + email: 'sdk30@gmail.com', + event: null, + first_name: null, + first_seen_at: '2022-10-18T05:04:58.000000Z', + form_submissions_count: '1', + form_views_count: '1', + gender: null, + last_form_submission_at: '2022-10-18T05:05:45.000000Z', + last_form_view_at: '2022-10-18T05:05:29.000000Z', + last_name: null, + last_seen_at: '2022-10-18T05:04:58.000000Z', + name: null, + phone: null, + some_attribute: null, + status: null, + student: null, + tag: null, + trait1: null, + trait2: null, + trait3: null, + url: null, + user_address_city: null, + user_address_state: null, + user_country: null, + user_id: null, + username: null, + useroccupation: null, + why_did_you_cancel_your_subscription: 'Missing features', + }, + segments: [ + { + uuid: '0d91d7a0-401c-11ed-8898-bb1ee0c23ae5', + name: 'All Users', + created_at: '2022-10-18T05:04:58.000000Z', + updated_at: '2022-10-18T05:04:58.000000Z', + }, + { + uuid: 'f71ad940-455c-11ed-85e0-bf25f168b224', + name: 'test-segment', + created_at: '2022-10-18T05:04:58.000000Z', + updated_at: '2022-10-18T05:04:58.000000Z', + }, + ], + account: { + uuid: '69ba2030-4ea2-11ed-adfc-595e70c7ab07', + remote_id: null, + domain: null, + display_name: '', + first_seen_at: '2022-10-18T05:04:58.000000Z', + last_seen_at: '2022-10-18T05:04:58.000000Z', + attributes: { + '1': null, + '2': null, + '3': null, + '4': null, + a_date_at: null, + business_email: null, + company: null, + email: null, + isfunded: null, + location: null, + name: null, + revenue: null, + some_account_data: null, + trait1: null, + trait2: null, + trait3: null, + user_id: null, + }, + }, + triggered_event: 'Completed Survey', + form: { uuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', name: 'Customer Churn Survey' }, + response: { + uuid: '7c508c60-4ea2-11ed-9302-57708fe11d26', + first_shown_at: '2022-10-18T05:05:29.000000Z', + last_shown_at: '2022-10-18T05:05:29.000000Z', + show_counter: null, + first_data_reception_at: '2022-10-18T05:05:45.000000Z', + last_data_reception_at: '2022-10-18T05:05:45.000000Z', + completed_at: '2022-10-18T05:05:45.000000Z', + dismissed_at: null, + received_at: '2022-10-18T05:05:45.000000Z', + data: { why_did_you_cancel_your_subscription: 'Missing features' }, + tags: [], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + type: 'identify', + traits: { why_did_you_cancel_your_subscription: 'Missing features' }, + userId: 'sdk@30', + context: { + traits: { + email: 'sdk30@gmail.com', + segments: [ + { + name: 'All Users', + uuid: '0d91d7a0-401c-11ed-8898-bb1ee0c23ae5', + created_at: '2022-10-18T05:04:58.000000Z', + updated_at: '2022-10-18T05:04:58.000000Z', + }, + { + name: 'test-segment', + uuid: 'f71ad940-455c-11ed-85e0-bf25f168b224', + created_at: '2022-10-18T05:04:58.000000Z', + updated_at: '2022-10-18T05:04:58.000000Z', + }, + ], + }, + library: { name: 'unknown', version: 'unknown' }, + formName: 'Customer Churn Survey', + formUuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + integration: { name: 'Refiner' }, + }, + integrations: { Refiner: false }, + originalTimestamp: '2022-10-18T05:05:45.000000Z', + }, + { + type: 'track', + event: 'Completed Survey', + userId: 'sdk@30', + context: { + library: { name: 'unknown', version: 'unknown' }, + formName: 'Customer Churn Survey', + formUuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + integration: { name: 'Refiner' }, + }, + properties: { + response: { + data: { why_did_you_cancel_your_subscription: 'Missing features' }, + tags: [], + uuid: '7c508c60-4ea2-11ed-9302-57708fe11d26', + received_at: '2022-10-18T05:05:45.000000Z', + completed_at: '2022-10-18T05:05:45.000000Z', + last_shown_at: '2022-10-18T05:05:29.000000Z', + first_shown_at: '2022-10-18T05:05:29.000000Z', + last_data_reception_at: '2022-10-18T05:05:45.000000Z', + first_data_reception_at: '2022-10-18T05:05:45.000000Z', + }, + refiner_form_name: 'Customer Churn Survey', + refiner_form_uuid: '0d94c790-401c-11ed-bb27-e31f6832c5ae', + }, + integrations: { Refiner: false }, + originalTimestamp: '2022-10-18T05:05:45.000000Z', + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/satismeter/data.ts b/test/integrations/sources/satismeter/data.ts new file mode 100644 index 0000000000..713f527f2c --- /dev/null +++ b/test/integrations/sources/satismeter/data.ts @@ -0,0 +1,426 @@ +export const data = [ + { + name: 'satismeter', + description: ' All fields Check with event as completed', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + response: { + id: '63767499ca6fb1b7c988d5bb', + created: '2022-11-17T17:51:21.764Z', + rating: 5, + feedback: 'Many things to imporve\n', + dismissed: false, + pending: false, + answers: [ + { + label: 'How likely are you to recommend us to your friends and colleagues?', + id: '7ddb22b0-64a8-11ed-a4c7-b3bed73771cd', + value: 5, + name: 'SM_rating', + type: 'scale', + metric: 'nps', + }, + { + label: 'What could we do to improve?', + id: '7ddb22b1-64a8-11ed-a4c7-b3bed73771cd', + value: 'Many things to imporve\n', + name: 'SM_comment', + type: 'long-text', + }, + { + label: 'The company made it easy for me to handle my issue.', + id: '1dc53f60-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'scale', + metric: 'ces', + }, + { + label: 'How satisfied were you with the service you received?', + id: '24c5b290-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'smiley', + metric: 'csat', + }, + { + label: 'How you like to rate the surevy?', + id: '27b3d1d0-66a0-11ed-856c-6f39711bf041', + value: 4, + type: 'scale', + }, + { + label: 'Your Name (Single Answer)', + id: '37a8c000-66a0-11ed-856c-6f39711bf041', + value: 'a', + type: 'single-choice', + }, + { + label: 'Your Name (Multiple Answer)', + id: '4b435da0-66a0-11ed-856c-6f39711bf041', + value: ['a1', 'b1'], + type: 'multiple-choice', + }, + ], + category: 'detractor', + score: -100, + user: { + id: '63766fbb7ac7b72676145338', + name: 'John Doe', + email: 'john@doe.com', + userId: 'No response', + deleted: false, + groups: { group1: 'grooupId' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + }, + }, + device: { os: 'macOS', type: 'desktop' }, + location: { + country: 'IN', + countryName: 'India', + region: '', + city: '', + short: 'India', + long: 'India', + }, + referrer: 'http://127.0.0.1:5500/testSm.html', + method: 'In-app', + language: 'en', + project: '6372247a764986ebee62bf66', + campaign: '6373271b764986ebee62bfca', + }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + }, + campaign: { id: '6373271b764986ebee62bfca', name: 'NPS Survey' }, + event: 'completed', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + event: 'Survey completed', + anonymousId: '63766fbb7ac7b72676145338', + context: { + library: { name: 'unknown', version: 'unknown' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + userDeleted: false, + }, + locale: 'en', + campaign: { id: '6373271b764986ebee62bfca', name: 'NPS Survey' }, + integration: { name: 'SATISMETER' }, + location: { + country: 'IN', + countryName: 'India', + short: 'India', + long: 'India', + }, + device: { os: 'macOS', type: 'desktop' }, + page: { referrer: 'http://127.0.0.1:5500/testSm.html' }, + }, + integrations: { SATISMETER: false }, + type: 'track', + traits: { groups: { group1: 'grooupId' } }, + userId: 'No response', + properties: { + category: 'detractor', + answers: [ + { + label: 'How likely are you to recommend us to your friends and colleagues?', + id: '7ddb22b0-64a8-11ed-a4c7-b3bed73771cd', + value: 5, + name: 'SM_rating', + type: 'scale', + metric: 'nps', + }, + { + label: 'What could we do to improve?', + id: '7ddb22b1-64a8-11ed-a4c7-b3bed73771cd', + value: 'Many things to imporve\n', + name: 'SM_comment', + type: 'long-text', + }, + { + label: 'The company made it easy for me to handle my issue.', + id: '1dc53f60-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'scale', + metric: 'ces', + }, + { + label: 'How satisfied were you with the service you received?', + id: '24c5b290-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'smiley', + metric: 'csat', + }, + { + label: 'How you like to rate the surevy?', + id: '27b3d1d0-66a0-11ed-856c-6f39711bf041', + value: 4, + type: 'scale', + }, + { + label: 'Your Name (Single Answer)', + id: '37a8c000-66a0-11ed-856c-6f39711bf041', + value: 'a', + type: 'single-choice', + }, + { + label: 'Your Name (Multiple Answer)', + id: '4b435da0-66a0-11ed-856c-6f39711bf041', + value: ['a1', 'b1'], + type: 'multiple-choice', + }, + ], + surveyDismissed: false, + surveyPending: false, + receivedAt: '2022-11-17T17:51:21.764Z', + }, + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'satismeter', + description: + ' Neither reponse.user.id or response.user.userId is provided in payload then mapping response.id to anonymousId', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + response: { + id: '63767499ca6fb1b7c988d5bb', + created: '2022-11-17T17:51:21.764Z', + rating: 5, + feedback: 'Many things to imporve\n', + dismissed: false, + pending: false, + answers: [ + { + label: 'How likely are you to recommend us to your friends and colleagues?', + id: '7ddb22b0-64a8-11ed-a4c7-b3bed73771cd', + value: 5, + name: 'SM_rating', + type: 'scale', + metric: 'nps', + }, + { + label: 'What could we do to improve?', + id: '7ddb22b1-64a8-11ed-a4c7-b3bed73771cd', + value: 'Many things to imporve\n', + name: 'SM_comment', + type: 'long-text', + }, + { + label: 'The company made it easy for me to handle my issue.', + id: '1dc53f60-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'scale', + metric: 'ces', + }, + { + label: 'How satisfied were you with the service you received?', + id: '24c5b290-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'smiley', + metric: 'csat', + }, + { + label: 'How you like to rate the surevy?', + id: '27b3d1d0-66a0-11ed-856c-6f39711bf041', + value: 4, + type: 'scale', + }, + { + label: 'Your Name (Single Answer)', + id: '37a8c000-66a0-11ed-856c-6f39711bf041', + value: 'a', + type: 'single-choice', + }, + { + label: 'Your Name (Multiple Answer)', + id: '4b435da0-66a0-11ed-856c-6f39711bf041', + value: ['a1', 'b1'], + type: 'multiple-choice', + }, + ], + category: 'detractor', + score: -100, + user: { + name: 'John Doe', + email: 'john@doe.com', + deleted: false, + groups: { group1: 'grooupId' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + }, + }, + device: { os: 'macOS', type: 'desktop' }, + location: { + country: 'IN', + countryName: 'India', + region: '', + city: '', + short: 'India', + long: 'India', + }, + referrer: 'http://127.0.0.1:5500/testSm.html', + method: 'In-app', + language: 'en', + project: '6372247a764986ebee62bf66', + campaign: '6373271b764986ebee62bfca', + }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + }, + campaign: { id: '6373271b764986ebee62bfca', name: 'NPS Survey' }, + event: 'completed', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + event: 'Survey completed', + anonymousId: '63767499ca6fb1b7c988d5bb', + context: { + library: { name: 'unknown', version: 'unknown' }, + traits: { + createdAt: '2022-10-15T05:41:06.016Z', + custom: { key1: 'v1', key2: 'V2' }, + email: 'john@doe.com', + name: 'John Doe', + userDeleted: false, + }, + locale: 'en', + campaign: { id: '6373271b764986ebee62bfca', name: 'NPS Survey' }, + integration: { name: 'SATISMETER' }, + location: { + country: 'IN', + countryName: 'India', + short: 'India', + long: 'India', + }, + device: { os: 'macOS', type: 'desktop' }, + page: { referrer: 'http://127.0.0.1:5500/testSm.html' }, + }, + integrations: { SATISMETER: false }, + type: 'track', + traits: { groups: { group1: 'grooupId' } }, + properties: { + category: 'detractor', + answers: [ + { + label: 'How likely are you to recommend us to your friends and colleagues?', + id: '7ddb22b0-64a8-11ed-a4c7-b3bed73771cd', + value: 5, + name: 'SM_rating', + type: 'scale', + metric: 'nps', + }, + { + label: 'What could we do to improve?', + id: '7ddb22b1-64a8-11ed-a4c7-b3bed73771cd', + value: 'Many things to imporve\n', + name: 'SM_comment', + type: 'long-text', + }, + { + label: 'The company made it easy for me to handle my issue.', + id: '1dc53f60-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'scale', + metric: 'ces', + }, + { + label: 'How satisfied were you with the service you received?', + id: '24c5b290-66a0-11ed-856c-6f39711bf041', + value: 4, + name: null, + type: 'smiley', + metric: 'csat', + }, + { + label: 'How you like to rate the surevy?', + id: '27b3d1d0-66a0-11ed-856c-6f39711bf041', + value: 4, + type: 'scale', + }, + { + label: 'Your Name (Single Answer)', + id: '37a8c000-66a0-11ed-856c-6f39711bf041', + value: 'a', + type: 'single-choice', + }, + { + label: 'Your Name (Multiple Answer)', + id: '4b435da0-66a0-11ed-856c-6f39711bf041', + value: ['a1', 'b1'], + type: 'multiple-choice', + }, + ], + surveyDismissed: false, + surveyPending: false, + receivedAt: '2022-11-17T17:51:21.764Z', + }, + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/segment/data.ts b/test/integrations/sources/segment/data.ts new file mode 100644 index 0000000000..d16176e8f1 --- /dev/null +++ b/test/integrations/sources/segment/data.ts @@ -0,0 +1,240 @@ +import utils from '../../../../src/v0/util'; +import { SrcTestCaseData } from '../../testTypes'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data: SrcTestCaseData[] = [ + { + name: 'segment', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + date: '2020-07-10T07:43:07.766Z', + type: 's', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { name: 'Auth0.Android', env: { android: '28' }, version: '1.23.0' }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + { + date: '2020-07-10T07:43:09.620Z', + type: 'seacft', + description: '', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'okhttp 2.7.5 / Other 0.0.0', + details: { code: '*************Xst' }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { name: 'Auth0.Android', env: { android: '28' }, version: '1.23.0' }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: false, + }, + { + date: '2020-07-10T07:43:07.766Z', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { name: 'Auth0.Android', env: { android: '28' }, version: '1.23.0' }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + { + type: 's', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { name: 'Auth0.Android', env: { android: '28' }, version: '1.23.0' }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + date: '2020-07-10T07:43:07.766Z', + type: 's', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { + name: 'Auth0.Android', + env: { android: '28' }, + version: '1.23.0', + }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + ], + }, + }, + { + output: { + batch: [ + { + date: '2020-07-10T07:43:09.620Z', + type: 'seacft', + description: '', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'okhttp 2.7.5 / Other 0.0.0', + details: { code: '*************Xst' }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { + name: 'Auth0.Android', + env: { android: '28' }, + version: '1.23.0', + }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: false, + }, + ], + }, + }, + { + output: { + batch: [ + { + date: '2020-07-10T07:43:07.766Z', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { + name: 'Auth0.Android', + env: { android: '28' }, + version: '1.23.0', + }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + ], + }, + }, + { + output: { + batch: [ + { + type: 's', + connection_id: '', + client_id: '********************************', + client_name: 'My App', + ip: '47.15.6.58', + user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', + details: { + prompts: [], + completedAt: 1594366987765, + elapsedTime: null, + session_id: '**************_***************', + }, + hostname: '************.us.auth0.com', + user_id: 'auth0|************************', + user_name: 'example@test.com', + auth0_client: { + name: 'Auth0.Android', + env: { android: '28' }, + version: '1.23.0', + }, + log_id: '********************************************************', + _id: '********************************************************', + isMobile: true, + }, + ], + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns(_) { + defaultMockFns(); + }, +})); diff --git a/test/integrations/sources/shopify/data.ts b/test/integrations/sources/shopify/data.ts new file mode 100644 index 0000000000..f5eb3c148b --- /dev/null +++ b/test/integrations/sources/shopify/data.ts @@ -0,0 +1,609 @@ +import { skip } from 'node:test'; + +export const data = [ + { + name: 'shopify', + description: 'Track Call -> carts_create ', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + id: 'shopify_test3', + query_parameters: { topic: ['carts_create'] }, + token: 'shopify_test3', + line_items: [], + note: null, + updated_at: '2023-02-10T12:16:07.251Z', + created_at: '2023-02-10T12:05:04.402Z', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [{ outputToSource: { body: 'T0s=', contentType: 'text/plain' }, statusCode: 200 }], + }, + }, + }, + { + name: 'shopify', + description: 'No Query Parameters', + module: 'source', + version: 'v0', + skipGo: 'not possible', + input: { + request: { body: [{}], method: 'POST', headers: { 'Content-Type': 'application/json' } }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Query_parameters is missing', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'shopify', + description: 'Invalid topic', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { query_parameters: { signature: ['rudderstack'], writeKey: ['sample-write-key'] } }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Invalid topic in query_parameters', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'shopify', + description: 'Topic Not found', + module: 'source', + version: 'v0', + skipGo: 'not possible', + input: { + request: { + body: [ + { + query_parameters: { + topic: [], + signature: ['rudderstack'], + writeKey: ['sample-write-key'], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Topic not found', + statTags: { + destinationId: 'Non determinable', + errorCategory: 'transformation', + implementation: 'native', + module: 'source', + workspaceId: 'Non determinable', + }, + statusCode: 400, + }, + ], + }, + }, + }, + { + name: 'shopify', + description: 'Unsupported Event Type', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + query_parameters: { + topic: ['random_event'], + signature: ['rudderstack'], + writeKey: ['sample-write-key'], + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [{ outputToSource: { body: 'T0s=', contentType: 'text/plain' }, statusCode: 200 }], + }, + }, + }, + { + name: 'shopify', + description: 'Identify Call for customers create event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + query_parameters: { + topic: ['customers_create'], + signature: ['rudderstack'], + writeKey: ['sample-write-key'], + }, + id: 5747017285820, + email: 'anuraj@rudderstack.com', + accepts_marketing: false, + created_at: '2021-12-29T15:15:19+05:30', + updated_at: '2021-12-29T15:15:20+05:30', + first_name: 'Anuraj', + last_name: 'Guha', + orders_count: 0, + state: 'disabled', + total_spent: '0.00', + last_order_id: null, + note: '', + verified_email: true, + multipass_identifier: null, + tax_exempt: false, + phone: '+919876543210', + tags: '', + last_order_name: null, + currency: 'INR', + addresses: [ + { + id: 6947581821116, + customer_id: 5747017285820, + first_name: 'Anuraj', + last_name: 'Guha', + company: 'Rudderstack', + address1: 'Home', + address2: 'Apartment', + city: 'Kolkata', + province: 'West Bengal', + country: 'India', + zip: '708091', + phone: '+919876543210', + name: 'Anuraj Guha', + province_code: 'WB', + country_code: 'IN', + country_name: 'India', + default: true, + }, + ], + accepts_marketing_updated_at: '2021-12-29T15:15:20+05:30', + marketing_opt_in_level: null, + tax_exemptions: [], + sms_marketing_consent: { + state: 'not_subscribed', + opt_in_level: 'single_opt_in', + consent_updated_at: null, + consent_collected_from: 'SHOPIFY', + }, + admin_graphql_api_id: 'gid://shopify/Customer/5747017285820', + default_address: { + id: 6947581821116, + customer_id: 5747017285820, + first_name: 'Anuraj', + last_name: 'Guha', + company: 'Rudderstack', + address1: 'Home', + address2: 'Apartment', + city: 'Kolkata', + province: 'West Bengal', + country: 'India', + zip: '708091', + phone: '+919876543210', + name: 'Anuraj Guha', + province_code: 'WB', + country_code: 'IN', + country_name: 'India', + default: true, + }, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'RudderStack Shopify Cloud', version: '1.0.0' }, + integration: { name: 'SHOPIFY' }, + topic: 'customers_create', + }, + integrations: { SHOPIFY: true }, + type: 'identify', + userId: '5747017285820', + traits: { + email: 'anuraj@rudderstack.com', + firstName: 'Anuraj', + lastName: 'Guha', + phone: '+919876543210', + addressList: [ + { + id: 6947581821116, + customer_id: 5747017285820, + first_name: 'Anuraj', + last_name: 'Guha', + company: 'Rudderstack', + address1: 'Home', + address2: 'Apartment', + city: 'Kolkata', + province: 'West Bengal', + country: 'India', + zip: '708091', + phone: '+919876543210', + name: 'Anuraj Guha', + province_code: 'WB', + country_code: 'IN', + country_name: 'India', + default: true, + }, + ], + address: { + id: 6947581821116, + customer_id: 5747017285820, + first_name: 'Anuraj', + last_name: 'Guha', + company: 'Rudderstack', + address1: 'Home', + address2: 'Apartment', + city: 'Kolkata', + province: 'West Bengal', + country: 'India', + zip: '708091', + phone: '+919876543210', + name: 'Anuraj Guha', + province_code: 'WB', + country_code: 'IN', + country_name: 'India', + default: true, + }, + acceptsMarketing: false, + orderCount: 0, + state: 'disabled', + totalSpent: '0.00', + note: '', + verifiedEmail: true, + taxExempt: false, + tags: '', + currency: 'INR', + taxExemptions: [], + smsMarketingConsent: { + state: 'not_subscribed', + opt_in_level: 'single_opt_in', + consent_updated_at: null, + consent_collected_from: 'SHOPIFY', + }, + adminGraphqlApiId: 'gid://shopify/Customer/5747017285820', + acceptsMarketingUpdatedAt: '2021-12-29T15:15:20+05:30', + }, + timestamp: '2021-12-29T09:45:20.000Z', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'shopify', + description: 'Unsupported checkout event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + query_parameters: { + topic: ['checkout_delete'], + writeKey: ['sample-write-key'], + signature: ['rudderstack'], + }, + admin_graphql_api_id: 'gid://shopify/Fulfillment/4124667937024', + created_at: '2022-01-05T18:13:02+05:30', + destination: null, + id: 4124667937024, + line_items: [], + customer: { email: 'test_person@email.com', first_name: 'Test', last_name: 'Person' }, + billing_address: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + shipping_address: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + location_id: 66855371008, + name: '#1002.1', + order_id: 4617255092480, + origin_address: null, + receipt: {}, + service: 'manual', + shipment_status: null, + status: 'success', + tracking_company: 'Amazon Logistics UK', + tracking_number: 'Sample001test', + tracking_numbers: ['Sample001test'], + tracking_url: 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + tracking_urls: [ + 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + ], + updated_at: '2022-01-05T18:16:48+05:30', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [{ outputToSource: { body: 'T0s=', contentType: 'text/plain' }, statusCode: 200 }], + }, + }, + }, + { + name: 'shopify', + description: 'Track Call -> Fullfillments updated event', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + query_parameters: { + topic: ['fulfillments_update'], + writeKey: ['sample-write-key'], + signature: ['rudderstack'], + }, + shipping_address: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + billing_address: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + admin_graphql_api_id: 'gid://shopify/Fulfillment/4124667937024', + created_at: '2022-01-05T18:13:02+05:30', + destination: null, + email: 'test_person@email.com', + id: 4124667937024, + line_items: [ + { + admin_graphql_api_id: 'gid://shopify/LineItem/11896203149568', + discount_allocations: [], + duties: [], + fulfillable_quantity: 0, + fulfillment_service: 'manual', + fulfillment_status: 'fulfilled', + gift_card: false, + grams: 0, + id: 11896203149568, + name: 'p1', + origin_location: { + address1: '74 CC/7, Anupama Housing Estate - II', + address2: '', + city: 'Kolkatta', + country_code: 'IN', + id: 3373642219776, + name: '74 CC/7, Anupama Housing Estate - II', + province_code: 'WB', + zip: '700052', + }, + price: '5000.00', + price_set: { + presentment_money: { amount: '5000.00', currency_code: 'INR' }, + shop_money: { amount: '5000.00', currency_code: 'INR' }, + }, + product_exists: true, + product_id: 7510929801472, + properties: [], + quantity: 1, + requires_shipping: true, + sku: '15', + tax_lines: [ + { + channel_liable: false, + price: '900.00', + price_set: { + presentment_money: { amount: '900.00', currency_code: 'INR' }, + shop_money: { amount: '900.00', currency_code: 'INR' }, + }, + rate: 0.18, + title: 'IGST', + }, + ], + taxable: true, + title: 'p1', + total_discount: '0.00', + total_discount_set: { + presentment_money: { amount: '0.00', currency_code: 'INR' }, + shop_money: { amount: '0.00', currency_code: 'INR' }, + }, + variant_id: 42211160228096, + variant_inventory_management: 'shopify', + variant_title: '', + vendor: 'rudderstack-store', + }, + ], + location_id: 66855371008, + name: '#1002.1', + order_id: 4617255092480, + origin_address: null, + receipt: {}, + service: 'manual', + shipment_status: null, + status: 'success', + tracking_company: 'Amazon Logistics UK', + tracking_number: 'Sample001test', + tracking_numbers: ['Sample001test'], + tracking_url: 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + tracking_urls: [ + 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + ], + updated_at: '2022-01-05T18:16:48+05:30', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'RudderStack Shopify Cloud', version: '1.0.0' }, + integration: { name: 'SHOPIFY' }, + topic: 'fulfillments_update', + }, + integrations: { SHOPIFY: true }, + type: 'track', + userId: 'shopify-admin', + event: 'Fulfillments Update', + properties: { + admin_graphql_api_id: 'gid://shopify/Fulfillment/4124667937024', + created_at: '2022-01-05T18:13:02+05:30', + destination: null, + email: 'test_person@email.com', + id: 4124667937024, + location_id: 66855371008, + name: '#1002.1', + order_id: 4617255092480, + origin_address: null, + receipt: {}, + service: 'manual', + shipment_status: null, + status: 'success', + tracking_company: 'Amazon Logistics UK', + tracking_number: 'Sample001test', + tracking_numbers: ['Sample001test'], + tracking_url: + 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + tracking_urls: [ + 'https://www.amazon.co.uk/gp/help/customer/display.html?nodeId=201910530', + ], + updated_at: '2022-01-05T18:16:48+05:30', + products: [ + { + product_id: 7510929801472, + sku: '15', + title: 'p1', + price: '5000.00', + brand: 'rudderstack-store', + quantity: 1, + admin_graphql_api_id: 'gid://shopify/LineItem/11896203149568', + discount_allocations: [], + duties: [], + fulfillable_quantity: 0, + fulfillment_service: 'manual', + fulfillment_status: 'fulfilled', + gift_card: false, + grams: 0, + id: 11896203149568, + origin_location: { + address1: '74 CC/7, Anupama Housing Estate - II', + address2: '', + city: 'Kolkatta', + country_code: 'IN', + id: 3373642219776, + name: '74 CC/7, Anupama Housing Estate - II', + province_code: 'WB', + zip: '700052', + }, + price_set: { + presentment_money: { amount: '5000.00', currency_code: 'INR' }, + shop_money: { amount: '5000.00', currency_code: 'INR' }, + }, + product_exists: true, + properties: [], + requires_shipping: true, + tax_lines: [ + { + channel_liable: false, + price: '900.00', + price_set: { + presentment_money: { amount: '900.00', currency_code: 'INR' }, + shop_money: { amount: '900.00', currency_code: 'INR' }, + }, + rate: 0.18, + title: 'IGST', + }, + ], + taxable: true, + total_discount: '0.00', + total_discount_set: { + presentment_money: { amount: '0.00', currency_code: 'INR' }, + shop_money: { amount: '0.00', currency_code: 'INR' }, + }, + variant_inventory_management: 'shopify', + variant: '42211160228096 ', + }, + ], + }, + traits: { + shippingAddress: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + billingAddress: { address1: '11 Rani Sankari Lane Patuapara Bhowanipore' }, + email: 'test_person@email.com', + }, + }, + ], + }, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/sources/signl4/data.ts b/test/integrations/sources/signl4/data.ts new file mode 100644 index 0000000000..b318bfb6df --- /dev/null +++ b/test/integrations/sources/signl4/data.ts @@ -0,0 +1,550 @@ +import utils from '../../../../src/v0/util'; + +const defaultMockFns = () => { + jest.spyOn(utils, 'generateUUID').mockReturnValue('97fcd7b2-cc24-47d7-b776-057b7b199513'); +}; + +export const data = [ + { + name: 'signl4', + description: 'test-0', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 200, + eventRaisedUtc: '2017-09-01T08:11:37.4815663Z', + subscription: { id: '0acf8014-22f2-4503-88d7-f7d05b46744f' }, + alert: { + statusCode: 1, + eventId: '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + externalEventId: 'INC091210', + id: '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + id: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + originalTimestamp: '2017-09-01T08:11:37.000Z', + event: 'New Alert Created', + properties: { + eventType: 200, + 'subscription.id': '0acf8014-22f2-4503-88d7-f7d05b46744f', + 'alert.statusCode': 1, + 'alert.eventId': '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + 'alert.externalEventId': 'INC091210', + 'alert.id': '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-1', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 201, + eventRaisedUtc: '2017-09-01T08:11:37.4815663Z', + subscription: { id: '0acf8014-22f2-4503-88d7-f7d05b46744f' }, + user: { + username: 'Rene', + mailaddress: 'rene@signl4.com', + id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5', + }, + alert: { + statusCode: 2, + eventId: '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + externalEventId: 'Content you passed in the X-S4-ExternalID parameter', + acknowledgedUserIds: ['f0bd5063-9588-51cf-b3d9-94e5647dedc5'], + id: '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + id: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + externalId: [ + { type: 'signl4UserId', id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5' }, + ], + traits: { email: 'rene@signl4.com', name: 'Rene' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + originalTimestamp: '2017-09-01T08:11:37.000Z', + event: 'Alert Confirmed', + properties: { + eventType: 201, + 'subscription.id': '0acf8014-22f2-4503-88d7-f7d05b46744f', + 'alert.statusCode': 2, + 'alert.eventId': '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + 'alert.externalEventId': 'Content you passed in the X-S4-ExternalID parameter', + 'alert.acknowledgedUserIds[0]': 'f0bd5063-9588-51cf-b3d9-94e5647dedc5', + 'alert.id': '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-2', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 201, + eventRaisedUtc: '2017-09-01T08:11:37.4815663Z', + subscription: { id: '0acf8014-22f2-4503-88d7-f7d05b46744f' }, + user: { + username: 'Rene', + mailaddress: 'rene@signl4.com', + id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5', + }, + alert: { + statusCode: 4, + eventId: '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + externalEventId: 'Content you passed in the X-S4-ExternalID parameter', + acknowledgedUserIds: ['f0bd5063-9588-51cf-b3d9-94e5647dedc5'], + id: '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + id: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + externalId: [ + { type: 'signl4UserId', id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5' }, + ], + traits: { email: 'rene@signl4.com', name: 'Rene' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'dd209a2d-e037-41ee-b37d-f605cc0a39fb', + originalTimestamp: '2017-09-01T08:11:37.000Z', + event: 'Alert Resolved', + properties: { + eventType: 201, + 'subscription.id': '0acf8014-22f2-4503-88d7-f7d05b46744f', + 'alert.statusCode': 4, + 'alert.eventId': '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + 'alert.externalEventId': 'Content you passed in the X-S4-ExternalID parameter', + 'alert.acknowledgedUserIds[0]': 'f0bd5063-9588-51cf-b3d9-94e5647dedc5', + 'alert.id': '2518981069381242800_2ab1b5e0-f1b7-4c3e-9adf-6c157eeb4685', + }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-3', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 202, + eventRaisedUtc: '2020-01-10T12:27:19Z', + subscription: { id: 'b8fdd850-e2ad-45ff-924d-9c332a063200' }, + team: { id: '0e8979f7-0c6a-472d-8918-ecfd339252f8' }, + alert: { + statusCode: 1, + eventId: '2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9', + externalEventId: 'INC091210', + acknowledgedUserIds: [], + id: '2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2', + }, + id: '27283793-47c8-4da2-9767-d37be224338d', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: '27283793-47c8-4da2-9767-d37be224338d', + originalTimestamp: '2020-01-10T12:27:19.000Z', + event: 'Alert Escalated', + properties: { + eventType: 202, + 'subscription.id': 'b8fdd850-e2ad-45ff-924d-9c332a063200', + 'team.id': '0e8979f7-0c6a-472d-8918-ecfd339252f8', + 'alert.statusCode': 1, + 'alert.eventId': '2518236416806594587_0e67b746-6c88-4ddf-8872-99690b0457d9', + 'alert.externalEventId': 'INC091210', + 'alert.id': '2518236416804564453_12ea0f6f-948c-43d0-9034-f9565d7b6bd2', + 'alert.acknowledgedUserIds': [], + }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-4', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 203, + eventRaisedUtc: '2018-04-17T15:00:32Z', + subscription: { id: '1578ebd9-0a27-44ab-bc8e-52cd7d32e81d' }, + user: { + username: 'Rene', + mailaddress: 'rene@signl4.com', + id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5', + }, + alert: { + statusCode: 0, + eventId: '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + externalEventId: 'Content you passed in the X-S4-ExternalID parameter', + id: '2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2', + }, + annotation: { + message: "OK, I'll take care about it.", + id: '2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761', + }, + id: '141c0f88-7831-4d5e-b055-f6e83c269770', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + externalId: [ + { type: 'signl4UserId', id: 'f0bd5063-9588-51cf-b3d9-94e5647dedc5' }, + ], + traits: { email: 'rene@signl4.com', name: 'Rene' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: '141c0f88-7831-4d5e-b055-f6e83c269770', + originalTimestamp: '2018-04-17T15:00:32.000Z', + event: 'Alert Annotated', + properties: { + eventType: 203, + 'subscription.id': '1578ebd9-0a27-44ab-bc8e-52cd7d32e81d', + 'alert.statusCode': 0, + 'alert.eventId': '2518783235949759942_fbc7b4a4-badd-47b8-9e1d-702fb6a1a0b2', + 'alert.externalEventId': 'Content you passed in the X-S4-ExternalID parameter', + 'alert.id': '2518783235958846071_4e2dfab2-4717-42bc-8d37-8682402309c2', + 'annotation.message': "OK, I'll take care about it.", + 'annotation.id': '2518783235661483318_99ebffe0-1b90-40ef-990a-fbd842484761', + }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-5', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 300, + eventRaisedUtc: '2017-09-01T09:16:17.3717355Z', + team: { id: 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + id: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + originalTimestamp: '2017-09-01T09:16:17.000Z', + event: 'Duty Period Started', + properties: { eventType: 300, 'team.id': 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-6', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 301, + eventRaisedUtc: '2017-09-01T09:16:17.3717355Z', + team: { id: 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + id: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + originalTimestamp: '2017-09-01T09:16:17.000Z', + event: 'Duty Period Ended', + properties: { eventType: 301, 'team.id': 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-7', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 302, + eventRaisedUtc: '2017-09-01T09:16:17.3717355Z', + team: { id: 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + user: { id: 'e31da15f-7e13-43f1-b4a5-1ce3b470a504' }, + id: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + externalId: [ + { type: 'signl4UserId', id: 'e31da15f-7e13-43f1-b4a5-1ce3b470a504' }, + ], + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + originalTimestamp: '2017-09-01T09:16:17.000Z', + event: 'Somebody Punched-In', + properties: { eventType: 302, 'team.id': 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, + { + name: 'signl4', + description: 'test-8', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + eventType: 303, + eventRaisedUtc: '2017-09-01T09:16:17.3717355Z', + team: { id: 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + user: { id: 'e31da15f-7e13-43f1-b4a5-1ce3b470a504' }, + id: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Signl4' }, + externalId: [ + { type: 'signl4UserId', id: 'e31da15f-7e13-43f1-b4a5-1ce3b470a504' }, + ], + }, + integrations: { Signl4: false }, + type: 'track', + messageId: 'f56a6b59-1197-4e7d-8eca-8d21a4b57ec3', + originalTimestamp: '2017-09-01T09:16:17.000Z', + event: 'Somebody Punched-Out', + properties: { eventType: 303, 'team.id': 'f1801955-4724-44de-902a-f6f02ba9e10f' }, + anonymousId: '97fcd7b2-cc24-47d7-b776-057b7b199513', + }, + ], + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: () => { + defaultMockFns(); + }, +})); diff --git a/test/integrations/testTypes.ts b/test/integrations/testTypes.ts index 77635f2198..3ccc792caf 100644 --- a/test/integrations/testTypes.ts +++ b/test/integrations/testTypes.ts @@ -55,6 +55,24 @@ export interface TestCaseData { mockFns?: (mockAdapter: MockAdapter) => {}; } +export type MockFns = (mockAdapter: MockAdapter) => void; + +export interface SrcTestCaseData { + id?: string; + name: string; + description: string; + scenario?: string; + successCriteria?: string; + comment?: string; + feature?: string; + module: string; + version?: string; + input: inputType; + output: outputType; + mock?: mockType[]; + mockFns?: MockFns; +} + export type MockHttpCallsData = { httpReq: Record; httpRes: Partial; diff --git a/test/scripts/generateJson.ts b/test/scripts/generateJson.ts index 7e4c3a3c0f..a4a254f8f3 100644 --- a/test/scripts/generateJson.ts +++ b/test/scripts/generateJson.ts @@ -1,8 +1,11 @@ import { Command, OptionValues } from 'commander'; import path from 'path'; import fs from 'fs'; +import get from 'get-value'; import { getTestData, getTestDataFilePaths, produceTestData } from '../integrations/testUtils'; -import { head } from 'lodash'; +import { head, isNumber } from 'lodash'; +import { responseType } from '../integrations/testTypes'; +import { isDefinedAndNotNull } from '@rudderstack/integrations-lib'; interface TestCaseData { name: string; @@ -17,6 +20,7 @@ interface Input { query: string; body: any; headers?: Record; + method?: string; }; } @@ -39,11 +43,38 @@ jsonGenerator .command('sources') .description('generator JSON test cases for source') .argument('', 'output path') - .option('-s, --source ', 'source', ',') + .option('-s, --source ', 'source', '') .action(generateSources); jsonGenerator.parse(); +function getStatusCode(outputResponse?: responseType): number { + const statusCodeKeys = ['body.0.statusCode', 'statusCode', 'status']; + const stCode = statusCodeKeys + .map((statusKey) => get(outputResponse, statusKey)) + .find((stCode) => isNumber(stCode)); + return stCode || 200; +} + +function getErrorResponse(outputResponse?: responseType) { + const bodyKeys = ['body.0.error', 'error']; + const errorResponse = bodyKeys + .map((statusKey) => get(outputResponse, statusKey)) + .find(isDefinedAndNotNull); + return errorResponse; +} + +function getSourceRequestBody(testCase: any, version?: string) { + const bodyElement = + testCase.input.request.body.length === 1 + ? testCase.input.request.body[0] + : testCase.input.request.body; + if (version === 'v0') { + return bodyElement; + } + return { ...bodyElement.event, source: bodyElement.source }; +} + function generateSources(outputFolder: string, options: OptionValues) { const rootDir = __dirname; const resolvedpath = path.resolve(rootDir, '../integrations/sources'); @@ -51,22 +82,27 @@ function generateSources(outputFolder: string, options: OptionValues) { const files = getTestDataFilePaths(resolvedpath, options); files.forEach((testDataPath) => { - let testData = getTestData(testDataPath); - testData.forEach((testCase) => { - let statusCode: number = - testCase.output.response?.statusCode || testCase.output.response?.status || 200; + const testData = getTestData(testDataPath); + testData.forEach(({ version, ...testCase }) => { + let statusCode: number = getStatusCode(testCase.output.response); let responseBody: any = 'OK'; if (statusCode == 200) { if (testCase.output.response?.body[0]?.outputToSource?.body) { - responseBody = JSON.parse( - Buffer.from(testCase.output.response?.body[0]?.outputToSource?.body, 'base64').toString( - 'utf-8', - ), - ); + let rawBody = Buffer.from( + testCase.output.response?.body[0]?.outputToSource?.body, + 'base64', + ).toString(); + if ( + testCase.output.response?.body[0]?.outputToSource?.contentType === 'application/json' + ) { + responseBody = JSON.parse(rawBody); + } else { + responseBody = rawBody; + } } } else { - responseBody = testCase.output.response?.error; + responseBody = getErrorResponse(testCase.output.response); } testCase.input.request.body.forEach((body) => { @@ -74,16 +110,20 @@ function generateSources(outputFolder: string, options: OptionValues) { delete body['request_ip']; }); + let errorQueue: any[] = []; + if (statusCode !== 200) { + errorQueue = Array.isArray(testCase.input.request?.body) + ? testCase.input.request?.body + : [testCase.input.request?.body]; + } + let goTest: TestCaseData = { name: testCase.name, description: testCase.description, input: { request: { query: JSON.stringify(testCase.input.request.params), - body: - testCase.input.request.body.length === 1 - ? testCase.input.request.body[0] - : testCase.input.request.body, + body: getSourceRequestBody(testCase, version), headers: testCase.input.request.headers || { 'Content-Type': 'application/json', }, @@ -102,18 +142,26 @@ function generateSources(outputFolder: string, options: OptionValues) { .map((i) => i.output.batch) .flat() : [], - errQueue: statusCode != 200 ? [testCase.output.response?.body] : [], + errQueue: errorQueue, }, }; + if (testCase.input.request.method && testCase.input.request.method.toLowerCase() !== 'post') { + goTest.input.request.method = testCase.input.request.method; + } const dirPath = path.join(outputFolder, goTest.name); - const filePath = path.join(dirPath, `${toSnakeCase(goTest.description)}.json`); + const safeName = toSnakeCase(goTest.description) + .replace(/[^a-z0-9]/gi, '_') + .toLowerCase(); + const filePath = path.join(dirPath, `${safeName}.json`); if (testCase.skipGo) { goTest.skip = testCase.skipGo; } goTest.output.queue.forEach((queueItem) => { - queueItem['receivedAt'] = '2024-03-03T04:48:29.000Z'; + queueItem['receivedAt'] = + testCase.output.response?.body?.[0]?.output?.batch?.[0]?.receivedAt ?? + '2024-03-03T04:48:29.000Z'; queueItem['request_ip'] = '192.0.2.30'; if (!queueItem['messageId']) { queueItem['messageId'] = '00000000-0000-0000-0000-000000000000'; From 2fb7e6b4bc2b7524f6fa86a54596f7c6550fa51a Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:16:03 +0530 Subject: [PATCH 114/201] fix: rakuten for amount list (#3612) --- src/cdk/v2/destinations/rakuten/utils.js | 6 +----- test/integrations/destinations/rakuten/processor/track.ts | 8 ++++---- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/cdk/v2/destinations/rakuten/utils.js b/src/cdk/v2/destinations/rakuten/utils.js index 480812b5b7..2dd628a250 100644 --- a/src/cdk/v2/destinations/rakuten/utils.js +++ b/src/cdk/v2/destinations/rakuten/utils.js @@ -56,11 +56,7 @@ const constructLineItems = (properties) => { if (!product?.amount && !product?.price) { throw new InstrumentationError('Either amount or price is required for every product'); } - - if (product.price) { - return product.quantity * product.price * 100; - } - return product.amount * 100; + return product.amount * 100 || (product.quantity || 1) * 100 * product.price; }); productList.amtlist = amountList.join('|'); return productList; diff --git a/test/integrations/destinations/rakuten/processor/track.ts b/test/integrations/destinations/rakuten/processor/track.ts index 74d09b8d4c..8c6bc4863d 100644 --- a/test/integrations/destinations/rakuten/processor/track.ts +++ b/test/integrations/destinations/rakuten/processor/track.ts @@ -45,8 +45,8 @@ export const trackSuccess = [ { sku: 'custom sku 2', name: 'SampleProduct', - quantity: 1, - amount: 30, + quantity: 2, + price: 30.99, coupon: 'SALE50', }, ], @@ -82,7 +82,7 @@ export const trackSuccess = [ mid: 'dummyMarketingId', xml: 1, source: 'rudderstack', - amtlist: '2000|2500|3000', + amtlist: '2000|2500|6198', brandlist: 'SampleBrand||', catidlist: '12345||', catlist: 'Electronics||', @@ -93,7 +93,7 @@ export const trackSuccess = [ sequencelist: '123||', shipbylist: 'Express||', shipidlist: 'SHIP123||', - qlist: '5|5|1', + qlist: '5|5|2', marginlist: '0.15||', markdownlist: '5||', taxexemptlist: 'N||', From 14e776e659b745c814d31cd049fc4051c1e6735d Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Fri, 2 Aug 2024 11:09:04 +0530 Subject: [PATCH 115/201] feat: supporting device token type using integrations object (#3620) * feat: supporting device token type using integrations object * feat: adding test cases --- src/constants/destinationCanonicalNames.js | 1 + src/v0/destinations/clevertap/config.js | 2 + src/v0/destinations/clevertap/transform.js | 22 +- src/v0/destinations/clevertap/utils.js | 22 +- src/v0/destinations/clevertap/utils.test.js | 87 ++ .../destinations/clevertap/processor/data.ts | 804 ++++++++++++++++++ 6 files changed, 932 insertions(+), 6 deletions(-) create mode 100644 src/v0/destinations/clevertap/utils.test.js diff --git a/src/constants/destinationCanonicalNames.js b/src/constants/destinationCanonicalNames.js index e8c88efc8e..f99c735e45 100644 --- a/src/constants/destinationCanonicalNames.js +++ b/src/constants/destinationCanonicalNames.js @@ -185,6 +185,7 @@ const DestCanonicalNames = { emarsys: ['EMARSYS', 'Emarsys', 'emarsys'], wunderkind: ['wunderkind', 'Wunderkind', 'WUNDERKIND'], cordial: ['cordial', 'Cordial', 'CORDIAL'], + clevertap: ['clevertap', 'Clevertap', 'CleverTap', 'CLEVERTAP'], }; module.exports = { DestHandlerMap, DestCanonicalNames }; diff --git a/src/v0/destinations/clevertap/config.js b/src/v0/destinations/clevertap/config.js index 25ece35537..a8ae1b506d 100644 --- a/src/v0/destinations/clevertap/config.js +++ b/src/v0/destinations/clevertap/config.js @@ -42,6 +42,7 @@ const CLEVERTAP_DEFAULT_EXCLUSION = [ 'ts', 'overrideFields', ]; +const ALLOWED_DEVICE_TOKEN_TYPES = ['chrome', 'fcm', 'gcm', 'apns', 'wns', 'mpns']; // ref : https://developer.clevertap.com/docs/disassociate-api const DEL_MAX_BATCH_SIZE = 100; @@ -54,4 +55,5 @@ module.exports = { CONFIG_CATEGORIES, CLEVERTAP_DEFAULT_EXCLUSION, DESTINATION: 'CLEVERTAP', + ALLOWED_DEVICE_TOKEN_TYPES, }; diff --git a/src/v0/destinations/clevertap/transform.js b/src/v0/destinations/clevertap/transform.js index 51ed5c851e..214f9e6409 100644 --- a/src/v0/destinations/clevertap/transform.js +++ b/src/v0/destinations/clevertap/transform.js @@ -1,7 +1,11 @@ /* eslint-disable no-param-reassign */ /* eslint-disable no-nested-ternary */ const get = require('get-value'); -const { InstrumentationError, TransformationError } = require('@rudderstack/integrations-lib'); +const { + InstrumentationError, + TransformationError, + isDefinedAndNotNull, +} = require('@rudderstack/integrations-lib'); const { EventType } = require('../../../constants'); const { getEndpoint, @@ -22,8 +26,10 @@ const { handleRtTfSingleEventError, batchMultiplexedEvents, getSuccessRespEvents, + getIntegrationsObj, + removeUndefinedNullValuesAndEmptyObjectArray, } = require('../../util'); -const { generateClevertapBatchedPayload } = require('./utils'); +const { generateClevertapBatchedPayload, deduceTokenType } = require('./utils'); const { JSON_MIME_TYPE } = require('../../util/constant'); @@ -268,7 +274,9 @@ const responseBuilderSimple = (message, category, destination) => { deviceToken && (deviceOS === 'android' || isAppleFamily(deviceOS)) ) { - const tokenType = deviceOS === 'android' ? 'fcm' : 'apns'; + const tokenType = deduceTokenType(message, deviceOS); + const integObject = getIntegrationsObj(message, 'clevertap'); + const chromeKeys = integObject?.chromeKeys; const payloadForDeviceToken = { d: [ { @@ -276,6 +284,7 @@ const responseBuilderSimple = (message, category, destination) => { tokenData: { id: deviceToken, type: tokenType, + keys: isDefinedAndNotNull(chromeKeys) ? chromeKeys : null, }, objectId: get(message, 'anonymousId'), }, @@ -283,7 +292,12 @@ const responseBuilderSimple = (message, category, destination) => { }; const respArr = []; respArr.push(responseWrapper(payload, destination)); // identify - respArr.push(responseWrapper(payloadForDeviceToken, destination)); // device token + respArr.push( + responseWrapper( + removeUndefinedNullValuesAndEmptyObjectArray(payloadForDeviceToken), + destination, + ), + ); // device token return respArr; } } else { diff --git a/src/v0/destinations/clevertap/utils.js b/src/v0/destinations/clevertap/utils.js index f2dba13ca3..bdc7f63fbd 100644 --- a/src/v0/destinations/clevertap/utils.js +++ b/src/v0/destinations/clevertap/utils.js @@ -1,6 +1,6 @@ -const { defaultBatchRequestConfig } = require('../../util'); +const { defaultBatchRequestConfig, getIntegrationsObj } = require('../../util'); -const { getEndpoint } = require('./config'); +const { getEndpoint, ALLOWED_DEVICE_TOKEN_TYPES } = require('./config'); const { JSON_MIME_TYPE } = require('../../util/constant'); function generateClevertapBatchedPayload(events, destination) { @@ -28,7 +28,25 @@ function generateClevertapBatchedPayload(events, destination) { return batchedRequest; } +/** + * Deduces the device token type based on the integration object and device operating system. + * Ref : https://developer.clevertap.com/docs/upload-device-tokens-api + * @param {Object} message - The message object containing integration details. + * @param {string} deviceOS - The device operating system ('android' or 'ios'). + * @returns {string} The deduced device token type ('fcm' for Android or 'apns' for iOS). + */ +const deduceTokenType = (message, deviceOS) => { + const integrationObj = getIntegrationsObj(message, 'clevertap'); + if ( + integrationObj?.deviceTokenType && + ALLOWED_DEVICE_TOKEN_TYPES.includes(integrationObj?.deviceTokenType) + ) { + return integrationObj?.deviceTokenType; + } + return deviceOS === 'android' ? 'fcm' : 'apns'; +}; module.exports = { generateClevertapBatchedPayload, + deduceTokenType, }; diff --git a/src/v0/destinations/clevertap/utils.test.js b/src/v0/destinations/clevertap/utils.test.js new file mode 100644 index 0000000000..0b0e0d34c5 --- /dev/null +++ b/src/v0/destinations/clevertap/utils.test.js @@ -0,0 +1,87 @@ +const { deduceTokenType } = require('./utils'); + +describe('deduceTokenType', () => { + // deduces token type from integration object when valid token type is present + it('should return the token type from integration object when it is valid', () => { + const message = { + integrations: { + clevertap: { + deviceTokenType: 'fcm', + }, + }, + }; + const deviceOS = 'android'; + const result = deduceTokenType(message, deviceOS); + expect(result).toBe('fcm'); + }); + + // handles null or undefined message input gracefully + it('should return default token type based on deviceOS when message is null', () => { + const message = null; + const deviceOS = 'android'; + const result = deduceTokenType(message, deviceOS); + expect(result).toBe('fcm'); + }); + + // returns 'fcm' when deviceOS is 'android' and no valid token type is present + it("should return 'fcm' when deviceOS is 'android' and no valid token type is present", () => { + const message = { integrations: { clevertap: { deviceTokenType: null } } }; + const result = deduceTokenType(message, 'android'); + expect(result).toBe('fcm'); + }); + + // returns 'apns' when deviceOS is not 'android' and no valid token type is present + it("should return 'apns' when deviceOS is not 'android' and no valid token type is present", () => { + const message = { integrations: { clevertap: { deviceTokenType: null } } }; + const result = deduceTokenType(message, 'ios'); + expect(result).toBe('apns'); + }); + + // handles null or undefined deviceOS input gracefully + it('should return default token type when deviceOS is null', () => { + const message = {}; + const deviceOS = null; + const result = deduceTokenType(message, deviceOS); + expect(result).toEqual('apns'); + }); + + // handles empty integration object in message + it('should return default token type when integration object is empty', () => { + const message = { integrations: {} }; + const deviceOS = 'ios'; + const result = deduceTokenType(message, deviceOS); + expect(result).toEqual('apns'); + }); + + // handles integration object with invalid token type + it('should return default token type when integration object has an invalid token type', () => { + const message = { integrations: { clevertap: { deviceTokenType: 'invalidType' } } }; + const deviceOS = 'ios'; + const result = deduceTokenType(message, deviceOS); + expect(result).toEqual('apns'); + }); + + // handles integration object with no token type + it('should return default token type when integration object has no token type', () => { + const message = { integrations: { clevertap: {} } }; + const deviceOS = 'android'; + const result = deduceTokenType(message, deviceOS); + expect(result).toEqual('fcm'); + }); + + // verifies integration object retrieval with 'clevertap' as destination name + it('should retrieve correct device token type for CleverTap destination', () => { + const message = { integrations: { clevertap: { deviceTokenType: 'fcm' } } }; + const deviceOS = 'ios'; + const result = deduceTokenType(message, deviceOS); + expect(result).toBe('fcm'); + }); + + // checks for case sensitivity in deviceOS values + it('should handle case sensitivity in deviceOS values', () => { + const message = { integrations: { clevertap: { deviceTokenType: 'fcm' } } }; + const deviceOS = 'Android'; + const result = deduceTokenType(message, deviceOS); + expect(result).toBe('fcm'); + }); +}); diff --git a/test/integrations/destinations/clevertap/processor/data.ts b/test/integrations/destinations/clevertap/processor/data.ts index 1d7bdd7e78..49647e1937 100644 --- a/test/integrations/destinations/clevertap/processor/data.ts +++ b/test/integrations/destinations/clevertap/processor/data.ts @@ -2550,4 +2550,808 @@ export const data = [ }, }, }, + { + name: 'clevertap', + description: 'Test 22: device token type via integrations object takes precedence over os type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: true, + }, + }, + message: { + type: 'identify', + event: 'identify', + sentAt: '2021-05-24T08:53:38.762Z', + userId: 'useran4', + channel: 'mobile', + context: { + os: { + name: 'Android', + version: '10', + }, + app: { + name: 'myfirstapp', + build: '1', + version: '1.0', + namespace: 'com.example.myfirstapp', + }, + device: { + id: 'f54bb572361c4fd1', + name: 'whyred', + type: 'Android', + model: 'Redmi Note 5 Pro', + manufacturer: 'Xiaomi', + token: 'frfsgvrwe:APfdsafsgdfsgghfgfgjkhfsfgdhjhbvcvnetry767456fxsasdf', + }, + locale: 'en-IN', + screen: { + width: 1080, + height: 2118, + density: 420, + }, + traits: { + id: 'useran4', + email: 'tony4an@testmail.com', + phone: '4444457700', + userId: 'useran4', + lastname: 'Stark', + firstname: 'Tony4AN', + anonymousId: 'f54bb572361c4fd1', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.12', + }, + network: { + wifi: true, + carrier: 'airtel', + cellular: true, + bluetooth: false, + }, + timezone: 'Asia/Kolkata', + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 5 Pro Build/QQ3A.200805.001)', + }, + rudderId: 'd8dd4917-bdb2-4c17-8f62-24c79d87a937', + messageId: '1621846417928-7fbb739f-5f96-48ca-9ebb-5bfc4076a687', + anonymousId: 'f54bb572361c4fd1', + integrations: { + All: true, + clevertap: { + deviceTokenType: 'chrome', + }, + }, + originalTimestamp: '2021-05-24T08:53:37.929Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'profile', + profileData: { + Email: 'tony4an@testmail.com', + Phone: '4444457700', + Name: 'Tony4AN Stark', + identity: 'useran4', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'token', + tokenData: { + id: 'frfsgvrwe:APfdsafsgdfsgghfgfgjkhfsfgdhjhbvcvnetry767456fxsasdf', + type: 'chrome', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'clevertap', + description: + 'Test 23: device token type via integrations object does not take precedence over os type when the token type is not within the allowed types ', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: true, + }, + }, + message: { + type: 'identify', + event: 'identify', + sentAt: '2021-05-24T08:53:38.762Z', + userId: 'useran4', + channel: 'mobile', + context: { + os: { + name: 'Android', + version: '10', + }, + app: { + name: 'myfirstapp', + build: '1', + version: '1.0', + namespace: 'com.example.myfirstapp', + }, + device: { + id: 'f54bb572361c4fd1', + name: 'whyred', + type: 'Android', + model: 'Redmi Note 5 Pro', + manufacturer: 'Xiaomi', + token: 'frfsgvrwe:APfdsafsgdfsgghfgfgjkhfsfgdhjhbvcvnetry767456fxsasdf', + }, + locale: 'en-IN', + screen: { + width: 1080, + height: 2118, + density: 420, + }, + traits: { + id: 'useran4', + email: 'tony4an@testmail.com', + phone: '4444457700', + userId: 'useran4', + lastname: 'Stark', + firstname: 'Tony4AN', + anonymousId: 'f54bb572361c4fd1', + }, + library: { + name: 'com.rudderstack.android.sdk.core', + version: '1.0.12', + }, + network: { + wifi: true, + carrier: 'airtel', + cellular: true, + bluetooth: false, + }, + timezone: 'Asia/Kolkata', + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 5 Pro Build/QQ3A.200805.001)', + }, + rudderId: 'd8dd4917-bdb2-4c17-8f62-24c79d87a937', + messageId: '1621846417928-7fbb739f-5f96-48ca-9ebb-5bfc4076a687', + anonymousId: 'f54bb572361c4fd1', + integrations: { + All: true, + clevertap: { + deviceTokenType: 'random', + }, + }, + originalTimestamp: '2021-05-24T08:53:37.929Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'profile', + profileData: { + Email: 'tony4an@testmail.com', + Phone: '4444457700', + Name: 'Tony4AN Stark', + identity: 'useran4', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'token', + tokenData: { + id: 'frfsgvrwe:APfdsafsgdfsgghfgfgjkhfsfgdhjhbvcvnetry767456fxsasdf', + type: 'fcm', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'clevertap', + description: 'Test 24: chrome auth keys to be mapped via integrations object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: true, + }, + }, + message: { + type: 'identify', + event: 'identify', + sentAt: '2021-05-24T08:53:38.762Z', + userId: 'useran4', + channel: 'mobile', + context: { + os: { name: 'Android', version: '10' }, + app: { + name: 'myfirstapp', + build: '1', + version: '1.0', + namespace: 'com.example.myfirstapp', + }, + device: { + id: 'f54bb572361c4fd1', + name: 'whyred', + type: 'Android', + model: 'Redmi Note 5 Pro', + manufacturer: 'Xiaomi', + token: + 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + }, + locale: 'en-IN', + screen: { width: 1080, height: 2118, density: 420 }, + traits: { + id: 'useran4', + email: 'tony4an@testmail.com', + phone: '+919432240789', + userId: 'useran4', + lastname: 'Stark', + firstname: 'Tony4AN', + anonymousId: 'f54bb572361c4fd1', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.12' }, + network: { wifi: true, carrier: 'airtel', cellular: true, bluetooth: false }, + timezone: 'Asia/Kolkata', + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 5 Pro Build/QQ3A.200805.001)', + }, + rudderId: 'd8dd4917-bdb2-4c17-8f62-24c79d87a937', + messageId: '1621846417928-7fbb739f-5f96-48ca-9ebb-5bfc4076a687', + anonymousId: 'f54bb572361c4fd1', + integrations: { + All: true, + clevertap: { + deviceTokenType: 'chrome', + chromeKeys: { auth: '5I2Bu2oKdyy9CwL8QVF0NQ==' }, + }, + }, + originalTimestamp: '2021-05-24T08:53:37.929Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'profile', + profileData: { + Email: 'tony4an@testmail.com', + Phone: '+919432240789', + Name: 'Tony4AN Stark', + identity: 'useran4', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'token', + tokenData: { + id: 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + type: 'chrome', + keys: { + auth: '5I2Bu2oKdyy9CwL8QVF0NQ==', + }, + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'clevertap', + description: + 'Test 25: chrome auth key with only p256dh key to be mapped via integrations object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: true, + }, + }, + message: { + type: 'identify', + event: 'identify', + sentAt: '2021-05-24T08:53:38.762Z', + userId: 'useran4', + channel: 'mobile', + context: { + os: { name: 'Android', version: '10' }, + app: { + name: 'myfirstapp', + build: '1', + version: '1.0', + namespace: 'com.example.myfirstapp', + }, + device: { + id: 'f54bb572361c4fd1', + name: 'whyred', + type: 'Android', + model: 'Redmi Note 5 Pro', + manufacturer: 'Xiaomi', + token: + 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + }, + locale: 'en-IN', + screen: { width: 1080, height: 2118, density: 420 }, + traits: { + id: 'useran4', + email: 'tony4an@testmail.com', + phone: '+919432240789', + userId: 'useran4', + lastname: 'Stark', + firstname: 'Tony4AN', + anonymousId: 'f54bb572361c4fd1', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.12' }, + network: { wifi: true, carrier: 'airtel', cellular: true, bluetooth: false }, + timezone: 'Asia/Kolkata', + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 5 Pro Build/QQ3A.200805.001)', + }, + rudderId: 'd8dd4917-bdb2-4c17-8f62-24c79d87a937', + messageId: '1621846417928-7fbb739f-5f96-48ca-9ebb-5bfc4076a687', + anonymousId: 'f54bb572361c4fd1', + integrations: { + All: true, + clevertap: { + deviceTokenType: 'chrome', + chromeKeys: { + p256dh: + 'BLc4xRzKlKORKWlbdgFaBrrPK3ydWAHo4M0gs0i1oEKgPpWC5cW8OCzVrOQRv-1npXRWk8udnW3oYhIO4475rds=', + }, + }, + }, + originalTimestamp: '2021-05-24T08:53:37.929Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'profile', + profileData: { + Email: 'tony4an@testmail.com', + Phone: '+919432240789', + Name: 'Tony4AN Stark', + identity: 'useran4', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'token', + tokenData: { + id: 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + type: 'chrome', + keys: { + p256dh: + 'BLc4xRzKlKORKWlbdgFaBrrPK3ydWAHo4M0gs0i1oEKgPpWC5cW8OCzVrOQRv-1npXRWk8udnW3oYhIO4475rds=', + }, + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'clevertap', + description: + 'Test 25: chrome auth key object can have any random field and to be mapped via integrations object', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: true, + }, + }, + message: { + type: 'identify', + event: 'identify', + sentAt: '2021-05-24T08:53:38.762Z', + userId: 'useran4', + channel: 'mobile', + context: { + os: { name: 'Android', version: '10' }, + app: { + name: 'myfirstapp', + build: '1', + version: '1.0', + namespace: 'com.example.myfirstapp', + }, + device: { + id: 'f54bb572361c4fd1', + name: 'whyred', + type: 'Android', + model: 'Redmi Note 5 Pro', + manufacturer: 'Xiaomi', + token: + 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + }, + locale: 'en-IN', + screen: { width: 1080, height: 2118, density: 420 }, + traits: { + id: 'useran4', + email: 'tony4an@testmail.com', + phone: '+919432240789', + userId: 'useran4', + lastname: 'Stark', + firstname: 'Tony4AN', + anonymousId: 'f54bb572361c4fd1', + }, + library: { name: 'com.rudderstack.android.sdk.core', version: '1.0.12' }, + network: { wifi: true, carrier: 'airtel', cellular: true, bluetooth: false }, + timezone: 'Asia/Kolkata', + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 10; Redmi Note 5 Pro Build/QQ3A.200805.001)', + }, + rudderId: 'd8dd4917-bdb2-4c17-8f62-24c79d87a937', + messageId: '1621846417928-7fbb739f-5f96-48ca-9ebb-5bfc4076a687', + anonymousId: 'f54bb572361c4fd1', + integrations: { + All: true, + clevertap: { + deviceTokenType: 'chrome', + chromeKeys: { + random: 'random key', + }, + }, + }, + originalTimestamp: '2021-05-24T08:53:37.929Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'profile', + profileData: { + Email: 'tony4an@testmail.com', + Phone: '+919432240789', + Name: 'Tony4AN Stark', + identity: 'useran4', + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + userId: '', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + type: 'token', + tokenData: { + id: 'dR7jSUNlQ_qr_maG7Qd4R-:APA91bEuIZUlyF2Or7FzDp9slk2LTVoUIucV4hL7dvUqJzl6yWAfIFTBaU2uec9broasHAHAvga9ha1tszSEJobuAC-Zbh6l3DoXO4vnSrN4LcllybmGr_lIw5k8CgFoNuvSb8BWEb90', + type: 'chrome', + keys: { + random: 'random key', + }, + }, + objectId: 'f54bb572361c4fd1', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; From feadfcf6009ccc9b972634347448ba9428696ebb Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Fri, 2 Aug 2024 12:04:27 +0530 Subject: [PATCH 116/201] fix: update getAuthErrCategory and update error message for garl (#3629) * fix: update getAuthErrCategory and update error message for garl * chore: address comment --- .../networkHandler.js | 2 +- src/v0/util/googleUtils/index.js | 6 +- .../dataDelivery/business.ts | 6 +- .../dataDelivery/oauth.ts | 74 +++++++++++++++---- .../network.ts | 48 ++++++++++++ 5 files changed, 117 insertions(+), 19 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 98659fdf88..6491215a93 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -153,7 +153,7 @@ const gaAudienceRespHandler = (destResponse, stageMsg) => { // const { stat, err_code: errorCode } = respAttributes; throw new NetworkError( - `${response?.error?.message} ${stageMsg}`, + `${JSON.stringify(response)} ${stageMsg}`, status, { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), diff --git a/src/v0/util/googleUtils/index.js b/src/v0/util/googleUtils/index.js index 406afa1a49..124f63eda5 100644 --- a/src/v0/util/googleUtils/index.js +++ b/src/v0/util/googleUtils/index.js @@ -121,8 +121,12 @@ const getAuthErrCategory = ({ response, status }) => { const authenticationError = respArr.map((resp) => get(resp, 'error.details.0.errors.0.errorCode.authenticationError'), ); - if (authenticationError.includes('TWO_STEP_VERIFICATION_NOT_ENROLLED')) { + if ( // https://developers.google.com/google-ads/api/docs/oauth/2sv + authenticationError.includes('TWO_STEP_VERIFICATION_NOT_ENROLLED') || + // https://developers.google.com/google-ads/api/docs/common-errors#:~:text=this%20for%20you.-,CUSTOMER_NOT_FOUND,-Summary + authenticationError.includes('CUSTOMER_NOT_FOUND') + ) { return AUTH_STATUS_INACTIVE; } return REFRESH_TOKEN; diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts index ed1741e939..c0d8454548 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts @@ -166,7 +166,7 @@ export const testScenariosForV0API = [ output: { status: 400, message: - 'Request contains an invalid argument. during ga_audience response transformation', + '{"error":{"code":400,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v9.errors.GoogleAdsFailure","errors":[{"errorCode":{"offlineUserDataJobError":"INVALID_SHA256_FORMAT"},"message":"The SHA256 encoded value is malformed.","location":{"fieldPathElements":[{"fieldName":"operations","index":0},{"fieldName":"remove"},{"fieldName":"user_identifiers","index":0},{"fieldName":"hashed_email"}]}}]}],"message":"Request contains an invalid argument.","status":"INVALID_ARGUMENT"}} during ga_audience response transformation', destinationResponse: { error: { code: 400, @@ -313,11 +313,11 @@ export const testScenariosForV1API = [ body: { output: { message: - 'Request contains an invalid argument. during ga_audience response transformation', + '{"error":{"code":400,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v9.errors.GoogleAdsFailure","errors":[{"errorCode":{"offlineUserDataJobError":"INVALID_SHA256_FORMAT"},"message":"The SHA256 encoded value is malformed.","location":{"fieldPathElements":[{"fieldName":"operations","index":0},{"fieldName":"remove"},{"fieldName":"user_identifiers","index":0},{"fieldName":"hashed_email"}]}}]}],"message":"Request contains an invalid argument.","status":"INVALID_ARGUMENT"}} during ga_audience response transformation', response: [ { error: - 'Request contains an invalid argument. during ga_audience response transformation', + '{"error":{"code":400,"details":[{"@type":"type.googleapis.com/google.ads.googleads.v9.errors.GoogleAdsFailure","errors":[{"errorCode":{"offlineUserDataJobError":"INVALID_SHA256_FORMAT"},"message":"The SHA256 encoded value is malformed.","location":{"fieldPathElements":[{"fieldName":"operations","index":0},{"fieldName":"remove"},{"fieldName":"user_identifiers","index":0},{"fieldName":"hashed_email"}]}}]}],"message":"Request contains an invalid argument.","status":"INVALID_ARGUMENT"}} during ga_audience response transformation', metadata: generateGoogleOAuthMetadata(1), statusCode: 400, }, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts index b7f93a6945..9fd695a7a3 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts @@ -1,5 +1,16 @@ -import { generateProxyV1Payload } from '../../../testUtils'; -import { commonHeaders, commonParams, expectedStatTags, validRequestPayload1 } from './business'; +import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; +import { commonHeaders, commonParams, validRequestPayload1 } from './business'; + +const commonStatTags = { + destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', +}; export const oauthError = [ { @@ -31,11 +42,11 @@ export const oauthError = [ output: { authErrorCategory: 'REFRESH_TOKEN', message: - 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during ga_audience response transformation', + '{"error":{"code":401,"message":"Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during ga_audience response transformation', response: [ { error: - 'Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. during ga_audience response transformation', + '{"error":{"code":401,"message":"Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"}} during ga_audience response transformation', metadata: { attemptNum: 1, destinationId: 'default-destinationId', @@ -51,16 +62,51 @@ export const oauthError = [ statusCode: 401, }, ], - statTags: { - destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', - destinationId: 'default-destinationId', - errorCategory: 'network', - errorType: 'aborted', - feature: 'dataDelivery', - implementation: 'native', - module: 'destination', - workspaceId: 'default-workspaceId', - }, + statTags: commonStatTags, + status: 401, + }, + }, + }, + }, + }, + { + id: 'garl_oauth_scenario_with_wrong_customer_id', + name: 'google_adwords_remarketing_lists', + description: '[Proxy v1 API] :: Oauth where customer has provided wrong customerId', + successCriteria: 'The proxy should return 401 with authErrorCategory as AUTH_STATUS_INACTIVE', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload({ + headers: { ...commonHeaders, Authorization: 'Bearer wrongCustomerID' }, + params: { ...commonParams, customerId: 'wrongCustomerID' }, + JSON: validRequestPayload1, + endpoint: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + accessToken: 'wrongCustomerID', + }), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'AUTH_STATUS_INACTIVE', + message: + '{"error":{"code":401,"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED","details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"CUSTOMER_NOT_FOUND"},"message":"No customer found for the provided customer id."}],"requestId":"lvB3KOjGHsgduHjt0wCglQ"}]}} during ga_audience response transformation', + response: [ + { + error: + '{"error":{"code":401,"message":"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED","details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"authenticationError":"CUSTOMER_NOT_FOUND"},"message":"No customer found for the provided customer id."}],"requestId":"lvB3KOjGHsgduHjt0wCglQ"}]}} during ga_audience response transformation', + metadata: { ...generateMetadata(1), secret: { accessToken: 'wrongCustomerID' } }, + statusCode: 401, + }, + ], + statTags: commonStatTags, status: 401, }, }, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts index 1fd95858a1..d17f518c46 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts @@ -241,4 +241,52 @@ export const networkCallsData = [ }, }, }, + { + httpReq: { + url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', + data: { + job: { + type: 'CUSTOMER_MATCH_USER_LIST', + customerMatchUserListMetadata: { + userList: 'customers/wrongCustomerID/userLists/709078448', + consent: { + adPersonalization: 'UNSPECIFIED', + adUserData: 'UNSPECIFIED', + }, + }, + }, + }, + headers: { + Authorization: 'Bearer wrongCustomerID', + 'Content-Type': 'application/json', + 'developer-token': 'dummy-dev-token', + }, + method: 'POST', + }, + httpRes: { + status: 401, + data: { + error: { + code: 401, + message: + 'Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.', + status: 'UNAUTHENTICATED', + details: [ + { + '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', + errors: [ + { + errorCode: { + authenticationError: 'CUSTOMER_NOT_FOUND', + }, + message: 'No customer found for the provided customer id.', + }, + ], + requestId: 'lvB3KOjGHsgduHjt0wCglQ', + }, + ], + }, + }, + }, + }, ]; From 930ff9baf02d0ba72298e67610cf34034fb27e28 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Fri, 2 Aug 2024 06:38:40 +0000 Subject: [PATCH 117/201] chore(release): 1.73.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 132bff6f10..254c780be8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.73.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.73.0...v1.73.1) (2024-08-02) + + +### Bug Fixes + +* update getAuthErrCategory and update error message for garl ([#3629](https://github.com/rudderlabs/rudder-transformer/issues/3629)) ([feadfcf](https://github.com/rudderlabs/rudder-transformer/commit/feadfcf6009ccc9b972634347448ba9428696ebb)) + ## [1.73.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.72.2...v1.73.0) (2024-07-31) diff --git a/package-lock.json b/package-lock.json index 5433e52331..f6eb14f92f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.73.0", + "version": "1.73.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.73.0", + "version": "1.73.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 01f2d39470..79488e860a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.73.0", + "version": "1.73.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From b6ab2baa9ce34e74f429596fcfd62b0c3418f1cb Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:21:01 +0530 Subject: [PATCH 118/201] chore: move mailchimp from myaxios to httpget (#3462) --- src/v0/destinations/mailchimp/transform.js | 8 +- src/v0/destinations/mailchimp/utils.js | 95 ++++++++++--------- .../destinations/mailchimp/network.ts | 38 ++++++++ .../destinations/mailchimp/processor/data.ts | 2 +- 4 files changed, 93 insertions(+), 50 deletions(-) diff --git a/src/v0/destinations/mailchimp/transform.js b/src/v0/destinations/mailchimp/transform.js index 87f547c124..1f708b4f64 100644 --- a/src/v0/destinations/mailchimp/transform.js +++ b/src/v0/destinations/mailchimp/transform.js @@ -78,7 +78,7 @@ const trackResponseBuilder = (message, { Config }) => { return responseBuilderSimple(processedPayload, endpoint, Config, audienceId); }; -const identifyResponseBuilder = async (message, { Config }) => { +const identifyResponseBuilder = async (message, { Config }, metadata) => { const { datacenterId } = Config; const email = getFieldValueFromMessage(message, 'email'); if (!email) { @@ -86,13 +86,13 @@ const identifyResponseBuilder = async (message, { Config }) => { } const audienceId = getAudienceId(message, Config); const endpoint = mailChimpSubscriptionEndpoint(datacenterId, audienceId, email); - const processedPayload = await processPayload(message, Config, audienceId); + const processedPayload = await processPayload(message, Config, audienceId, metadata); return responseBuilderSimple(processedPayload, endpoint, Config, audienceId); }; const process = async (event) => { let response; - const { message, destination } = event; + const { message, destination, metadata } = event; const messageType = message.type.toLowerCase(); const destConfig = destination.Config; @@ -114,7 +114,7 @@ const process = async (event) => { switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(message, destination, metadata); break; case EventType.TRACK: response = trackResponseBuilder(message, destination); diff --git a/src/v0/destinations/mailchimp/utils.js b/src/v0/destinations/mailchimp/utils.js index f678742f2d..58f6a29445 100644 --- a/src/v0/destinations/mailchimp/utils.js +++ b/src/v0/destinations/mailchimp/utils.js @@ -1,7 +1,6 @@ const get = require('get-value'); const md5 = require('md5'); const { InstrumentationError, NetworkError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { MappedToDestinationKey } = require('../../../constants'); const { isDefinedAndNotNull, @@ -20,6 +19,7 @@ const { MERGE_CONFIG, MERGE_ADDRESS, SUBSCRIPTION_STATUS, VALID_STATUSES } = req const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); const ADDRESS_MANDATORY_FIELDS = ['addr1', 'city', 'state', 'zip']; @@ -145,7 +145,7 @@ const filterTagValue = (tag) => { * @param {*} email * @returns */ -const checkIfMailExists = async (apiKey, datacenterId, audienceId, email) => { +const checkIfMailExists = async (apiKey, datacenterId, audienceId, email, metadata) => { if (!email) { return false; } @@ -155,28 +155,31 @@ const checkIfMailExists = async (apiKey, datacenterId, audienceId, email) => { }; const url = `${mailChimpSubscriptionEndpoint(datacenterId, audienceId, email)}`; const basicAuth = Buffer.from(`apiKey:${apiKey}`).toString('base64'); - try { - const response = await myAxios.get( - url, - { - headers: { - Authorization: `Basic ${basicAuth}`, - }, - }, - { - destType: 'mailchimp', - feature: 'transformation', - endpointPath: '/lists/audienceId/members/email', - requestMethod: 'GET', - module: 'router', + + const { processedResponse, httpResponse } = await handleHttpRequest( + 'get', + url, + { + headers: { + Authorization: `Basic ${basicAuth}`, }, - ); - if (response?.data?.contact_id) { - userStatus.exists = true; - userStatus.subscriptionStatus = response.data.status; - } - } catch (error) { - logger.info(`[Mailchimp] :: Email does not exists, Error: ${error.message}`); + }, + { + metadata, + destType: 'mailchimp', + feature: 'transformation', + endpointPath: '/lists/audienceId/members/email', + requestMethod: 'GET', + module: 'router', + }, + ); + if (!httpResponse.success) { + logger.info(`[Mailchimp] :: Email does not exists, Error: ${httpResponse.response?.message}`); + return userStatus; + } + if (processedResponse.response.contact_id) { + userStatus.exists = true; + userStatus.subscriptionStatus = processedResponse.response.status; } return userStatus; }; @@ -188,33 +191,35 @@ const checkIfMailExists = async (apiKey, datacenterId, audienceId, email) => { * @param {*} audienceId * @returns */ -const checkIfDoubleOptIn = async (apiKey, datacenterId, audienceId) => { - let response; +const checkIfDoubleOptIn = async (apiKey, datacenterId, audienceId, metadata) => { const url = `${getMailChimpBaseEndpoint(datacenterId, audienceId)}`; const basicAuth = Buffer.from(`apiKey:${apiKey}`).toString('base64'); - try { - response = await myAxios.get( - url, - { - headers: { - Authorization: `Basic ${basicAuth}`, - }, - }, - { - destType: 'mailchimp', - feature: 'transformation', - endpointPath: '/lists/audienceId', - requestMethod: 'GET', - module: 'router', + const { httpResponse, processedResponse } = await handleHttpRequest( + 'get', + url, + { + headers: { + Authorization: `Basic ${basicAuth}`, }, - ); - } catch (error) { + }, + { + metadata, + destType: 'mailchimp', + feature: 'transformation', + endpointPath: '/lists/audienceId', + requestMethod: 'GET', + module: 'router', + }, + ); + if (!httpResponse.success) { + const error = httpResponse.response?.response; const status = error.status || 400; throw new NetworkError('User does not have access to the requested operation', status, { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), }); } - return !!response.data.double_optin; + + return !!processedResponse.response?.double_optin; }; /** @@ -313,7 +318,7 @@ const overrideSubscriptionStatus = (message, primaryPayload, userStatus) => { * @param {*} audienceId * @returns */ -const processPayload = async (message, Config, audienceId) => { +const processPayload = async (message, Config, audienceId, metadata) => { let primaryPayload; let email; const { apiKey, datacenterId, enableMergeFields } = Config; @@ -351,10 +356,10 @@ const processPayload = async (message, Config, audienceId) => { merge_fields: mergeAdditionalTraitsFields(traits, mergedFieldPayload), }; } - const userStatus = await checkIfMailExists(apiKey, datacenterId, audienceId, email); + const userStatus = await checkIfMailExists(apiKey, datacenterId, audienceId, email, metadata); if (!userStatus.exists) { - const isDoubleOptin = await checkIfDoubleOptIn(apiKey, datacenterId, audienceId); + const isDoubleOptin = await checkIfDoubleOptIn(apiKey, datacenterId, audienceId, metadata); primaryPayload.status = isDoubleOptin ? SUBSCRIPTION_STATUS.pending : SUBSCRIPTION_STATUS.subscribed; diff --git a/test/integrations/destinations/mailchimp/network.ts b/test/integrations/destinations/mailchimp/network.ts index b036bf566c..a29712ce9a 100644 --- a/test/integrations/destinations/mailchimp/network.ts +++ b/test/integrations/destinations/mailchimp/network.ts @@ -77,4 +77,42 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + url: 'https://usXX.api.mailchimp.com/3.0/lists/aud111/members/5587981bdf09024971ff9ddfb2590a6d', + method: 'GET', + headers: { + Authorization: 'Basic YXBpS2V5OmFwaUtleS1kdW1teUFwaUtleQ==', + }, + }, + httpRes: { + data: { + type: 'https://mailchimp.com/developer/marketing/docs/errors/', + title: 'API Key Invalid', + status: 401, + detail: "Your API key may be invalid, or you've attempted to access the wrong datacenter.", + instance: 'd2e09e5b-7c28-8585-68db-8feaf57ee0f7', + }, + status: 401, + }, + }, + { + httpReq: { + url: 'https://usXX.api.mailchimp.com/3.0/lists/aud111', + method: 'GET', + headers: { + Authorization: 'Basic YXBpS2V5OmFwaUtleS1kdW1teUFwaUtleQ==', + }, + }, + httpRes: { + data: { + type: 'https://mailchimp.com/developer/marketing/docs/errors/', + title: 'API Key Invalid', + status: 401, + detail: "Your API key may be invalid, or you've attempted to access the wrong datacenter.", + instance: 'd2e09e5b-7c28-8585-68db-8feaf57ee0f7', + }, + status: 401, + }, + }, ]; diff --git a/test/integrations/destinations/mailchimp/processor/data.ts b/test/integrations/destinations/mailchimp/processor/data.ts index a0ee5de3d3..bf3cb6ad06 100644 --- a/test/integrations/destinations/mailchimp/processor/data.ts +++ b/test/integrations/destinations/mailchimp/processor/data.ts @@ -345,7 +345,7 @@ export const data = [ implementation: 'native', module: 'destination', }, - statusCode: 400, + statusCode: 401, }, ], }, From 98e9b009026128b083ae7f11c45291ba1c1fb063 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:36:40 +0530 Subject: [PATCH 119/201] chore: move gainsight_px from myaxios to httpget,put and post (#3464) --- src/v0/destinations/gainsight_px/transform.js | 28 +-- src/v0/destinations/gainsight_px/util.js | 179 +++++++----------- 2 files changed, 80 insertions(+), 127 deletions(-) diff --git a/src/v0/destinations/gainsight_px/transform.js b/src/v0/destinations/gainsight_px/transform.js index a63be08c80..0911b76b6c 100644 --- a/src/v0/destinations/gainsight_px/transform.js +++ b/src/v0/destinations/gainsight_px/transform.js @@ -39,7 +39,7 @@ const { JSON_MIME_TYPE } = require('../../util/constant'); /** * Create/Update a User with user attributes */ -const identifyResponseBuilder = async (message, { Config }) => { +const identifyResponseBuilder = async (message, { Config }, metadata) => { const userId = getFieldValueFromMessage(message, 'userId'); if (!userId) { throw new InstrumentationError('userId or anonymousId is required for identify'); @@ -51,7 +51,7 @@ const identifyResponseBuilder = async (message, { Config }) => { 'Content-Type': JSON_MIME_TYPE, }; - const { success: isUserPresent } = await objectExists(userId, Config, 'user'); + const { success: isUserPresent } = await objectExists(userId, Config, 'user', metadata); let payload = constructPayload(message, identifyMapping); const name = getValueFromMessage(message, ['traits.name', 'context.traits.name']); @@ -110,7 +110,7 @@ const identifyResponseBuilder = async (message, { Config }) => { * Pros: Will make atleast 2 API call and at most 3 API calls * Cons: There might be some unwanted accounts */ -const newGroupResponseBuilder = async (message, { Config }) => { +const newGroupResponseBuilder = async (message, { Config }, metadata) => { const userId = getFieldValueFromMessage(message, 'userId'); if (!userId) { throw new InstrumentationError('userId or anonymousId is required for group'); @@ -140,12 +140,12 @@ const newGroupResponseBuilder = async (message, { Config }) => { payload = removeUndefinedAndNullValues(payload); // update account - const { success: updateSuccess, err } = await updateAccount(groupId, payload, Config); + const { success: updateSuccess, err } = await updateAccount(groupId, payload, Config, metadata); // will not throw error if it is due to unavailable accounts if (!updateSuccess && err === null) { // create account payload.id = groupId; - const { success: createSuccess, error } = await createAccount(payload, Config); + const { success: createSuccess, error } = await createAccount(payload, Config, metadata); if (!createSuccess) { throw new ConfigurationError(`failed to create account for group: ${error}`); } @@ -172,13 +172,13 @@ const newGroupResponseBuilder = async (message, { Config }) => { /** * Associates a User with an Account. */ -const groupResponseBuilder = async (message, { Config }) => { +const groupResponseBuilder = async (message, { Config }, metadata) => { const userId = getFieldValueFromMessage(message, 'userId'); if (!userId) { throw new InstrumentationError('userId or anonymousId is required for group'); } - const { success: isPresent, err: e } = await objectExists(userId, Config, 'user'); + const { success: isPresent, err: e } = await objectExists(userId, Config, 'user', metadata); if (!isPresent) { throw new InstrumentationError(`aborting group call: ${e}`); } @@ -188,7 +188,7 @@ const groupResponseBuilder = async (message, { Config }) => { throw new InstrumentationError('groupId is required for group'); } - const { success: accountIsPresent } = await objectExists(groupId, Config, 'account'); + const { success: accountIsPresent } = await objectExists(groupId, Config, 'account', metadata); let payload = constructPayload(message, groupMapping); let customAttributes = {}; @@ -210,14 +210,14 @@ const groupResponseBuilder = async (message, { Config }) => { if (accountIsPresent) { // update account - const { success: updateSuccess, err } = await updateAccount(groupId, payload, Config); + const { success: updateSuccess, err } = await updateAccount(groupId, payload, Config, metadata); if (!updateSuccess) { throw new ConfigurationError(`failed to update account for group: ${err}`); } } else { // create account payload.id = groupId; - const { success: createSuccess, err } = await createAccount(payload, Config); + const { success: createSuccess, err } = await createAccount(payload, Config, metadata); if (!createSuccess) { throw new ConfigurationError(`failed to create account for group: ${err}`); } @@ -279,7 +279,7 @@ const trackResponseBuilder = (message, { Config }) => { * Processing Single event */ const process = async (event) => { - const { message, destination } = event; + const { message, destination, metadata } = event; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } @@ -301,16 +301,16 @@ const process = async (event) => { let response; switch (messageType) { case EventType.IDENTIFY: - response = await identifyResponseBuilder(message, destination); + response = await identifyResponseBuilder(message, destination, metadata); break; case EventType.TRACK: response = trackResponseBuilder(message, destination); break; case EventType.GROUP: if (limitAPIForGroup) { - response = await newGroupResponseBuilder(message, destination); + response = await newGroupResponseBuilder(message, destination, metadata); } else { - response = await groupResponseBuilder(message, destination); + response = await groupResponseBuilder(message, destination, metadata); } break; default: diff --git a/src/v0/destinations/gainsight_px/util.js b/src/v0/destinations/gainsight_px/util.js index 83d23566dd..7300189297 100644 --- a/src/v0/destinations/gainsight_px/util.js +++ b/src/v0/destinations/gainsight_px/util.js @@ -1,9 +1,9 @@ const { NetworkError } = require('@rudderstack/integrations-lib'); -const myAxios = require('../../../util/myAxios'); const { ENDPOINTS } = require('./config'); const tags = require('../../util/tags'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const { handleHttpRequest } = require('../../../adapters/network'); const handleErrorResponse = (error, customErrMessage, expectedErrStatus, defaultStatus = 400) => { let destResp; @@ -37,133 +37,86 @@ const handleErrorResponse = (error, customErrMessage, expectedErrStatus, default * @param {*} objectType * @returns */ -const objectExists = async (id, Config, objectType) => { +const objectExists = async (id, Config, objectType, metadata) => { let url = `${ENDPOINTS.USERS_ENDPOINT}/${id}`; - let err = 'invalid response while searching user'; if (objectType === 'account') { url = `${ENDPOINTS.ACCOUNTS_ENDPOINT}/${id}`; - err = 'invalid response while searching account'; } - - let response; - try { - response = await myAxios.get( - url, - { - headers: { - 'X-APTRINSIC-API-KEY': Config.apiKey, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'gainsight_px', - feature: 'transformation', - requestMethod: 'GET', - endpointPath: '/accounts/accountId', - module: 'router', - }, - ); - if (response && response.status === 200) { - return { success: true, err: null }; - } - const defStatus = 400; - const status = response ? response.status || defStatus : defStatus; - throw new NetworkError( - err, - status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + const { httpResponse: res } = await handleHttpRequest( + 'get', + url, + { + headers: { + 'X-APTRINSIC-API-KEY': Config.apiKey, + 'Content-Type': JSON_MIME_TYPE, }, - response, - ); - } catch (error) { - return handleErrorResponse(error, `error while fetching ${objectType}`, 404); + }, + { + metadata, + destType: 'gainsight_px', + feature: 'transformation', + requestMethod: 'GET', + endpointPath: '/accounts/accountId', + module: 'router', + }, + ); + if (res.success && res.response && res.response.status === 200) { + return { success: true, err: null }; } + return handleErrorResponse(res.response, `error while fetching ${objectType}`, 404); }; -const createAccount = async (payload, Config) => { - let response; - try { - response = await myAxios.post( - ENDPOINTS.ACCOUNTS_ENDPOINT, - payload, - { - headers: { - 'X-APTRINSIC-API-KEY': Config.apiKey, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'gainsight_px', - feature: 'transformation', - requestMethod: 'POST', - endpointPath: '/accounts', - module: 'router', - }, - ); - if (response && response.status === 201) { - return { success: true, err: null }; - } - - const defStatus = 400; - const status = response ? response.status || defStatus : defStatus; - throw new NetworkError( - 'invalid response while creating account', - status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), +const createAccount = async (payload, Config, metadata) => { + const { httpResponse: res } = await handleHttpRequest( + 'post', + ENDPOINTS.ACCOUNTS_ENDPOINT, + payload, + { + headers: { + 'X-APTRINSIC-API-KEY': Config.apiKey, + 'Content-Type': JSON_MIME_TYPE, }, - response, - ); - } catch (error) { - return handleErrorResponse(error, 'error while creating account', 400); + }, + { + metadata, + destType: 'gainsight_px', + feature: 'transformation', + requestMethod: 'POST', + endpointPath: '/accounts', + module: 'router', + }, + ); + if (res.success && res.response.status === 201) { + return { success: true, err: null }; } + return handleErrorResponse(res.response, 'error while creating account', 400); }; -const updateAccount = async (accountId, payload, Config) => { - let response; - try { - response = await myAxios.put( - `${ENDPOINTS.ACCOUNTS_ENDPOINT}/${accountId}`, - payload, - { - headers: { - 'X-APTRINSIC-API-KEY': Config.apiKey, - 'Content-Type': JSON_MIME_TYPE, - }, - }, - { - destType: 'gainsight_px', - feature: 'transformation', - requestMethod: 'PUT', - endpointPath: '/accounts/accountId', - module: 'router', - }, - ); - if (response && response.status === 204) { - return { success: true, err: null }; - } - const defStatus = 400; - const status = response ? response.status || defStatus : defStatus; - throw new NetworkError( - 'invalid response while updating account', - status, - { - [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), +const updateAccount = async (accountId, payload, Config, metadata) => { + const { httpResponse: res } = await handleHttpRequest( + 'put', + `${ENDPOINTS.ACCOUNTS_ENDPOINT}/${accountId}`, + payload, + { + headers: { + 'X-APTRINSIC-API-KEY': Config.apiKey, + 'Content-Type': JSON_MIME_TYPE, }, - response, - ); - } catch (error) { - // it will only occur if the user does not exist - if ( - error.response?.status === 404 && - error.response?.data?.externalapierror?.status === 'NOT_FOUND' - ) { - return { success: false, err: null }; - } - return handleErrorResponse(error, 'error while updating account', 400); + }, + { + metadata, + destType: 'gainsight_px', + feature: 'transformation', + requestMethod: 'PUT', + endpointPath: '/accounts/accountId', + module: 'router', + }, + ); + if (res.success && res.response.status === 204) { + return { success: true, err: null }; } + return handleErrorResponse(res.response, 'error while updating account', 400); }; /** From 0d3c0426571f14e88b5b8a703065935713ce8198 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:43:11 +0530 Subject: [PATCH 120/201] fix: shopify: incorporate new shopify cart token format (#3626) * fix: shopify: incorporate new shopify cart token format * chore: update test cases * chore: address comments * chore: address comments+1 * fix: cartToken fetching from input event --- src/util/prometheus.js | 2 +- src/util/redis/testData/shopify_source.json | 4 ++-- src/v0/sources/shopify/transform.js | 21 ++++++++++++++++++--- src/v0/sources/shopify/util.js | 10 ++++++---- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/util/prometheus.js b/src/util/prometheus.js index cddeb80f31..27747faf4b 100644 --- a/src/util/prometheus.js +++ b/src/util/prometheus.js @@ -431,7 +431,7 @@ class Prometheus { name: 'shopify_redis_no_val', help: 'shopify_redis_no_val', type: 'counter', - labelNames: ['writeKey', 'source'], + labelNames: ['writeKey', 'source', 'event'], }, { name: 'invalid_shopify_event', diff --git a/src/util/redis/testData/shopify_source.json b/src/util/redis/testData/shopify_source.json index 2120475baf..9c09de4643 100644 --- a/src/util/redis/testData/shopify_source.json +++ b/src/util/redis/testData/shopify_source.json @@ -53,7 +53,7 @@ "input": { "event": "rudderSessionIdentifier", "sessionId": "session_id", - "cartToken": "shopify_test_set_map_fail", + "cartToken": "shopify_test_set_map_fail?key=abcd13234", "query_parameters": { "writeKey": ["Shopify Write Key"] }, @@ -1298,7 +1298,7 @@ "input": { "event": "rudderIdentifier", "anonymousId": "b9993cc5-9e60-4e69-be0e-4e38c228314b", - "cartToken": "shopify_test1", + "cartToken": "shopify_test1?key=abcd1234", "query_parameters": { "writeKey": ["Shopify Write Key"] }, diff --git a/src/v0/sources/shopify/transform.js b/src/v0/sources/shopify/transform.js index bc2135d215..b55fc61327 100644 --- a/src/v0/sources/shopify/transform.js +++ b/src/v0/sources/shopify/transform.js @@ -144,8 +144,13 @@ const processEvent = async (inputEvent, metricMetadata) => { break; case 'carts_update': if (useRedisDatabase) { - redisData = await getDataFromRedis(event.id || event.token, metricMetadata); - const isValidEvent = await checkAndUpdateCartItems(inputEvent, redisData, metricMetadata); + redisData = await getDataFromRedis(event.id || event.token, metricMetadata, 'Cart Update'); + const isValidEvent = await checkAndUpdateCartItems( + inputEvent, + redisData, + metricMetadata, + shopifyTopic, + ); if (!isValidEvent) { return NO_OPERATION_SUCCESS; } @@ -208,11 +213,20 @@ const isIdentifierEvent = (event) => ['rudderIdentifier', 'rudderSessionIdentifier'].includes(event?.event); const processIdentifierEvent = async (event, metricMetadata) => { if (useRedisDatabase) { + const cartToken = + typeof event.cartToken === 'string' ? event.cartToken.split('?')[0] : event.cartToken; + logger.info(`{{SHOPIFY::}} writeKey: ${metricMetadata.writeKey}, cartToken: ${cartToken}`, { + type: 'set', + source: metricMetadata.source, + writeKey: metricMetadata.writeKey, + }); let value; let field; if (event.event === 'rudderIdentifier') { field = 'anonymousId'; + // eslint-disable-next-line unicorn/consistent-destructuring const lineItemshash = getHashLineItems(event.cart); + // eslint-disable-next-line unicorn/consistent-destructuring value = ['anonymousId', event.anonymousId, 'itemsHash', lineItemshash]; stats.increment('shopify_redis_calls', { type: 'set', @@ -227,6 +241,7 @@ const processIdentifierEvent = async (event, metricMetadata) => { */ } else { field = 'sessionId'; + // eslint-disable-next-line unicorn/consistent-destructuring value = ['sessionId', event.sessionId]; /* cart_token: { anonymousId:'anon_id1', @@ -242,7 +257,7 @@ const processIdentifierEvent = async (event, metricMetadata) => { source: metricMetadata.source, writeKey: metricMetadata.writeKey, }); - await RedisDB.setVal(`${event.cartToken}`, value); + await RedisDB.setVal(`${cartToken}`, value); } catch (e) { logger.debug(`{{SHOPIFY::}} cartToken map set call Failed due redis error ${e}`, { type: 'set', diff --git a/src/v0/sources/shopify/util.js b/src/v0/sources/shopify/util.js index 6aea0d19bd..6d13d13bdf 100644 --- a/src/v0/sources/shopify/util.js +++ b/src/v0/sources/shopify/util.js @@ -24,7 +24,7 @@ const { } = require('./config'); const logger = require('../../../logger'); -const getDataFromRedis = async (key, metricMetadata) => { +const getDataFromRedis = async (key, metricMetadata, event) => { try { stats.increment('shopify_redis_calls', { type: 'get', @@ -40,6 +40,7 @@ const getDataFromRedis = async (key, metricMetadata) => { stats.increment('shopify_redis_no_val', { writeKey: metricMetadata.writeKey, source: metricMetadata.source, + event, }); } return redisData; @@ -187,8 +188,9 @@ const getAnonymousIdAndSessionId = async (message, metricMetadata, redisData = n } if (useRedisDatabase) { if (!isDefinedAndNotNull(redisData)) { + const { event } = message; // eslint-disable-next-line no-param-reassign - redisData = await getDataFromRedis(cartToken, metricMetadata); + redisData = await getDataFromRedis(cartToken, metricMetadata, event); } anonymousId = redisData?.anonymousId; sessionId = redisData?.sessionId; @@ -243,11 +245,11 @@ const updateCartItemsInRedis = async (cartToken, newCartItemsHash, metricMetadat * @param {*} metricMetadata * @returns boolean */ -const checkAndUpdateCartItems = async (inputEvent, redisData, metricMetadata) => { +const checkAndUpdateCartItems = async (inputEvent, redisData, metricMetadata, shopifyTopic) => { const cartToken = inputEvent.token || inputEvent.id; if (!isDefinedAndNotNull(redisData)) { // eslint-disable-next-line no-param-reassign - redisData = await getDataFromRedis(cartToken, metricMetadata); + redisData = await getDataFromRedis(cartToken, metricMetadata, SHOPIFY_TRACK_MAP[shopifyTopic]); } const itemsHash = redisData?.itemsHash; if (isDefinedAndNotNull(itemsHash)) { From 7d3283117cd0d7ceeed70f501d61f1610094ea9e Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 5 Aug 2024 07:34:38 +0000 Subject: [PATCH 121/201] chore(release): 1.74.0 --- CHANGELOG.md | 20 ++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 254c780be8..b261d4d4b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.74.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.73.1...v1.74.0) (2024-08-05) + + +### Features + +* detach user and company in intercom identify call ([#3580](https://github.com/rudderlabs/rudder-transformer/issues/3580)) ([286c44a](https://github.com/rudderlabs/rudder-transformer/commit/286c44a47e8451486bde281b8c938df59945cdfc)) +* onboard new api for klaviyo 15-06-2024 ([#3574](https://github.com/rudderlabs/rudder-transformer/issues/3574)) ([44baab9](https://github.com/rudderlabs/rudder-transformer/commit/44baab9298d171efe1209b3ec360d15e84a4190c)) +* supporting device token type using integrations object ([#3620](https://github.com/rudderlabs/rudder-transformer/issues/3620)) ([14e776e](https://github.com/rudderlabs/rudder-transformer/commit/14e776e659b745c814d31cd049fc4051c1e6735d)) +* updated examples for swagger ([#3526](https://github.com/rudderlabs/rudder-transformer/issues/3526)) ([5e22fa0](https://github.com/rudderlabs/rudder-transformer/commit/5e22fa0555b98e83ca1b11f16e87f367d1f85ca8)) + + +### Bug Fixes + +* customerio page undefined name ([#3613](https://github.com/rudderlabs/rudder-transformer/issues/3613)) ([adc2a4a](https://github.com/rudderlabs/rudder-transformer/commit/adc2a4a6650c9d9add26be51999f5b3078c59f15)) +* facebook conversion version upgrade ([#3607](https://github.com/rudderlabs/rudder-transformer/issues/3607)) ([9d06546](https://github.com/rudderlabs/rudder-transformer/commit/9d065467f376a047d1cebb095de0b33be6e32206)) +* fb custom audience version upgrade from v18 to v20 ([#3604](https://github.com/rudderlabs/rudder-transformer/issues/3604)) ([c2d7555](https://github.com/rudderlabs/rudder-transformer/commit/c2d7555dcea5e476f276eec5926d392f58dbd7fa)) +* fb pixel and fb app events version upgrade ([#3606](https://github.com/rudderlabs/rudder-transformer/issues/3606)) ([7caf476](https://github.com/rudderlabs/rudder-transformer/commit/7caf4762be2c527725a2bdfb090a626d40723c36)) +* rakuten for amount list ([#3612](https://github.com/rudderlabs/rudder-transformer/issues/3612)) ([2fb7e6b](https://github.com/rudderlabs/rudder-transformer/commit/2fb7e6b4bc2b7524f6fa86a54596f7c6550fa51a)) +* shopify: incorporate new shopify cart token format ([#3626](https://github.com/rudderlabs/rudder-transformer/issues/3626)) ([0d3c042](https://github.com/rudderlabs/rudder-transformer/commit/0d3c0426571f14e88b5b8a703065935713ce8198)) + ### [1.73.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.73.0...v1.73.1) (2024-08-02) diff --git a/package-lock.json b/package-lock.json index a7738f995e..4e7201190e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.73.1", + "version": "1.74.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.73.1", + "version": "1.74.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 536fcf48ca..93aeed71d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.73.1", + "version": "1.74.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 413e9ce56f8f6569bbeb188bff4f43d400ea71b1 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Mon, 5 Aug 2024 15:10:07 +0530 Subject: [PATCH 122/201] fix: reserved properties for braze (#3573) --- src/v0/destinations/braze/braze.util.test.js | 69 ++++++++++++++++++- src/v0/destinations/braze/transform.js | 19 +---- src/v0/destinations/braze/util.js | 11 +++ .../destinations/braze/processor/data.ts | 9 +++ 4 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/v0/destinations/braze/braze.util.test.js b/src/v0/destinations/braze/braze.util.test.js index f2726c3283..84171e0cba 100644 --- a/src/v0/destinations/braze/braze.util.test.js +++ b/src/v0/destinations/braze/braze.util.test.js @@ -1,6 +1,12 @@ const _ = require('lodash'); const { handleHttpRequest } = require('../../../adapters/network'); -const { BrazeDedupUtility, addAppId, getPurchaseObjs, setAliasObject } = require('./util'); +const { + BrazeDedupUtility, + addAppId, + getPurchaseObjs, + setAliasObject, + handleReservedProperties, +} = require('./util'); const { processBatch } = require('./util'); const { removeUndefinedAndNullValues, @@ -1540,3 +1546,64 @@ describe('setAliasObject function', () => { }); }); }); + +describe('handleReservedProperties', () => { + // Removes 'time' and 'event_name' keys from the input object + it('should remove "time" and "event_name" keys when they are present in the input object', () => { + const props = { time: '2023-10-01T00:00:00Z', event_name: 'test_event', other_key: 'value' }; + const result = handleReservedProperties(props); + expect(result).toEqual({ other_key: 'value' }); + }); + + // Input object is empty + it('should return an empty object when the input object is empty', () => { + const props = {}; + const result = handleReservedProperties(props); + expect(result).toEqual({}); + }); + + // Works correctly with an object that has no reserved keys + it('should remove reserved keys when present in the input object', () => { + const props = { time_stamp: '2023-10-01T00:00:00Z', event: 'test_event', other_key: 'value' }; + const result = handleReservedProperties(props); + expect(result).toEqual({ + time_stamp: '2023-10-01T00:00:00Z', + event: 'test_event', + other_key: 'value', + }); + }); + + // Input object is null or undefined + it('should return an empty object when input object is null', () => { + const props = null; + const result = handleReservedProperties(props); + expect(result).toEqual({}); + }); + + // Handles non-object inputs gracefully + it('should return an empty object when a non-object input is provided', () => { + const props = 'not an object'; + try { + handleReservedProperties(props); + } catch (e) { + expect(e.message).toBe('Invalid event properties'); + } + }); + + // Input object has only reserved keys + it('should remove "time" and "event_name" keys when they are present in the input object', () => { + const props = { time: '2023-10-01T00:00:00Z', event_name: 'test_event', other_key: 'value' }; + const result = handleReservedProperties(props); + expect(result).toEqual({ other_key: 'value' }); + }); + + // Works with objects having special characters in keys + it('should not remove special characters keys when they are present in the input object', () => { + const props = { 'special!@#$%^&*()_+-={}[]|\\;:\'",.<>?/`~': 'value', other_key: 'value' }; + const result = handleReservedProperties(props); + expect(result).toEqual({ + other_key: 'value', + 'special!@#$%^&*()_+-={}[]|\\;:\'",.<>?/`~': 'value', + }); + }); +}); diff --git a/src/v0/destinations/braze/transform.js b/src/v0/destinations/braze/transform.js index 155f32c145..14ae424aeb 100644 --- a/src/v0/destinations/braze/transform.js +++ b/src/v0/destinations/braze/transform.js @@ -15,6 +15,7 @@ const { setAliasObject, collectStatsForAliasFailure, collectStatsForAliasMissConfigurations, + handleReservedProperties, } = require('./util'); const tags = require('../../util/tags'); const { EventType, MappedToDestinationKey } = require('../../../constants'); @@ -280,17 +281,6 @@ function processTrackWithUserAttributes( throw new InstrumentationError('No attributes found to update the user profile'); } -function handleReservedProperties(props) { - // remove reserved keys from custom event properties - // https://www.appboy.com/documentation/Platform_Wide/#reserved-keys - const reserved = ['time', 'product_id', 'quantity', 'event_name', 'price', 'currency']; - - reserved.forEach((element) => { - delete props[element]; - }); - return props; -} - function addMandatoryEventProperties(payload, message) { payload.name = message.event; payload.time = message.timestamp; @@ -332,13 +322,6 @@ function processTrackEvent(messageType, message, destination, mappingJson, proce eventName.toLowerCase() === 'order completed' ) { const purchaseObjs = getPurchaseObjs(message, destination.Config); - - // del used properties - delete properties.products; - delete properties.currency; - - const payload = { properties }; - setExternalIdOrAliasObject(payload, message); return buildResponse( message, destination, diff --git a/src/v0/destinations/braze/util.js b/src/v0/destinations/braze/util.js index 00ef308fe9..dc7ed69a16 100644 --- a/src/v0/destinations/braze/util.js +++ b/src/v0/destinations/braze/util.js @@ -707,6 +707,16 @@ const collectStatsForAliasMissConfigurations = (destinationId) => { stats.increment('braze_alias_missconfigured_count', { destination_id: destinationId }); }; +function handleReservedProperties(props) { + if (typeof props !== 'object') { + throw new InstrumentationError('Invalid event properties'); + } + // remove reserved keys from custom event properties + const reserved = ['time', 'event_name']; + + return _.omit(props, reserved); +} + module.exports = { BrazeDedupUtility, CustomAttributeOperationUtil, @@ -721,4 +731,5 @@ module.exports = { addMandatoryPurchaseProperties, collectStatsForAliasFailure, collectStatsForAliasMissConfigurations, + handleReservedProperties, }; diff --git a/test/integrations/destinations/braze/processor/data.ts b/test/integrations/destinations/braze/processor/data.ts index 644bebace1..38e0e47dd0 100644 --- a/test/integrations/destinations/braze/processor/data.ts +++ b/test/integrations/destinations/braze/processor/data.ts @@ -309,6 +309,7 @@ export const data = [ name: 'braze revenue test', time: '2020-01-24T11:59:02.403+05:30', properties: { + currency: 'USD', revenue: 50, }, external_id: 'mickeyMouse', @@ -437,6 +438,7 @@ export const data = [ time: '2020-01-24T11:59:02.403+05:30', properties: { revenue: 50, + currency: 'USD', }, external_id: 'mickeyMouse', }, @@ -772,6 +774,7 @@ export const data = [ properties: { currency: 'USD', revenue: 50, + event_name: 'braze revenue test 2', }, receivedAt: '2020-01-24T11:59:02.403+05:30', request_ip: '[::1]:53710', @@ -823,6 +826,7 @@ export const data = [ time: '2020-01-24T11:59:02.403+05:30', properties: { revenue: 50, + currency: 'USD', }, _update_existing_only: false, user_alias: { @@ -993,6 +997,7 @@ export const data = [ affiliation: 'Google Store', checkout_id: 'fksdjfsdjfisjf9sdfjsd9f', coupon: 'hasbros', + currency: 'USD', discount: 2.5, order_id: '50314b8e9bcf000000000000', products: [ @@ -1976,6 +1981,7 @@ export const data = [ properties: { mergeObjectsUpdateOperation: false, revenue: 50, + currency: 'USD', }, external_id: 'finalUserTestCA', }, @@ -2192,6 +2198,7 @@ export const data = [ properties: { mergeObjectsUpdateOperation: false, revenue: 50, + currency: 'USD', }, external_id: 'finalUserTestCA', }, @@ -3398,6 +3405,7 @@ export const data = [ time: '2020-01-24T11:59:02.403+05:30', properties: { revenue: 50, + currency: 'USD', }, external_id: 'mickeyMouse', app_id: '123', @@ -3985,6 +3993,7 @@ export const data = [ subtotal: 22.5, tax: 2, total: 27.5, + currency: 'USD', }, _update_existing_only: false, user_alias: { From cb672628b312f20ea0fcc27a60ec8ab5692f8b06 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Mon, 5 Aug 2024 18:43:51 +0530 Subject: [PATCH 123/201] fix: add alias support in case alias details are present (#3579) --- src/v0/destinations/braze/transform.js | 9 +++++++-- test/integrations/destinations/braze/processor/data.ts | 1 - 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/v0/destinations/braze/transform.js b/src/v0/destinations/braze/transform.js index 14ae424aeb..09fb0205c5 100644 --- a/src/v0/destinations/braze/transform.js +++ b/src/v0/destinations/braze/transform.js @@ -30,6 +30,7 @@ const { simpleProcessRouterDest, isNewStatusCodesAccepted, getDestinationExternalID, + getIntegrationsObj, } = require('../../util'); const { ConfigCategory, @@ -498,10 +499,14 @@ async function process(event, processParams = { userStore: new Map() }, reqMetad if (mappedToDestination) { adduserIdFromExternalId(message); } + + const integrationsObj = getIntegrationsObj(message, 'BRAZE'); + const isAliasPresent = isDefinedAndNotNull(integrationsObj?.alias); + const brazeExternalID = getDestinationExternalID(message, 'brazeExternalId') || message.userId; - if (message.anonymousId && brazeExternalID) { - await processIdentify(event); + if ((message.anonymousId || isAliasPresent) && brazeExternalID) { + await processIdentify({ message, destination }); } else { collectStatsForAliasMissConfigurations(destination.ID); } diff --git a/test/integrations/destinations/braze/processor/data.ts b/test/integrations/destinations/braze/processor/data.ts index 38e0e47dd0..240206791e 100644 --- a/test/integrations/destinations/braze/processor/data.ts +++ b/test/integrations/destinations/braze/processor/data.ts @@ -4045,7 +4045,6 @@ export const data = [ Transformations: [], }, message: { - anonymousId: 'e6ab2c5e-2cda-44a9-a962-e2f67df78bca', channel: 'web', context: { traits: { From 20821ea734e1bd05f04667e8b6d34977ac9df27e Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Tue, 6 Aug 2024 01:03:59 +0530 Subject: [PATCH 124/201] fix: type null (#3637) --- src/v0/util/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 3916dec3f4..7e9b4f0c3e 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -1168,7 +1168,7 @@ const getDestinationExternalIDInfoForRetl = (message, destination) => { if (externalIdArray) { externalIdArray.forEach((extIdObj) => { const { type, id } = extIdObj; - if (type.includes(`${destination}-`)) { + if (type && type.includes(`${destination}-`)) { destinationExternalId = id; objectType = type.replace(`${destination}-`, ''); identifierType = extIdObj.identifierType; @@ -1195,7 +1195,7 @@ const getDestinationExternalIDObjectForRetl = (message, destination) => { // some stops the execution when the element is found externalIdArray.some((extIdObj) => { const { type } = extIdObj; - if (type.includes(`${destination}-`)) { + if (type && type.includes(`${destination}-`)) { obj = extIdObj; return true; } From 9d595ebb9b459393d9cde9571bdf4d06c76e960d Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Tue, 6 Aug 2024 15:42:38 +0530 Subject: [PATCH 125/201] chore: removed files (#3639) --- .../data_scenarios/cdk_v1/failure.json | 164 -------------- .../data_scenarios/cdk_v1/success.json | 208 ------------------ 2 files changed, 372 deletions(-) delete mode 100644 test/apitests/data_scenarios/cdk_v1/failure.json delete mode 100644 test/apitests/data_scenarios/cdk_v1/success.json diff --git a/test/apitests/data_scenarios/cdk_v1/failure.json b/test/apitests/data_scenarios/cdk_v1/failure.json deleted file mode 100644 index d2ec384efa..0000000000 --- a/test/apitests/data_scenarios/cdk_v1/failure.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "input": [ - { - "message": { - "anonymousId": "2073230", - "channel": "offline", - "context": { - "traits": { - "email": "test.c97@gmail.com", - "firstName": "test", - "gender": "Male", - "lastName": "Rudderlabs", - "phone": "+919876543210" - } - }, - "event": "Product Added", - "messageId": "2af9f397-eef2-407f-bd95-e61867c0bfd0", - "originalTimestamp": "2022-12-30T21:12:23.295+05:30", - "properties": { - "brand": "Gamepro", - "category": "Games", - "coupon": "DISC21", - "image_url": "https://www.website.com/product/path.png", - "name": "Game", - "position": 1, - "price": 13.49, - "product_id": "123", - "quantity": 11, - "sku": "F15", - "url": "https://www.website.com/product/path", - "variant": "111" - }, - "receivedAt": "2022-12-30T21:12:19.720+05:30", - "request_ip": "[::1]", - "rudderId": "c6bac0d9-5ed4-45d8-a937-bf9e62060b78", - "sentAt": "2022-12-30T21:12:23.295+05:30", - "timestamp": "2022-12-30T21:12:19.719+05:30", - "type": "track", - "userId": "2564871" - }, - "metadata": { - "sourceId": "27O0bmEEx3GgfmEhZHUcPwJQVWC", - "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "namespace": "", - "instanceId": "1", - "sourceType": "HTTP", - "sourceCategory": "", - "trackingPlanId": "", - "trackingPlanVersion": 0, - "sourceTpConfig": null, - "mergedTpConfig": null, - "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "jobRunId": "", - "jobId": 1, - "sourceBatchId": "", - "sourceJobId": "", - "sourceJobRunId": "", - "sourceTaskId": "", - "sourceTaskRunId": "", - "recordId": null, - "destinationType": "ZAPIER", - "messageId": "2af9f397-eef2-407f-bd95-e61867c0bfd0", - "oauthAccessToken": "", - "messageIds": null, - "rudderId": "<<>>2073230<<>>2564871", - "receivedAt": "2022-12-30T21:12:19.720+05:30", - "eventName": "Product Added", - "eventType": "track", - "sourceDefinitionId": "1b6gJdqOPOCadT3cddw8eidV591", - "destinationDefinitionId": "" - }, - "destination": { - "ID": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "Name": "Zapier-dev", - "DestinationDefinition": { - "ID": "2EAFTAOU0JrG8tHwYB5ZlV7yzo6", - "Name": "ZAPIER", - "DisplayName": "Zapier", - "Config": { - "cdkV2Enabled": true, - "destConfig": { - "defaultConfig": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"] - }, - "excludeKeys": [], - "includeKeys": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"], - "saveDestinationResponse": true, - "secretKeys": ["zapUrl"], - "supportedMessageTypes": ["track", "page", "screen"], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "transformAt": "processor", - "transformAtV1": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "zapUrl": "https://hooks.zapier.com/hooks/catch/14157843/b7l4oz2/" - }, - "Enabled": true, - "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2JdjA2o6s9AfokHcz6bX0SPCdJZ" - }, - "libraries": null - } - ], - "output": [ - { - "metadata": { - "sourceId": "27O0bmEEx3GgfmEhZHUcPwJQVWC", - "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "namespace": "", - "instanceId": "1", - "sourceType": "HTTP", - "sourceCategory": "", - "trackingPlanId": "", - "trackingPlanVersion": 0, - "sourceTpConfig": null, - "mergedTpConfig": null, - "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "jobRunId": "", - "jobId": 1, - "sourceBatchId": "", - "sourceJobId": "", - "sourceJobRunId": "", - "sourceTaskId": "", - "sourceTaskRunId": "", - "recordId": null, - "destinationType": "ZAPIER", - "messageId": "2af9f397-eef2-407f-bd95-e61867c0bfd0", - "oauthAccessToken": "", - "messageIds": null, - "rudderId": "<<>>2073230<<>>2564871", - "receivedAt": "2022-12-30T21:12:19.720+05:30", - "eventName": "Product Added", - "eventType": "track", - "sourceDefinitionId": "1b6gJdqOPOCadT3cddw8eidV591", - "destinationDefinitionId": "" - }, - "statusCode": 400, - "error": "Unknown error occurred. Original error: Unsupported \"channel\": \"offline\". It must be one of: web,server,mobile,sources", - "statTags": { - "errorCategory": "transformation", - "destType": "ZAPIER", - "module": "destination", - "implementation": "cdkV2", - "feature": "processor", - "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg" - } - } - ] -} diff --git a/test/apitests/data_scenarios/cdk_v1/success.json b/test/apitests/data_scenarios/cdk_v1/success.json deleted file mode 100644 index 34151040a3..0000000000 --- a/test/apitests/data_scenarios/cdk_v1/success.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "input": [ - { - "message": { - "anonymousId": "2073230", - "channel": "web", - "context": { - "traits": { - "email": "test.c97@gmail.com", - "firstName": "test", - "gender": "Male", - "lastName": "Rudderlabs", - "phone": "+919876543210" - } - }, - "event": "Product Added", - "messageId": "ace693c0-79c3-47b8-9e7f-6a894672597f", - "originalTimestamp": "2022-12-31T20:30:35.282+05:30", - "properties": { - "brand": "Gamepro", - "category": "Games", - "coupon": "DISC21", - "image_url": "https://www.website.com/product/path.png", - "name": "Game", - "position": 1, - "price": 13.49, - "product_id": "123", - "quantity": 11, - "sku": "F15", - "url": "https://www.website.com/product/path", - "variant": "111" - }, - "receivedAt": "2022-12-31T20:30:34.567+05:30", - "request_ip": "[::1]", - "rudderId": "c6bac0d9-5ed4-45d8-a937-bf9e62060b78", - "sentAt": "2022-12-31T20:30:35.282+05:30", - "timestamp": "2022-12-31T20:30:34.566+05:30", - "type": "track", - "userId": "2564871" - }, - "metadata": { - "sourceId": "27O0bmEEx3GgfmEhZHUcPwJQVWC", - "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "namespace": "", - "instanceId": "1", - "sourceType": "HTTP", - "sourceCategory": "", - "trackingPlanId": "", - "trackingPlanVersion": 0, - "sourceTpConfig": null, - "mergedTpConfig": null, - "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "jobRunId": "", - "jobId": 1, - "sourceBatchId": "", - "sourceJobId": "", - "sourceJobRunId": "", - "sourceTaskId": "", - "sourceTaskRunId": "", - "recordId": null, - "destinationType": "ZAPIER", - "messageId": "ace693c0-79c3-47b8-9e7f-6a894672597f", - "oauthAccessToken": "", - "messageIds": null, - "rudderId": "<<>>2073230<<>>2564871", - "receivedAt": "2022-12-31T20:30:34.567+05:30", - "eventName": "Product Added", - "eventType": "track", - "sourceDefinitionId": "1b6gJdqOPOCadT3cddw8eidV591", - "destinationDefinitionId": "" - }, - "destination": { - "ID": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "Name": "Zapier-dev", - "DestinationDefinition": { - "ID": "2EAFTAOU0JrG8tHwYB5ZlV7yzo6", - "Name": "ZAPIER", - "DisplayName": "Zapier", - "Config": { - "cdkV2Enabled": true, - "destConfig": { - "defaultConfig": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"] - }, - "excludeKeys": [], - "includeKeys": ["zapUrl", "trackEventsToZap", "pageScreenEventsToZap"], - "saveDestinationResponse": true, - "secretKeys": ["zapUrl"], - "supportedMessageTypes": ["track", "page", "screen"], - "supportedSourceTypes": [ - "android", - "ios", - "web", - "unity", - "amp", - "cloud", - "reactnative", - "flutter", - "cordova", - "warehouse" - ], - "transformAt": "processor", - "transformAtV1": "processor" - }, - "ResponseRules": {} - }, - "Config": { - "zapUrl": "https://hooks.zapier.com/hooks/catch/test/abc/" - }, - "Enabled": true, - "WorkspaceID": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "Transformations": [], - "IsProcessorEnabled": true, - "RevisionID": "2JdjA2o6s9AfokHcz6bX0SPCdJZ" - }, - "libraries": null - } - ], - "output": [ - { - "output": { - "version": "1", - "type": "REST", - "method": "POST", - "endpoint": "https://hooks.zapier.com/hooks/catch/test/abc/", - "headers": { - "content-type": "application/json" - }, - "params": {}, - "body": { - "JSON": { - "anonymousId": "2073230", - "channel": "web", - "context": { - "traits": { - "email": "test.c97@gmail.com", - "firstName": "test", - "gender": "Male", - "lastName": "Rudderlabs", - "phone": "+919876543210" - } - }, - "event": "Product Added", - "messageId": "ace693c0-79c3-47b8-9e7f-6a894672597f", - "originalTimestamp": "2022-12-31T20:30:35.282+05:30", - "properties": { - "brand": "Gamepro", - "category": "Games", - "coupon": "DISC21", - "image_url": "https://www.website.com/product/path.png", - "name": "Game", - "position": 1, - "price": 13.49, - "product_id": "123", - "quantity": 11, - "sku": "F15", - "url": "https://www.website.com/product/path", - "variant": "111" - }, - "receivedAt": "2022-12-31T20:30:34.567+05:30", - "request_ip": "[::1]", - "rudderId": "c6bac0d9-5ed4-45d8-a937-bf9e62060b78", - "sentAt": "2022-12-31T20:30:35.282+05:30", - "timestamp": "2022-12-31T20:30:34.566+05:30", - "type": "track", - "userId": "2564871" - }, - "JSON_ARRAY": {}, - "XML": {}, - "FORM": {} - }, - "files": {}, - "userId": "" - }, - "metadata": { - "sourceId": "27O0bmEEx3GgfmEhZHUcPwJQVWC", - "workspaceId": "27O0bhB6p5ehfOWeeZlOSsSDTLg", - "namespace": "", - "instanceId": "1", - "sourceType": "HTTP", - "sourceCategory": "", - "trackingPlanId": "", - "trackingPlanVersion": 0, - "sourceTpConfig": null, - "mergedTpConfig": null, - "destinationId": "2JVZ3owjdCdDajoiZwWgJbR9y0q", - "jobRunId": "", - "jobId": 1, - "sourceBatchId": "", - "sourceJobId": "", - "sourceJobRunId": "", - "sourceTaskId": "", - "sourceTaskRunId": "", - "recordId": null, - "destinationType": "ZAPIER", - "messageId": "ace693c0-79c3-47b8-9e7f-6a894672597f", - "oauthAccessToken": "", - "messageIds": null, - "rudderId": "<<>>2073230<<>>2564871", - "receivedAt": "2022-12-31T20:30:34.567+05:30", - "eventName": "Product Added", - "eventType": "track", - "sourceDefinitionId": "1b6gJdqOPOCadT3cddw8eidV591", - "destinationDefinitionId": "" - }, - "statusCode": 200 - } - ] -} From 7e9e2df594a1689d28a822c64f971f0acdce2b0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 09:59:37 +0530 Subject: [PATCH 126/201] chore(deps-dev): bump husky from 8.0.3 to 9.1.1 (#3576) * chore(deps-dev): bump husky from 8.0.3 to 9.1.1 Bumps [husky](https://github.com/typicode/husky) from 8.0.3 to 9.1.1. - [Release notes](https://github.com/typicode/husky/releases) - [Commits](https://github.com/typicode/husky/compare/v8.0.3...v9.1.1) --- updated-dependencies: - dependency-name: husky dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * chore: lint errors fix --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sai Sankeerth --- .husky/commit-msg | 2 -- .husky/pre-commit | 2 -- package-lock.json | 12 ++++++------ package.json | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.husky/commit-msg b/.husky/commit-msg index 9db017095e..84dc58a421 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,2 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" npm run commit-msg diff --git a/.husky/pre-commit b/.husky/pre-commit index d4a43dd13e..af964838e1 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,2 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" npm run pre-commit diff --git a/package-lock.json b/package-lock.json index a7738f995e..6142a466ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,7 +104,7 @@ "eslint-plugin-unicorn": "^46.0.1", "glob": "^10.3.3", "http-terminator": "^3.2.0", - "husky": "^8.0.3", + "husky": "^9.1.1", "jest": "^29.5.0", "jest-sonar": "^0.2.16", "jest-when": "^3.5.2", @@ -11824,15 +11824,15 @@ } }, "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.1.tgz", + "integrity": "sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg==", "dev": true, "bin": { - "husky": "lib/bin.js" + "husky": "bin.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" diff --git a/package.json b/package.json index 536fcf48ca..68c5593045 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "eslint-plugin-unicorn": "^46.0.1", "glob": "^10.3.3", "http-terminator": "^3.2.0", - "husky": "^8.0.3", + "husky": "^9.1.1", "jest": "^29.5.0", "jest-sonar": "^0.2.16", "jest-when": "^3.5.2", From 29a8789ebaf52ded55c08722764487d50cbb929b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:16:50 +0530 Subject: [PATCH 127/201] chore(deps): bump docker/login-action from 3.2.0 to 3.3.0 (#3614) Bumps [docker/login-action](https://github.com/docker/login-action) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v3.2.0...v3.3.0) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-push-docker-image.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 885ecf4fd6..fe7908282f 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -45,7 +45,7 @@ jobs: uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub - uses: docker/login-action@v3.2.0 + uses: docker/login-action@v3.3.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} @@ -96,7 +96,7 @@ jobs: uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub - uses: docker/login-action@v3.2.0 + uses: docker/login-action@v3.3.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} @@ -143,7 +143,7 @@ jobs: uses: docker/setup-buildx-action@v3.4.0 - name: Login to DockerHub - uses: docker/login-action@v3.2.0 + uses: docker/login-action@v3.3.0 with: username: ${{ env.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} From f1f54698b5e1e4cc4a70311cf63ba51244736844 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:17:33 +0530 Subject: [PATCH 128/201] chore(deps): bump docker/build-push-action from 6.4.1 to 6.5.0 (#3615) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.4.1 to 6.5.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.4.1...v6.5.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-push-docker-image.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index fe7908282f..1e7281479e 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -51,7 +51,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v6.4.1 + uses: docker/build-push-action@v6.5.0 with: context: . file: ${{ inputs.dockerfile }} @@ -67,7 +67,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v6.4.1 + uses: docker/build-push-action@v6.5.0 with: context: . file: ${{ inputs.dockerfile }} @@ -102,7 +102,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v6.4.1 + uses: docker/build-push-action@v6.5.0 with: context: . file: ${{ inputs.dockerfile }} @@ -118,7 +118,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v6.4.1 + uses: docker/build-push-action@v6.5.0 with: context: . file: ${{ inputs.dockerfile }} From 5acad707d3125f3d50380d886f5fecb1406836cd Mon Sep 17 00:00:00 2001 From: AASHISH MALIK Date: Thu, 8 Aug 2024 16:36:58 +0530 Subject: [PATCH 129/201] fix: sendgrid read root traits (#3642) --- src/v0/destinations/sendgrid/util.js | 2 +- .../destinations/sendgrid/processor/data.ts | 133 ++++++++++++++++++ 2 files changed, 134 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/sendgrid/util.js b/src/v0/destinations/sendgrid/util.js index 1edb480516..28c9aae6d2 100644 --- a/src/v0/destinations/sendgrid/util.js +++ b/src/v0/destinations/sendgrid/util.js @@ -478,7 +478,7 @@ const fetchCustomFields = async ({ destination, metadata }) => { */ const getCustomFields = async ({ message, destination, metadata }) => { const customFields = {}; - const payload = get(message, 'context.traits'); + const payload = get(message, 'context.traits') || get(message, 'traits'); const { customFieldsMapping } = destination.Config; const fieldsMapping = getHashFromArray(customFieldsMapping, 'from', 'to', false); const fields = Object.keys(fieldsMapping); diff --git a/test/integrations/destinations/sendgrid/processor/data.ts b/test/integrations/destinations/sendgrid/processor/data.ts index b1550787b5..4c5ca7f48f 100644 --- a/test/integrations/destinations/sendgrid/processor/data.ts +++ b/test/integrations/destinations/sendgrid/processor/data.ts @@ -1541,4 +1541,137 @@ export const data = [ }, }, }, + { + name: 'sendgrid', + description: 'Identify call traits at root and listId given', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + ID: '2HOQOO6wWKaKjeQrEABXgiH6cmU', + Config: { + IPPoolName: '', + apiKey: 'apikey', + attachments: [ + { + content: '', + contentId: '', + disposition: '', + filename: '', + type: '', + }, + ], + clickTracking: true, + listId: 'list123', + clickTrackingEnableText: true, + contents: [ + { + type: 'text/html', + value: + '

Hello from Twilio SendGrid!

Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.

%open-track%

', + }, + ], + customFieldsMapping: [ + { + from: 'name', + to: 'user_name', + }, + ], + eventDelivery: false, + eventDeliveryTS: 1668424218224, + eventNamesSettings: [ + { + event: 'open', + }, + ], + footer: false, + fromEmail: 'a@g.com', + fromName: '', + ganalytics: false, + group: '', + groupsToDisplay: [ + { + groupId: '', + }, + ], + html: '', + mailFromTraits: false, + openTracking: false, + openTrackingSubstitutionTag: '', + replyToEmail: '', + replyToName: '', + sandboxMode: false, + subject: 'hello there from webflow', + subscriptionTracking: false, + substitutionTag: '', + templateId: '', + text: '', + }, + }, + message: { + type: 'identify', + userId: 'user@1', + context: { + traits: { + age: '25', + city: 'Surat', + name: 'rudder test', + email: 'test@rudderstack.com', + phone: '+91 9876543210', + lastName: 'test', + firstName: 'rudder', + state: 'Gujarat', + }, + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + XML: {}, + FORM: {}, + JSON: { + contactDetails: { + email: 'test@rudderstack.com', + last_name: 'test', + first_name: 'rudder', + unique_name: 'rudder test', + phone_number: '+91 9876543210', + custom_fields: { + w1_T: 'rudder test', + }, + }, + contactListIds: 'list123', + }, + JSON_ARRAY: {}, + }, + type: 'REST', + userId: '', + files: {}, + method: 'PUT', + params: {}, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer apikey', + }, + version: '1', + endpoint: 'https://api.sendgrid.com/v3/marketing/contacts', + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; From 2b77ac40f75a042a13d062169f906c1b584b8f6f Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 8 Aug 2024 11:13:47 +0000 Subject: [PATCH 130/201] chore(release): 1.74.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b261d4d4b9..5659f1fd9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.74.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.74.0...v1.74.1) (2024-08-08) + + +### Bug Fixes + +* sendgrid read root traits ([#3642](https://github.com/rudderlabs/rudder-transformer/issues/3642)) ([5acad70](https://github.com/rudderlabs/rudder-transformer/commit/5acad707d3125f3d50380d886f5fecb1406836cd)) + ## [1.74.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.73.1...v1.74.0) (2024-08-05) diff --git a/package-lock.json b/package-lock.json index 4e7201190e..b5db5aa72e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.74.0", + "version": "1.74.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.74.0", + "version": "1.74.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 93aeed71d3..dce50ee36d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.74.0", + "version": "1.74.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 23196ec42acf35f314e1953f339f6acbb72edd70 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Mon, 12 Aug 2024 10:14:19 +0530 Subject: [PATCH 131/201] fix: source transformation integration test generation (#3645) --- .../testcases/close_crm/group_creation.json | 3 ++- .../testcases/close_crm/lead_deletion.json | 3 ++- .../testcases/close_crm/lead_update.json | 3 ++- ...ject_input_event_with_batched_payload.json | 6 ++++-- ...single_object_input_event_with_no_cid.json | 3 ++- ..._event_with_normal_channel_and_action.json | 3 ++- .../mail_jet_when_no_email_is_present.json | 3 ++- .../testcases/moengage/batch_of_events.json | 4 ++-- .../testdata/testcases/segment/test_0.json | 3 ++- .../testcases/shopify/invalid_topic.json | 2 +- .../shopify/no_query_parameters.json | 2 +- .../testcases/shopify/topic_not_found.json | 2 +- test/integrations/sources/auth0/data.ts | 1 + test/integrations/sources/iterable/data.ts | 5 ++++- test/integrations/sources/mailjet/data.ts | 1 + test/integrations/sources/moengage/data.ts | 2 ++ test/integrations/sources/segment/data.ts | 1 + test/integrations/testTypes.ts | 2 ++ test/scripts/generateJson.ts | 20 +++++++++++++++---- 19 files changed, 50 insertions(+), 19 deletions(-) diff --git a/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json index 3bb8d60503..24bb4546b4 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/group_creation.json @@ -34,7 +34,8 @@ ] }, "previous_data": {} - } + }, + "source": {} }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json index 34a36a8da8..3b8a2ce578 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_deletion.json @@ -43,7 +43,8 @@ "updated_by": "user_123", "created_by": "user_123" } - } + }, + "source": {} }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json index 38aeba6468..99cdfe061c 100644 --- a/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json +++ b/go/webhook/testcases/testdata/testcases/close_crm/lead_update.json @@ -61,7 +61,8 @@ "object_type": "opportunity", "lead_id": "lead_123" }, - "subscription_id": "whsub_123" + "subscription_id": "whsub_123", + "source": {} }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json b/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json index 6ab438b077..1217608454 100644 --- a/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json +++ b/go/webhook/testcases/testdata/testcases/cordial/multiple_object_input_event_with_batched_payload.json @@ -64,7 +64,8 @@ "product_name": ["wtp ab"], "product_group": ["women"] } - } + }, + "source": {} }, { "contact": { @@ -126,7 +127,8 @@ "product_name": ["wtp ab"], "product_group": ["women"] } - } + }, + "source": {} } ], "headers": { diff --git a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json index eac08aea16..5b7f898cb3 100644 --- a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json +++ b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_no_cid.json @@ -49,7 +49,8 @@ "title": "Khaki Shirt", "test_key": "value" } - } + }, + "source": {} }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json index b7e4cae319..72c76816ec 100644 --- a/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json +++ b/go/webhook/testcases/testdata/testcases/cordial/simple_single_object_input_event_with_normal_channel_and_action.json @@ -44,7 +44,8 @@ "title": "Khaki Shirt", "test_key": "value" } - } + }, + "source": {} }, "headers": { "Content-Type": "application/json" diff --git a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json index 301cf0a780..67935f116f 100644 --- a/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json +++ b/go/webhook/testcases/testdata/testcases/mailjet/mail_jet_when_no_email_is_present.json @@ -59,5 +59,6 @@ } ], "errQueue": [] - } + }, + "skip": "FIXME" } diff --git a/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json b/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json index 76f72961ca..58d4513db2 100644 --- a/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json +++ b/go/webhook/testcases/testdata/testcases/moengage/batch_of_events.json @@ -376,8 +376,8 @@ "shipping": 4, "value": 31.98 }, - "receivedAt": "2024-03-03T04:48:29.000Z", - "request_ip": "192.0.2.30", + "receivedAt": "2020-10-16T13:40:12.792+05:30", + "request_ip": "[::1]", "sentAt": "2020-10-16T08:10:12.783Z", "timestamp": "2020-10-16T13:40:12.791+05:30", "type": "track", diff --git a/go/webhook/testcases/testdata/testcases/segment/test_0.json b/go/webhook/testcases/testdata/testcases/segment/test_0.json index d3103126c9..868300e20e 100644 --- a/go/webhook/testcases/testdata/testcases/segment/test_0.json +++ b/go/webhook/testcases/testdata/testcases/segment/test_0.json @@ -246,5 +246,6 @@ } ], "errQueue": [] - } + }, + "skip": "NoAnonID error" } diff --git a/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json index 5e176d4e5b..8439ce36e0 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json +++ b/go/webhook/testcases/testdata/testcases/shopify/invalid_topic.json @@ -17,7 +17,7 @@ "output": { "response": { "status": 400, - "body": "Invalid topic in query_parameters" + "body": "Invalid topic in query_parameters\n" }, "queue": [], "errQueue": [ diff --git a/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json b/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json index 6466693059..1c69d854fd 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json +++ b/go/webhook/testcases/testdata/testcases/shopify/no_query_parameters.json @@ -12,7 +12,7 @@ "output": { "response": { "status": 400, - "body": "Query_parameters is missing" + "body": "Query_parameters is missing\n" }, "queue": [], "errQueue": [{}] diff --git a/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json b/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json index bd0e37ab98..5b97996d17 100644 --- a/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json +++ b/go/webhook/testcases/testdata/testcases/shopify/topic_not_found.json @@ -18,7 +18,7 @@ "output": { "response": { "status": 400, - "body": "Topic not found" + "body": "Topic not found\n" }, "queue": [], "errQueue": [ diff --git a/test/integrations/sources/auth0/data.ts b/test/integrations/sources/auth0/data.ts index daedf1b75d..b012887bc4 100644 --- a/test/integrations/sources/auth0/data.ts +++ b/test/integrations/sources/auth0/data.ts @@ -1508,6 +1508,7 @@ export const data = [ description: 'empty batch', module: 'source', version: 'v0', + skipGo: 'Created this case manually', input: { request: { body: [], diff --git a/test/integrations/sources/iterable/data.ts b/test/integrations/sources/iterable/data.ts index b6fda071e4..8912c83434 100644 --- a/test/integrations/sources/iterable/data.ts +++ b/test/integrations/sources/iterable/data.ts @@ -2216,4 +2216,7 @@ export const data = [ }, }, }, -]; +].map((tc) => ({ + ...tc, + overrideReceivedAt: true, +})); diff --git a/test/integrations/sources/mailjet/data.ts b/test/integrations/sources/mailjet/data.ts index f7f56182c8..2a8f3eaf46 100644 --- a/test/integrations/sources/mailjet/data.ts +++ b/test/integrations/sources/mailjet/data.ts @@ -236,6 +236,7 @@ export const data = [ description: 'MailJet when no email is present', module: 'source', version: 'v0', + skipGo: 'FIXME', input: { request: { body: [ diff --git a/test/integrations/sources/moengage/data.ts b/test/integrations/sources/moengage/data.ts index e8160ae08b..c307959121 100644 --- a/test/integrations/sources/moengage/data.ts +++ b/test/integrations/sources/moengage/data.ts @@ -264,6 +264,8 @@ const data = [ description: 'Batch of events', module: 'source', version: 'v0', + overrideReceivedAt: true, + overrideRequestIP: true, input: { request: { body: [ diff --git a/test/integrations/sources/segment/data.ts b/test/integrations/sources/segment/data.ts index d16176e8f1..8c66abd252 100644 --- a/test/integrations/sources/segment/data.ts +++ b/test/integrations/sources/segment/data.ts @@ -11,6 +11,7 @@ export const data: SrcTestCaseData[] = [ description: 'test-0', module: 'source', version: 'v0', + skipGo: 'NoAnonID error', input: { request: { body: [ diff --git a/test/integrations/testTypes.ts b/test/integrations/testTypes.ts index 3ccc792caf..3c5cf60600 100644 --- a/test/integrations/testTypes.ts +++ b/test/integrations/testTypes.ts @@ -52,6 +52,8 @@ export interface TestCaseData { input: inputType; output: outputType; mock?: mockType[]; + overrideReceivedAt?: string; + overrideRequestIP?: string; mockFns?: (mockAdapter: MockAdapter) => {}; } diff --git a/test/scripts/generateJson.ts b/test/scripts/generateJson.ts index a4a254f8f3..388c81477d 100644 --- a/test/scripts/generateJson.ts +++ b/test/scripts/generateJson.ts @@ -61,6 +61,9 @@ function getErrorResponse(outputResponse?: responseType) { const errorResponse = bodyKeys .map((statusKey) => get(outputResponse, statusKey)) .find(isDefinedAndNotNull); + if (errorResponse) { + return errorResponse + '\n'; + } return errorResponse; } @@ -72,6 +75,9 @@ function getSourceRequestBody(testCase: any, version?: string) { if (version === 'v0') { return bodyElement; } + if (Array.isArray(bodyElement?.event)) { + return bodyElement.event.map((e) => ({ ...e, source: bodyElement.source })); + } return { ...bodyElement.event, source: bodyElement.source }; } @@ -158,11 +164,17 @@ function generateSources(outputFolder: string, options: OptionValues) { goTest.skip = testCase.skipGo; } - goTest.output.queue.forEach((queueItem) => { + goTest.output.queue.forEach((queueItem, i) => { queueItem['receivedAt'] = - testCase.output.response?.body?.[0]?.output?.batch?.[0]?.receivedAt ?? - '2024-03-03T04:48:29.000Z'; - queueItem['request_ip'] = '192.0.2.30'; + testCase?.overrideReceivedAt && + testCase.output.response?.body?.[0]?.output?.batch?.[i]?.receivedAt + ? testCase.output.response?.body?.[0]?.output?.batch?.[i]?.receivedAt + : '2024-03-03T04:48:29.000Z'; + queueItem['request_ip'] = + testCase?.overrideRequestIP && + testCase.output.response?.body?.[0]?.output?.batch?.[i]?.request_ip + ? testCase.output.response?.body?.[0]?.output?.batch?.[i]?.request_ip + : '192.0.2.30'; if (!queueItem['messageId']) { queueItem['messageId'] = '00000000-0000-0000-0000-000000000000'; } From 932792561c98833baf9881a83ee36ae5000e37b4 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Mon, 12 Aug 2024 11:23:22 +0530 Subject: [PATCH 132/201] fix: handle attentive tag null, undefined properties (#3647) --- src/v0/destinations/attentive_tag/util.js | 12 ++- .../attentive_tag/processor/data.ts | 91 +++++++++++++++++++ 2 files changed, 98 insertions(+), 5 deletions(-) diff --git a/src/v0/destinations/attentive_tag/util.js b/src/v0/destinations/attentive_tag/util.js index c96d03028f..abecf76542 100644 --- a/src/v0/destinations/attentive_tag/util.js +++ b/src/v0/destinations/attentive_tag/util.js @@ -19,11 +19,13 @@ const { mappingConfig, ConfigCategory } = require('./config'); */ const getPropertiesKeyValidation = (payload) => { const validationArray = [`'`, `"`, `{`, `}`, `[`, `]`, ',', `,`]; - const keys = Object.keys(payload.properties); - for (const key of keys) { - for (const validationChar of validationArray) { - if (key.includes(validationChar)) { - return false; + if (payload.properties) { + const keys = Object.keys(payload.properties); + for (const key of keys) { + for (const validationChar of validationArray) { + if (key.includes(validationChar)) { + return false; + } } } } diff --git a/test/integrations/destinations/attentive_tag/processor/data.ts b/test/integrations/destinations/attentive_tag/processor/data.ts index 12e0f4bea1..2e602610e0 100644 --- a/test/integrations/destinations/attentive_tag/processor/data.ts +++ b/test/integrations/destinations/attentive_tag/processor/data.ts @@ -1678,4 +1678,95 @@ export const data = [ }, }, }, + { + name: 'attentive_tag', + description: 'Test 16', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + traits: {}, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + locale: 'en-US', + ip: '0.0.0.0', + os: { + id: '72e528f869711c3d', + manufacturer: 'Google', + model: 'sdk_gphone_x86', + name: 'generic_x86_arm', + token: 'some_device_token', + type: 'android', + }, + screen: { + density: 2, + }, + }, + type: 'track', + event: 'Application Backgrounded', + anonymousId: '00000000000000000000000000', + userId: '123456', + integrations: { + All: true, + }, + }, + destination: { + Config: { + apiKey: 'dummyApiKey', + signUpSourceId: '240654', + }, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + userId: '', + endpoint: 'https://api.attentivemobile.com/v1/events/custom', + headers: { + Authorization: 'Bearer dummyApiKey', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + user: {}, + type: 'Application Backgrounded', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + statusCode: 200, + }, + ], + }, + }, + }, ].map((d) => ({ ...d, mockFns })); From 0a9b68118241158623d45ee28896377296bafd91 Mon Sep 17 00:00:00 2001 From: Utsab Chowdhury Date: Mon, 12 Aug 2024 11:49:41 +0530 Subject: [PATCH 133/201] fix: handle null values for braze dedupe (#3638) --- src/v0/destinations/braze/braze.util.test.js | 130 +++++++++++++++++++ src/v0/destinations/braze/util.js | 9 +- 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/braze/braze.util.test.js b/src/v0/destinations/braze/braze.util.test.js index f2726c3283..8199aae70b 100644 --- a/src/v0/destinations/braze/braze.util.test.js +++ b/src/v0/destinations/braze/braze.util.test.js @@ -785,6 +785,136 @@ describe('dedup utility tests', () => { const result = BrazeDedupUtility.deduplicate(userData, store); expect(result).toBeNull(); }); + + test('deduplicates user data correctly when user data is null and it doesnt exist in stored data', () => { + const userData = { + external_id: '123', + nullProperty: null, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + age: 30, + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual(null); + }); + + test('deduplicates user data correctly when user data is null and it is same in stored data', () => { + const userData = { + external_id: '123', + nullProperty: null, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + age: 30, + nullProperty: null, + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual(null); + }); + + test('deduplicates user data correctly when user data is null and it is different in stored data', () => { + const userData = { + external_id: '123', + nullProperty: null, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + age: 30, + nullProperty: 'valid data', + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual({ + external_id: '123', + nullProperty: null, + }); + }); + + test('deduplicates user data correctly when user data is undefined and it doesnt exist in stored data', () => { + const userData = { + external_id: '123', + undefinedProperty: undefined, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + age: 30, + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual(null); + }); + + test('deduplicates user data correctly when user data is undefined and it is same in stored data', () => { + const userData = { + external_id: '123', + undefinedProperty: undefined, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + undefinedProperty: undefined, + age: 30, + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual(null); + }); + + test('deduplicates user data correctly when user data is undefined and it is defined in stored data', () => { + const userData = { + external_id: '123', + undefinedProperty: undefined, + color: 'green', + age: 30, + }; + const storeData = { + external_id: '123', + custom_attributes: { + color: 'green', + undefinedProperty: 'defined data', + age: 30, + }, + }; + store.set('123', storeData); + const result = BrazeDedupUtility.deduplicate(userData, store); + expect(store.size).toBe(1); + expect(result).toEqual({ + external_id: '123', + undefinedProperty: undefined, + }); + }); }); }); diff --git a/src/v0/destinations/braze/util.js b/src/v0/destinations/braze/util.js index 00ef308fe9..7f4afaf6c1 100644 --- a/src/v0/destinations/braze/util.js +++ b/src/v0/destinations/braze/util.js @@ -288,7 +288,14 @@ const BrazeDedupUtility = { if (keys.length > 0) { keys.forEach((key) => { - if (!_.isEqual(userData[key], storedUserData[key])) { + // ref: https://www.braze.com/docs/user_guide/data_and_analytics/custom_data/custom_attributes/#adding-descriptions + // null is a valid value in braze for unsetting, so we need to compare the values only if the key is present in the stored user data + // in case of keys having null values only compare if the key is present in the stored user data + if (userData[key] === null) { + if (isDefinedAndNotNull(storedUserData[key])) { + deduplicatedUserData[key] = userData[key]; + } + } else if (!_.isEqual(userData[key], storedUserData[key])) { deduplicatedUserData[key] = userData[key]; } }); From 8450021672c51ac798ec0aeab422f5fceea5e53e Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Mon, 12 Aug 2024 12:35:16 +0530 Subject: [PATCH 134/201] feat: move hubspot to transformer proxy to enable partial batch handling (#3308) * feat: move hubspot to transformer proxy to enable partial batch handling * chore: refactor code * chore: add unit tests * chore: refactor code * chore: update error message * fix: update network handler for legacy api * chore: address comment * chore: update failed tests * fix: update network handler * feat: add verification of single event * chore: add test cases --- src/v0/destinations/hs/transform.js | 31 +- src/v0/destinations/hs/util.js | 32 + src/v1/destinations/hs/networkHandler.ts | 147 +++ .../destinations/hs/dataDelivery/business.ts | 593 +++++++++++ .../destinations/hs/dataDelivery/data.ts | 4 + .../destinations/hs/dataDelivery/other.ts | 245 +++++ test/integrations/destinations/hs/network.ts | 376 +++++++ .../destinations/hs/router/data.ts | 931 ++++++++++++++++++ 8 files changed, 2354 insertions(+), 5 deletions(-) create mode 100644 src/v1/destinations/hs/networkHandler.ts create mode 100644 test/integrations/destinations/hs/dataDelivery/business.ts create mode 100644 test/integrations/destinations/hs/dataDelivery/data.ts create mode 100644 test/integrations/destinations/hs/dataDelivery/other.ts diff --git a/src/v0/destinations/hs/transform.js b/src/v0/destinations/hs/transform.js index 6cf69e3c3b..1d1a81b6b0 100644 --- a/src/v0/destinations/hs/transform.js +++ b/src/v0/destinations/hs/transform.js @@ -19,6 +19,7 @@ const { fetchFinalSetOfTraits, getProperties, validateDestinationConfig, + convertToResponseFormat, } = require('./util'); const processSingleMessage = async ({ message, destination, metadata }, propertyMap) => { @@ -147,20 +148,38 @@ const processBatchRouter = async (inputs, reqMetadata) => { }), ); - if (successRespList.length > 0) { + const dontBatchTrueResponses = []; + const dontBatchFalseOrUndefinedResponses = []; + // segregating successRepList depending on dontbatch value + successRespList.forEach((successResp) => { + if (successResp.metadata?.dontBatch) { + dontBatchTrueResponses.push(successResp); + } else { + dontBatchFalseOrUndefinedResponses.push(successResp); + } + }); + + // batch implementation + if (dontBatchFalseOrUndefinedResponses.length > 0) { if (destination.Config.apiVersion === API_VERSION.v3) { - batchedResponseList = batchEvents(successRespList); + batchedResponseList = batchEvents(dontBatchFalseOrUndefinedResponses); } else { - batchedResponseList = legacyBatchEvents(successRespList); + batchedResponseList = legacyBatchEvents(dontBatchFalseOrUndefinedResponses); } } - return { batchedResponseList, errorRespList }; + return { + batchedResponseList, + errorRespList, + // if there are any events where dontbatch set to true we need to update them according to the response format + dontBatchEvents: convertToResponseFormat(dontBatchTrueResponses), + }; }; // we are batching by default at routerTransform const processRouterDest = async (inputs, reqMetadata) => { const tempNewInputs = batchEventsInOrder(inputs); const batchedResponseList = []; const errorRespList = []; + const dontBatchEvents = []; const promises = tempNewInputs.map(async (inputEvents) => { const response = await processBatchRouter(inputEvents, reqMetadata); return response; @@ -171,8 +190,10 @@ const processRouterDest = async (inputs, reqMetadata) => { results.forEach((response) => { errorRespList.push(...response.errorRespList); batchedResponseList.push(...response.batchedResponseList); + dontBatchEvents.push(...response.dontBatchEvents); }); - return [...batchedResponseList, ...errorRespList]; + console.log(JSON.stringify([...batchedResponseList, ...errorRespList, ...dontBatchEvents])); + return [...batchedResponseList, ...errorRespList, ...dontBatchEvents]; }; module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js index 38b2e636b9..fc22a89d69 100644 --- a/src/v0/destinations/hs/util.js +++ b/src/v0/destinations/hs/util.js @@ -22,6 +22,9 @@ const { getValueFromMessage, isNull, validateEventName, + defaultBatchRequestConfig, + defaultPostRequestConfig, + getSuccessRespEvents, } = require('../../util'); const { CONTACT_PROPERTY_MAP_ENDPOINT, @@ -844,6 +847,34 @@ const addExternalIdToHSTraits = (message) => { set(getFieldValueFromMessage(message, 'traits'), externalIdObj.identifierType, externalIdObj.id); }; +const convertToResponseFormat = (successRespListWithDontBatchTrue) => { + const response = []; + if (Array.isArray(successRespListWithDontBatchTrue)) { + successRespListWithDontBatchTrue.forEach((event) => { + const { message, metadata, destination } = event; + const endpoint = get(message, 'endpoint'); + + const batchedResponse = defaultBatchRequestConfig(); + batchedResponse.batchedRequest.headers = message.headers; + batchedResponse.batchedRequest.endpoint = endpoint; + batchedResponse.batchedRequest.body = message.body; + batchedResponse.batchedRequest.params = message.params; + batchedResponse.batchedRequest.method = defaultPostRequestConfig.requestMethod; + batchedResponse.metadata = [metadata]; + batchedResponse.destination = destination; + + response.push( + getSuccessRespEvents( + batchedResponse.batchedRequest, + batchedResponse.metadata, + batchedResponse.destination, + ), + ); + }); + } + return response; +}; + module.exports = { validateDestinationConfig, addExternalIdToHSTraits, @@ -863,4 +894,5 @@ module.exports = { getObjectAndIdentifierType, extractIDsForSearchAPI, getRequestData, + convertToResponseFormat, }; diff --git a/src/v1/destinations/hs/networkHandler.ts b/src/v1/destinations/hs/networkHandler.ts new file mode 100644 index 0000000000..8293a7240c --- /dev/null +++ b/src/v1/destinations/hs/networkHandler.ts @@ -0,0 +1,147 @@ +import { TransformerProxyError } from '../../../v0/util/errorTypes'; +import { prepareProxyRequest, proxyRequest } from '../../../adapters/network'; +import { isHttpStatusSuccess, getAuthErrCategoryFromStCode } from '../../../v0/util/index'; +import { DeliveryV1Response, DeliveryJobState } from '../../../types/index'; + +import { processAxiosResponse, getDynamicErrorType } from '../../../adapters/utils/networkUtils'; + +const tags = require('../../../v0/util/tags'); + +/** + * + * @param results + * @param rudderJobMetadata + * @param destinationConfig + * @returns boolean + */ + +const findFeatureandVersion = (response, rudderJobMetadata, destinationConfig) => { + const { results, errors } = response; + if (Array.isArray(rudderJobMetadata) && rudderJobMetadata.length === 1) { + return 'singleEvent'; + } + if (destinationConfig?.apiVersion === 'legacyApi') { + return 'legacyApiWithMultipleEvents'; + } + if (destinationConfig?.apiVersion === 'newApi') { + if (Array.isArray(results) && results.length === rudderJobMetadata.length) + return 'newApiWithMultipleEvents'; + + if ( + Array.isArray(results) && + results.length !== rudderJobMetadata.length && + results.length + errors.length === rudderJobMetadata.length + ) + return 'newApiWithMultipleEventsAndErrors'; + } + return 'unableToFindVersionWithMultipleEvents'; +}; + +const populateResponseWithDontBatch = (rudderJobMetadata, response) => { + const errorMessage = JSON.stringify(response); + const responseWithIndividualEvents: DeliveryJobState[] = []; + + rudderJobMetadata.forEach((metadata) => { + responseWithIndividualEvents.push({ + statusCode: 500, + metadata: { ...metadata, dontBatch: true }, + error: errorMessage, + }); + }); + return responseWithIndividualEvents; +}; + +type Response = { + status?: string; + results?: Array; + errors?: Array; + startedAt?: Date; + completedAt?: Date; + message?: string; + correlationId?: string; + failureMessages?: Array; +}; + +const responseHandler = (responseParams) => { + const { destinationResponse, rudderJobMetadata, destinationRequest } = responseParams; + const successMessage = `[HUBSPOT Response V1 Handler] - Request Processed Successfully`; + const failureMessage = + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation'; + const responseWithIndividualEvents: DeliveryJobState[] = []; + const { response, status } = destinationResponse; + + if (isHttpStatusSuccess(status)) { + // populate different response for each event + const destResponse = response as Response; + let proxyOutputObj: DeliveryJobState; + const featureAndVersion = findFeatureandVersion( + destResponse, + rudderJobMetadata, + destinationRequest?.destinationConfig, + ); + switch (featureAndVersion) { + case 'singleEvent': + proxyOutputObj = { + statusCode: status, + metadata: rudderJobMetadata[0], + error: JSON.stringify(destResponse), + }; + responseWithIndividualEvents.push(proxyOutputObj); + break; + case 'newApiWithMultipleEvents': + rudderJobMetadata.forEach((metadata: any, index: string | number) => { + proxyOutputObj = { + statusCode: 200, + metadata, + error: JSON.stringify(destResponse.results?.[index]), + }; + responseWithIndividualEvents.push(proxyOutputObj); + }); + break; + default: + rudderJobMetadata.forEach((metadata) => { + proxyOutputObj = { + statusCode: 200, + metadata, + error: 'success', + }; + responseWithIndividualEvents.push(proxyOutputObj); + }); + break; + } + return { + status, + message: successMessage, + response: responseWithIndividualEvents, + } as DeliveryV1Response; + } + + // At least one event in the batch is invalid. + if (status === 400 && Array.isArray(rudderJobMetadata) && rudderJobMetadata.length > 1) { + // sending back 500 for retry only when events came in a batch + return { + status: 500, + message: failureMessage, + response: populateResponseWithDontBatch(rudderJobMetadata, response), + } as DeliveryV1Response; + } + throw new TransformerProxyError( + failureMessage, + status, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + destinationResponse, + getAuthErrCategoryFromStCode(status), + response, + ); +}; + +function networkHandler(this: any) { + this.prepareProxy = prepareProxyRequest; + this.proxy = proxyRequest; + this.processAxiosResponse = processAxiosResponse; + this.responseHandler = responseHandler; +} + +module.exports = { networkHandler }; diff --git a/test/integrations/destinations/hs/dataDelivery/business.ts b/test/integrations/destinations/hs/dataDelivery/business.ts new file mode 100644 index 0000000000..2239abfb95 --- /dev/null +++ b/test/integrations/destinations/hs/dataDelivery/business.ts @@ -0,0 +1,593 @@ +import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; + +const commonStatTags = { + destType: 'HS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'retryable', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', +}; +export const businessData = [ + { + name: 'hs', + description: 'successfully creating users from a batch with legacy api', + feature: 'dataDelivery', + module: 'destination', + id: 'successWithLegacyApi', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/contacts/v1/contact/batch/', + JSON_ARRAY: { + batch: + '[{"email":"identify111051@test.com","properties":[{"property":"firstname","value":"John1051"},{"property":"lastname","value":"Sparrow1051"}]},{"email":"identify111052@test.com","properties":[{"property":"firstname","value":"John1052"},{"property":"lastname","value":"Sparrow1052"}]},{"email":"identify111053@test.com","properties":[{"property":"firstname","value":"John1053"},{"property":"lastname","value":"Sparrow1053"}]}]', + }, + headers: { + Authorization: 'Bearer validApiKey', + 'Content-Type': 'application/json', + }, + }, + [generateMetadata(1), generateMetadata(2)], + { + apiVersion: 'legacyApi', + }, + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: 'success', + metadata: generateMetadata(1), + statusCode: 200, + }, + { + error: 'success', + metadata: generateMetadata(2), + statusCode: 200, + }, + ], + status: 200, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'failed to create users from a batch with legacy api', + feature: 'dataDelivery', + module: 'destination', + id: 'failureWithLegacyApi', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/contacts/v1/contact/batch/', + JSON_ARRAY: { + batch: + '[{"email":"identify111051@test.com","properties":[{"property":"firstname","value":"John1051"},{"property":"lastname","value":"Sparrow1051"}]},{"email":"identify111052@test.con","properties":[{"property":"firstname","value":"John1052"},{"property":"lastname","value":"Sparrow1052"}]},{"email":"identify111053@test.com","properties":[{"property":"firstname","value":"John1053"},{"property":"lastname","value":"Sparrow1053"}]}]', + }, + headers: { + Authorization: 'Bearer inValidApiKey', + 'Content-Type': 'application/json', + }, + }, + [generateMetadata(1), generateMetadata(2)], + { + apiVersion: 'legacyApi', + }, + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: + '{"status":"error","message":"Errors found processing batch update","correlationId":"a716ef20-79df-44d4-98bd-9136af7bdefc","invalidEmails":["identify111052@test.con"],"failureMessages":[{"index":1,"error":{"status":"error","message":"Email address identify111052@test.con is invalid"}}]}', + metadata: { ...generateMetadata(1), dontBatch: true }, + statusCode: 500, + }, + { + error: + '{"status":"error","message":"Errors found processing batch update","correlationId":"a716ef20-79df-44d4-98bd-9136af7bdefc","invalidEmails":["identify111052@test.con"],"failureMessages":[{"index":1,"error":{"status":"error","message":"Email address identify111052@test.con is invalid"}}]}', + metadata: { ...generateMetadata(2), dontBatch: true }, + statusCode: 500, + }, + ], + status: 500, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'successfully deliver events with legacy api', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + id: 'successEventsWithLegacyApi', + input: { + request: { + body: generateProxyV1Payload( + { + headers: { + 'Content-Type': 'application/json', + }, + method: 'GET', + params: { + _a: 'dummy-hubId', + _n: 'test track event HS', + _m: 4.99, + email: 'testhubspot2@email.com', + firstname: 'Test Hubspot', + }, + endpoint: 'https://track.hubspot.com/v1/event', + }, + [generateMetadata(1)], + { + apiVersion: 'legacyApi', + }, + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: '{}', + metadata: generateMetadata(1), + statusCode: 200, + }, + ], + status: 200, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'successfully creating users from a batch with new api', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + id: 'successCreatingBatchOfUsersWithNewApi', + input: { + request: { + body: generateProxyV1Payload( + { + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer validAccessToken', + }, + method: 'POST', + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + JSON: { + inputs: [ + { + properties: { + email: 'testuser31848@testmail.com', + }, + }, + { + properties: { + email: 'testuser31847@testmail.com', + }, + }, + ], + }, + }, + [generateMetadata(1), generateMetadata(2)], + { + apiVersion: 'newApi', + }, + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: + '{"id":"44188066992","properties":{"createdate":"2024-07-31T03:21:03.176Z","email":"testuser31848@testmail.com","hs_all_contact_vids":"44188066992","hs_email_domain":"testmail.com","hs_is_contact":"true","hs_is_unworked":"true","hs_lifecyclestage_lead_date":"2024-07-31T03:21:03.176Z","hs_membership_has_accessed_private_content":"0","hs_object_id":"44188066992","hs_object_source":"INTEGRATION","hs_object_source_id":"3209723","hs_object_source_label":"INTEGRATION","hs_pipeline":"contacts-lifecycle-pipeline","hs_registered_member":"0","lastmodifieddate":"2024-07-31T03:21:03.176Z","lifecyclestage":"lead"},"createdAt":"2024-07-31T03:21:03.176Z","updatedAt":"2024-07-31T03:21:03.176Z","archived":false}', + metadata: generateMetadata(1), + statusCode: 200, + }, + { + error: + '{"id":"44188066993","properties":{"createdate":"2024-07-31T03:21:03.176Z","email":"testuser31847@testmail.com","hs_all_contact_vids":"44188066993","hs_email_domain":"testmail.com","hs_is_contact":"true","hs_is_unworked":"true","hs_lifecyclestage_lead_date":"2024-07-31T03:21:03.176Z","hs_membership_has_accessed_private_content":"0","hs_object_id":"44188066993","hs_object_source":"INTEGRATION","hs_object_source_id":"3209723","hs_object_source_label":"INTEGRATION","hs_pipeline":"contacts-lifecycle-pipeline","hs_registered_member":"0","lastmodifieddate":"2024-07-31T03:21:03.176Z","lifecyclestage":"lead"},"createdAt":"2024-07-31T03:21:03.176Z","updatedAt":"2024-07-31T03:21:03.176Z","archived":false}', + metadata: generateMetadata(2), + statusCode: 200, + }, + ], + status: 200, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'successfully updating users from a batch with new api', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + JSON: { + inputs: [ + { + properties: { + firstname: 'testmail1217', + }, + id: '12877907024', + }, + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + }, + [generateMetadata(1), generateMetadata(2)], + { + apiVersion: 'newApi', + }, + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: + '{"id":"12877907025","properties":{"createdate":"2024-04-16T09:50:16.034Z","email":"test1@mail.com","firstname":"test1","hs_is_unworked":"true","hs_object_id":"12877907025","hs_pipeline":"contacts-lifecycle-pipeline","lastmodifieddate":"2024-04-23T11:52:03.723Z","lifecyclestage":"lead"},"createdAt":"2024-04-16T09:50:16.034Z","updatedAt":"2024-04-23T11:52:03.723Z","archived":false}', + metadata: generateMetadata(1), + statusCode: 200, + }, + { + error: + '{"id":"12877907024","properties":{"createdate":"2024-04-16T09:50:16.034Z","firstname":"testmail1217","hs_is_unworked":"true","hs_object_id":"12877907024","hs_pipeline":"contacts-lifecycle-pipeline","lastmodifieddate":"2024-04-23T11:52:03.723Z","lifecyclestage":"lead"},"createdAt":"2024-04-16T09:50:16.034Z","updatedAt":"2024-04-23T11:52:03.723Z","archived":false}', + metadata: generateMetadata(2), + statusCode: 200, + }, + ], + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'failed due to duplicate in a batch', + id: 'hs_datadelivery_01', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + JSON: { + inputs: [ + { + properties: { + firstname: 'test5', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + { + properties: { + firstname: 'testmail1217', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + }, + [generateMetadata(1), generateMetadata(2)], + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: + '{"status":"error","message":"Duplicate IDs found in batch input: [12877907025]. IDs must be unique","correlationId":"d24ec5cd-8998-4674-a928-59603ae6b0eb","context":{"ids":["12877907025"]},"category":"VALIDATION_ERROR"}', + metadata: { + ...generateMetadata(1), + dontBatch: true, + }, + statusCode: 500, + }, + { + error: + '{"status":"error","message":"Duplicate IDs found in batch input: [12877907025]. IDs must be unique","correlationId":"d24ec5cd-8998-4674-a928-59603ae6b0eb","context":{"ids":["12877907025"]},"category":"VALIDATION_ERROR"}', + metadata: { + ...generateMetadata(2), + dontBatch: true, + }, + statusCode: 500, + }, + ], + status: 500, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'failed due to wrong email format in a batch', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + JSON: { + inputs: [ + [ + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + }, + { + properties: { + firstname: 'testmail1217', + email: 'testmail1217@testmail.com', + }, + }, + { + properties: { + firstname: 'test5', + email: 'test5@xmail.con', + }, + }, + ], + ], + }, + }, + [generateMetadata(1), generateMetadata(2), generateMetadata(3)], + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: + '{"status":"error","message":"Invalid input JSON on line 3, column 9: Cannot deserialize value of type `com.hubspot.inbounddb.publicobject.core.v2.SimplePublicObjectBatchInput$Json` from Array value (token `JsonToken.START_ARRAY`)","correlationId":"99df04b9-da11-4504-bd97-2c15f58d0943"}', + metadata: { + ...generateMetadata(1), + dontBatch: true, + }, + statusCode: 500, + }, + { + error: + '{"status":"error","message":"Invalid input JSON on line 3, column 9: Cannot deserialize value of type `com.hubspot.inbounddb.publicobject.core.v2.SimplePublicObjectBatchInput$Json` from Array value (token `JsonToken.START_ARRAY`)","correlationId":"99df04b9-da11-4504-bd97-2c15f58d0943"}', + metadata: { + ...generateMetadata(2), + dontBatch: true, + }, + statusCode: 500, + }, + { + error: + '{"status":"error","message":"Invalid input JSON on line 3, column 9: Cannot deserialize value of type `com.hubspot.inbounddb.publicobject.core.v2.SimplePublicObjectBatchInput$Json` from Array value (token `JsonToken.START_ARRAY`)","correlationId":"99df04b9-da11-4504-bd97-2c15f58d0943"}', + metadata: { + ...generateMetadata(3), + dontBatch: true, + }, + statusCode: 500, + }, + ], + status: 500, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'succeed to send a custom event', + feature: 'dataDelivery', + module: 'destination', + id: 'succeedEventWithNewApi', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/events/v3/send', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + JSON: { + email: 'osvaldocostaferreira98@gmail.com', + eventName: 'pe22315509_rs_hub_test', + properties: { + value: 'name1', + }, + }, + }, + [generateMetadata(1)], + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: '{}', + metadata: generateMetadata(1), + statusCode: 200, + }, + ], + status: 200, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'succeed to send a custom event', + feature: 'dataDelivery', + module: 'destination', + id: 'failedEventWithNewApi', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/events/v3/send', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer invalid-dummy-access-token', + }, + JSON: { + email: 'osvaldocostaferreira98@gmail.com', + eventName: 'pe22315509_rs_hub_test', + properties: { + value: 'name1', + }, + }, + }, + [generateMetadata(1)], + ), + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'REFRESH_TOKEN', + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: + '{"status":"error","message":"Authentication credentials not found. This API supports OAuth 2.0 authentication and you can find more details at https://developers.hubspot.com/docs/methods/auth/oauth-overview","correlationId":"501651f6-bb90-40f1-b0db-349f62916993","category":"INVALID_AUTHENTICATION"}', + metadata: generateMetadata(1), + statusCode: 401, + }, + ], + statTags: { ...commonStatTags, errorType: 'aborted' }, + status: 401, + }, + }, + }, + }, + }, + { + name: 'hs', + description: 'succeed to send an event with association', + feature: 'dataDelivery', + module: 'destination', + id: 'succeedAssociationWithNewApi', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + endpoint: 'https://api.hubapi.com/crm/v3/associations/companies/contacts/batch/create', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + JSON: { + inputs: [{ to: { id: 1 }, from: { id: 9405415215 }, type: 'contact_to_company' }], + }, + }, + [generateMetadata(1)], + ), + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: + '{"completedAt":"2024-07-31T04:46:34.391Z","requestedAt":"2024-07-31T04:46:34.391Z","startedAt":"2024-07-31T04:46:34.391Z","results":[{"from":{"id":"9405415215"},"to":{"id":"1"},"type":"contact_to_company"}],"status":"PENDING"}', + metadata: generateMetadata(1), + statusCode: 201, + }, + ], + status: 201, + }, + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/hs/dataDelivery/data.ts b/test/integrations/destinations/hs/dataDelivery/data.ts new file mode 100644 index 0000000000..5b2060d001 --- /dev/null +++ b/test/integrations/destinations/hs/dataDelivery/data.ts @@ -0,0 +1,4 @@ +import { businessData } from './business'; +import { otherData } from './other'; + +export const data = [...businessData, ...otherData]; diff --git a/test/integrations/destinations/hs/dataDelivery/other.ts b/test/integrations/destinations/hs/dataDelivery/other.ts new file mode 100644 index 0000000000..202b665a51 --- /dev/null +++ b/test/integrations/destinations/hs/dataDelivery/other.ts @@ -0,0 +1,245 @@ +import { generateMetadata } from '../../../testUtils'; + +const commonStatTags = { + destType: 'HS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'retryable', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', +}; + +const commonBody = { + version: '1', + type: 'REST', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummyAccessToken', + }, + params: {}, + files: {}, + metadata: [generateMetadata(1), generateMetadata(2)], + body: { + JSON: { + inputs: [ + { + properties: { + firstname: 'testmail1217', + }, + id: '12877907024', + }, + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, +}; + +export const otherData = [ + { + name: 'hs', + id: 'hs_datadelivery_other_00', + description: 'failed due to gateway timeout from hubspot', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: { + endpoint: 'https://random_test_url/test_for_gateway_time_out', + ...commonBody, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: '"Gateway Timeout"', + metadata: generateMetadata(1), + statusCode: 504, + }, + { + error: '"Gateway Timeout"', + metadata: generateMetadata(2), + statusCode: 504, + }, + ], + statTags: commonStatTags, + status: 504, + }, + }, + }, + }, + }, + { + name: 'hs', + id: 'hs_datadelivery_other_01', + description: 'failed due to internal server error from hubspot', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: { + endpoint: 'https://random_test_url/test_for_internal_server_error', + ...commonBody, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: '"Internal Server Error"', + metadata: generateMetadata(1), + statusCode: 500, + }, + { + error: '"Internal Server Error"', + metadata: generateMetadata(2), + statusCode: 500, + }, + ], + statTags: commonStatTags, + status: 500, + }, + }, + }, + }, + }, + { + name: 'hs', + id: 'hs_datadelivery_other_02', + description: 'failed due to service unavailable error from hubspot', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: { + endpoint: 'https://random_test_url/test_for_service_not_available', + ...commonBody, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + 'HUBSPOT: Error in transformer proxy v1 during HUBSPOT response transformation', + response: [ + { + error: + '{"error":{"message":"Service Unavailable","description":"The server is currently unable to handle the request due to temporary overloading or maintenance of the server. Please try again later."}}', + metadata: generateMetadata(1), + statusCode: 503, + }, + { + error: + '{"error":{"message":"Service Unavailable","description":"The server is currently unable to handle the request due to temporary overloading or maintenance of the server. Please try again later."}}', + metadata: generateMetadata(2), + statusCode: 503, + }, + ], + statTags: commonStatTags, + status: 503, + }, + }, + }, + }, + }, + { + name: 'hs', + id: 'hs_datadelivery_other_03', + description: 'getting success response but not in the expected format', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: { + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + version: '1', + type: 'REST', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummyAccessToken', + }, + params: {}, + files: {}, + metadata: [generateMetadata(1), generateMetadata(2)], + body: { + JSON: { + inputs: [ + { + properties: { + firstname: 'testmail12178', + }, + id: '12877907024', + }, + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: '[HUBSPOT Response V1 Handler] - Request Processed Successfully', + response: [ + { + error: 'success', + metadata: generateMetadata(1), + statusCode: 200, + }, + { + error: 'success', + metadata: generateMetadata(2), + statusCode: 200, + }, + ], + status: 200, + }, + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/hs/network.ts b/test/integrations/destinations/hs/network.ts index 3d3b8fd83f..9d8658ff6b 100644 --- a/test/integrations/destinations/hs/network.ts +++ b/test/integrations/destinations/hs/network.ts @@ -692,4 +692,380 @@ export const networkCallsData = [ status: 200, }, }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + method: 'POST', + data: { + inputs: [ + { + properties: { + firstname: 'testmail1217', + }, + id: '12877907024', + }, + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + }, + httpRes: { + status: 200, + data: { + status: 'COMPLETE', + results: [ + { + id: '12877907025', + properties: { + createdate: '2024-04-16T09:50:16.034Z', + email: 'test1@mail.com', + firstname: 'test1', + hs_is_unworked: 'true', + hs_object_id: '12877907025', + hs_pipeline: 'contacts-lifecycle-pipeline', + lastmodifieddate: '2024-04-23T11:52:03.723Z', + lifecyclestage: 'lead', + }, + createdAt: '2024-04-16T09:50:16.034Z', + updatedAt: '2024-04-23T11:52:03.723Z', + archived: false, + }, + { + id: '12877907024', + properties: { + createdate: '2024-04-16T09:50:16.034Z', + firstname: 'testmail1217', + hs_is_unworked: 'true', + hs_object_id: '12877907024', + hs_pipeline: 'contacts-lifecycle-pipeline', + lastmodifieddate: '2024-04-23T11:52:03.723Z', + lifecyclestage: 'lead', + }, + createdAt: '2024-04-16T09:50:16.034Z', + updatedAt: '2024-04-23T11:52:03.723Z', + archived: false, + }, + ], + startedAt: '2024-04-24T05:11:51.090Z', + completedAt: '2024-04-24T05:11:51.190Z', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + method: 'POST', + data: { + inputs: [ + { + properties: { + firstname: 'test5', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + { + properties: { + firstname: 'testmail1217', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + }, + httpRes: { + status: 400, + data: { + status: 'error', + message: 'Duplicate IDs found in batch input: [12877907025]. IDs must be unique', + correlationId: 'd24ec5cd-8998-4674-a928-59603ae6b0eb', + context: { + ids: ['12877907025'], + }, + category: 'VALIDATION_ERROR', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + method: 'POST', + data: { + inputs: [ + [ + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + }, + { + properties: { + firstname: 'testmail1217', + email: 'testmail1217@testmail.com', + }, + }, + { + properties: { + firstname: 'test5', + email: 'test5@xmail.con', + }, + }, + ], + ], + }, + }, + httpRes: { + status: 400, + data: { + status: 'error', + message: + 'Invalid input JSON on line 3, column 9: Cannot deserialize value of type `com.hubspot.inbounddb.publicobject.core.v2.SimplePublicObjectBatchInput$Json` from Array value (token `JsonToken.START_ARRAY`)', + correlationId: '99df04b9-da11-4504-bd97-2c15f58d0943', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/update', + method: 'POST', + data: { + inputs: [ + { + properties: { + firstname: 'testmail12178', + }, + id: '12877907024', + }, + { + properties: { + firstname: 'test1', + email: 'test1@mail.com', + }, + id: '12877907025', + }, + ], + }, + }, + httpRes: { + status: 200, + data: { + message: 'unknown response', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/search', + method: 'POST', + headers: { + Authorization: 'Bearer dontbatchtrueaccesstoken', + }, + }, + httpRes: { + data: { + total: 0, + results: [], + }, + status: 200, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/contacts/v1/contact/batch/', + method: 'POST', + headers: { + 'User-Agent': 'RudderLabs', + 'Content-Type': 'application/json', + Authorization: 'Bearer validApiKey', + }, + }, + httpRes: { + status: 200, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/contacts/v1/contact/batch/', + method: 'POST', + headers: { + 'User-Agent': 'RudderLabs', + 'Content-Type': 'application/json', + Authorization: 'Bearer inValidApiKey', + }, + }, + httpRes: { + status: 400, + data: { + status: 'error', + message: 'Errors found processing batch update', + correlationId: 'a716ef20-79df-44d4-98bd-9136af7bdefc', + invalidEmails: ['identify111052@test.con'], + failureMessages: [ + { + index: 1, + error: { + status: 'error', + message: 'Email address identify111052@test.con is invalid', + }, + }, + ], + }, + }, + }, + { + httpReq: { + url: 'https://track.hubspot.com/v1/event', + method: 'GET', + params: { + _a: 'dummy-hubId', + _n: 'test track event HS', + _m: 4.99, + email: 'testhubspot2@email.com', + firstname: 'Test Hubspot', + }, + }, + httpRes: { + status: 200, + data: {}, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer validAccessToken', + }, + }, + httpRes: { + status: 200, + data: { + status: 'COMPLETE', + results: [ + { + id: '44188066992', + properties: { + createdate: '2024-07-31T03:21:03.176Z', + email: 'testuser31848@testmail.com', + hs_all_contact_vids: '44188066992', + hs_email_domain: 'testmail.com', + hs_is_contact: 'true', + hs_is_unworked: 'true', + hs_lifecyclestage_lead_date: '2024-07-31T03:21:03.176Z', + hs_membership_has_accessed_private_content: '0', + hs_object_id: '44188066992', + hs_object_source: 'INTEGRATION', + hs_object_source_id: '3209723', + hs_object_source_label: 'INTEGRATION', + hs_pipeline: 'contacts-lifecycle-pipeline', + hs_registered_member: '0', + lastmodifieddate: '2024-07-31T03:21:03.176Z', + lifecyclestage: 'lead', + }, + createdAt: '2024-07-31T03:21:03.176Z', + updatedAt: '2024-07-31T03:21:03.176Z', + archived: false, + }, + { + id: '44188066993', + properties: { + createdate: '2024-07-31T03:21:03.176Z', + email: 'testuser31847@testmail.com', + hs_all_contact_vids: '44188066993', + hs_email_domain: 'testmail.com', + hs_is_contact: 'true', + hs_is_unworked: 'true', + hs_lifecyclestage_lead_date: '2024-07-31T03:21:03.176Z', + hs_membership_has_accessed_private_content: '0', + hs_object_id: '44188066993', + hs_object_source: 'INTEGRATION', + hs_object_source_id: '3209723', + hs_object_source_label: 'INTEGRATION', + hs_pipeline: 'contacts-lifecycle-pipeline', + hs_registered_member: '0', + lastmodifieddate: '2024-07-31T03:21:03.176Z', + lifecyclestage: 'lead', + }, + createdAt: '2024-07-31T03:21:03.176Z', + updatedAt: '2024-07-31T03:21:03.176Z', + archived: false, + }, + ], + startedAt: '2024-07-31T03:21:03.133Z', + completedAt: '2024-07-31T03:21:03.412Z', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/events/v3/send', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + }, + httpRes: { + status: 200, + data: {}, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/events/v3/send', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer invalid-dummy-access-token', + }, + }, + httpRes: { + status: 401, + data: { + status: 'error', + message: + 'Authentication credentials not found. This API supports OAuth 2.0 authentication and you can find more details at https://developers.hubspot.com/docs/methods/auth/oauth-overview', + correlationId: '501651f6-bb90-40f1-b0db-349f62916993', + category: 'INVALID_AUTHENTICATION', + }, + }, + }, + { + httpReq: { + url: 'https://api.hubapi.com/crm/v3/associations/companies/contacts/batch/create', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer dummy-access-token', + }, + }, + httpRes: { + status: 201, + data: { + completedAt: '2024-07-31T04:46:34.391Z', + requestedAt: '2024-07-31T04:46:34.391Z', + startedAt: '2024-07-31T04:46:34.391Z', + results: [ + { + from: { + id: '9405415215', + }, + to: { + id: '1', + }, + type: 'contact_to_company', + }, + ], + status: 'PENDING', + }, + }, + }, ]; diff --git a/test/integrations/destinations/hs/router/data.ts b/test/integrations/destinations/hs/router/data.ts index e12efef4d0..989a581e55 100644 --- a/test/integrations/destinations/hs/router/data.ts +++ b/test/integrations/destinations/hs/router/data.ts @@ -1913,6 +1913,937 @@ export const data = [ }, }, }, + { + name: 'hs', + description: 'if dontBatch is true we are not going to create a batch out of those events', + feature: 'router', + module: 'destination', + version: 'v0', + scenario: 'buisness', + id: 'dontbatchtrue', + successCriteria: + 'should not create a batch with the events if that events contains dontBatch true', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.461+05:30', + userId: 'sample_user_id425', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow', + email: 'identify425@test.com', + phone: '9112340425', + lastname: 'Sparrow', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + timestamp: '2024-05-23T16:49:57.070+05:30', + receivedAt: '2024-05-23T16:49:57.071+05:30', + anonymousId: '8d872292709c6fbe', + }, + metadata: { + jobId: 1, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + dontBatch: true, + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.461+05:30', + userId: 'sample_user_id738', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow738', + email: 'identify425@test.con', + phone: '9112340738', + lastname: 'Sparrow738', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + timestamp: '2024-05-23T16:49:57.071+05:30', + anonymousId: '8d872292709c6fbe738', + }, + metadata: { + userId: '<<>>8d872292709c6fbe738<<>>sample_user_id738', + jobId: 2, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + workerAssignedTime: '2024-05-23T16:49:58.569269+05:30', + dontBatch: true, + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.462+05:30', + userId: 'sample_user_id803', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow803', + email: 'identify803@test.com', + phone: '9112340803', + lastname: 'Sparrow803', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + anonymousId: '8d872292709c6fbe803', + originalTimestamp: '2024-05-23T16:49:57.462+05:30', + }, + metadata: { + userId: '<<>>8d872292709c6fbe803<<>>sample_user_id803', + jobId: 3, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.462+05:30', + userId: 'sample_user_id804', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow804', + email: 'identify804@test.con', + phone: '9112340804', + lastname: 'Sparrow804', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + anonymousId: '8d872292709c6fbe804', + originalTimestamp: '2024-05-23T16:49:57.462+05:30', + }, + metadata: { + userId: '<<>>8d872292709c6fbe804<<>>sample_user_id804', + jobId: 4, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + dontBatch: false, + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + ], + destType: 'hs', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: true, + batchedRequest: { + body: { + FORM: {}, + JSON: { + inputs: [ + { + properties: { + email: 'identify803@test.com', + firstname: 'John', + lastname: 'Sparrow803', + phone: '9112340803', + }, + }, + { + properties: { + email: 'identify804@test.con', + firstname: 'John', + lastname: 'Sparrow804', + phone: '9112340804', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + files: {}, + headers: { + Authorization: 'Bearer dontbatchtrueaccesstoken', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + IsProcessorEnabled: true, + Name: 'hs-1', + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + Transformations: [], + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + metadata: [ + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + jobId: 3, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + userId: '<<>>8d872292709c6fbe803<<>>sample_user_id803', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + dontBatch: false, + jobId: 4, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + userId: '<<>>8d872292709c6fbe804<<>>sample_user_id804', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + ], + statusCode: 200, + }, + { + batched: false, + batchedRequest: { + body: { + FORM: {}, + JSON: { + properties: { + email: 'identify425@test.com', + firstname: 'John', + lastname: 'Sparrow', + phone: '9112340425', + }, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts', + files: {}, + headers: { + Authorization: 'Bearer dontbatchtrueaccesstoken', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + IsProcessorEnabled: true, + Name: 'hs-1', + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + Transformations: [], + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + metadata: [ + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + dontBatch: true, + jobId: 1, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + ], + statusCode: 200, + }, + { + batched: false, + batchedRequest: { + body: { + FORM: {}, + JSON: { + properties: { + email: 'identify425@test.con', + firstname: 'John', + lastname: 'Sparrow738', + phone: '9112340738', + }, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts', + files: {}, + headers: { + Authorization: 'Bearer dontbatchtrueaccesstoken', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + IsProcessorEnabled: true, + Name: 'hs-1', + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + Transformations: [], + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + metadata: [ + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + dontBatch: true, + jobId: 2, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + userId: '<<>>8d872292709c6fbe738<<>>sample_user_id738', + workerAssignedTime: '2024-05-23T16:49:58.569269+05:30', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + ], + statusCode: 200, + }, + ], + }, + }, + }, + }, + { + name: 'hs', + description: 'if dontBatch is not available we are considering those as dontbatch false', + feature: 'router', + module: 'destination', + version: 'v0', + scenario: 'buisness', + id: 'dontbatchundefined', + successCriteria: 'all events should be batched', + input: { + request: { + body: { + input: [ + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.461+05:30', + userId: 'sample_user_id425', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow', + email: 'identify425@test.com', + phone: '9112340425', + lastname: 'Sparrow', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + timestamp: '2024-05-23T16:49:57.070+05:30', + receivedAt: '2024-05-23T16:49:57.071+05:30', + anonymousId: '8d872292709c6fbe', + }, + metadata: { + jobId: 1, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + { + message: { + type: 'identify', + sentAt: '2024-05-23T16:49:57.461+05:30', + userId: 'sample_user_id738', + channel: 'mobile', + context: { + traits: { + age: '30', + name: 'John Sparrow738', + email: 'identify425@test.con', + phone: '9112340738', + lastname: 'Sparrow738', + firstname: 'John', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)', + }, + timestamp: '2024-05-23T16:49:57.071+05:30', + anonymousId: '8d872292709c6fbe738', + }, + metadata: { + userId: '<<>>8d872292709c6fbe738<<>>sample_user_id738', + jobId: 2, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + workerAssignedTime: '2024-05-23T16:49:58.569269+05:30', + }, + destination: { + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + Name: 'hs-1', + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + Transformations: [], + IsProcessorEnabled: true, + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + }, + request: { + query: {}, + }, + }, + ], + destType: 'hs', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: true, + batchedRequest: { + body: { + FORM: {}, + JSON: { + inputs: [ + { + properties: { + email: 'identify425@test.com', + firstname: 'John', + lastname: 'Sparrow', + phone: '9112340425', + }, + }, + { + properties: { + email: 'identify425@test.con', + firstname: 'John', + lastname: 'Sparrow738', + phone: '9112340738', + }, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: 'https://api.hubapi.com/crm/v3/objects/contacts/batch/create', + files: {}, + headers: { + Authorization: 'Bearer dontbatchtrueaccesstoken', + 'Content-Type': 'application/json', + }, + method: 'POST', + params: {}, + type: 'REST', + version: '1', + }, + destination: { + Config: { + accessToken: 'dontbatchtrueaccesstoken', + apiKey: '', + apiVersion: 'newApi', + authorizationType: 'newPrivateAppApi', + blacklistedEvents: [], + connectionMode: 'cloud', + doAssociation: false, + eventDelivery: false, + eventDeliveryTS: 1687884567403, + eventFilteringOption: 'disable', + hubID: '25092171', + hubspotEvents: [ + { + eventProperties: [ + { + from: 'first_name', + to: 'first_name', + }, + { + from: 'last_name', + to: 'last_name', + }, + ], + hubspotEventName: 'pedummy-hubId_rs_hub_chair', + rsEventName: 'Order Complete', + }, + ], + ketchConsentPurposes: [ + { + purpose: '', + }, + ], + lookupField: 'email', + oneTrustCookieCategories: [], + useNativeSDK: false, + whitelistedEvents: [], + }, + Enabled: true, + ID: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + IsProcessorEnabled: true, + Name: 'hs-1', + RevisionID: '2gqf7Mc7WEwqQtQy3G105O22s3D', + Transformations: [], + WorkspaceID: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + metadata: [ + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + jobId: 1, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + { + destinationId: '2RnSBhn4zPTOF8NdqAIrnVPPnfr', + jobId: 2, + sourceId: '2RnN36pc7p5lzoApxZnDfRnYFx0', + transformAt: 'router', + userId: '<<>>8d872292709c6fbe738<<>>sample_user_id738', + workerAssignedTime: '2024-05-23T16:49:58.569269+05:30', + workspaceId: '2QapBTEvZYwuf6O9KB5AEvvBt8j', + }, + ], + statusCode: 200, + }, + ], + }, + }, + }, + }, { name: 'hs', description: 'router job ordering ', From c4a01eb9589c2af50087e4628eb79e510dc01245 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 12 Aug 2024 08:20:29 +0000 Subject: [PATCH 135/201] chore(release): 1.75.0 --- CHANGELOG.md | 13 +++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5659f1fd9a..9305e68efa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.75.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.74.1...v1.75.0) (2024-08-12) + + +### Features + +* move hubspot to transformer proxy to enable partial batch handling ([#3308](https://github.com/rudderlabs/rudder-transformer/issues/3308)) ([8450021](https://github.com/rudderlabs/rudder-transformer/commit/8450021672c51ac798ec0aeab422f5fceea5e53e)) + + +### Bug Fixes + +* handle attentive tag null, undefined properties ([#3647](https://github.com/rudderlabs/rudder-transformer/issues/3647)) ([9327925](https://github.com/rudderlabs/rudder-transformer/commit/932792561c98833baf9881a83ee36ae5000e37b4)) +* handle null values for braze dedupe ([#3638](https://github.com/rudderlabs/rudder-transformer/issues/3638)) ([0a9b681](https://github.com/rudderlabs/rudder-transformer/commit/0a9b68118241158623d45ee28896377296bafd91)) + ### [1.74.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.74.0...v1.74.1) (2024-08-08) diff --git a/package-lock.json b/package-lock.json index b5db5aa72e..e765269ec7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.74.1", + "version": "1.75.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.74.1", + "version": "1.75.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index dce50ee36d..2dbaeda368 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.74.1", + "version": "1.75.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 0835d9f52e798b8ff7c4e58ad20cc77118cab6ad Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Tue, 13 Aug 2024 11:08:41 +0530 Subject: [PATCH 136/201] chore: add clean up script --- .../scripts/personalize_cleanup.sh | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/v0/destinations/personalize/scripts/personalize_cleanup.sh diff --git a/src/v0/destinations/personalize/scripts/personalize_cleanup.sh b/src/v0/destinations/personalize/scripts/personalize_cleanup.sh new file mode 100644 index 0000000000..5bf6426fa6 --- /dev/null +++ b/src/v0/destinations/personalize/scripts/personalize_cleanup.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Set the AWS region +AWS_REGION="us-east-1" + +# Function to wait for dataset deletion +wait_for_deletion() { + local resource_arn=$1 + local resource_type=$2 + local status="" + + echo "Waiting for $resource_type $resource_arn to be deleted..." + + while true; do + if [ "$resource_type" == "dataset" ]; then + status=$(aws personalize describe-dataset --dataset-arn $resource_arn --region $AWS_REGION --query "dataset.status" --output text 2>/dev/null) + fi + + if [ -z "$status" ]; then + echo "$resource_type $resource_arn has been deleted." + break + else + echo "$resource_type $resource_arn status: $status. Waiting..." + sleep 10 + fi + done +} + +# Delete dataset groups +for dataset_group_arn in $(aws personalize list-dataset-groups --region $AWS_REGION --query "datasetGroups[*].datasetGroupArn" --output text); do + + echo "Processing dataset group: $dataset_group_arn" + + # List and delete all event trackers in the dataset group + for event_tracker_arn in $(aws personalize list-event-trackers --dataset-group-arn $dataset_group_arn --region $AWS_REGION --query "eventTrackers[*].eventTrackerArn" --output text); do + echo "Deleting event tracker $event_tracker_arn" + aws personalize delete-event-tracker --event-tracker-arn $event_tracker_arn --region $AWS_REGION + done + + # List and delete all solutions in the dataset group + for solution_arn in $(aws personalize list-solutions --dataset-group-arn $dataset_group_arn --region $AWS_REGION --query "solutions[*].solutionArn" --output text); do + + # List and delete all campaigns for the solution + for campaign_arn in $(aws personalize list-campaigns --solution-arn $solution_arn --region $AWS_REGION --query "campaigns[*].campaignArn" --output text); do + echo "Deleting campaign $campaign_arn" + aws personalize delete-campaign --campaign-arn $campaign_arn --region $AWS_REGION + done + + echo "Deleting solution $solution_arn" + aws personalize delete-solution --solution-arn $solution_arn --region $AWS_REGION + done + + # List and delete all datasets in the dataset group + for dataset_arn in $(aws personalize list-datasets --dataset-group-arn $dataset_group_arn --region $AWS_REGION --query "datasets[*].datasetArn" --output text); do + echo "Deleting dataset $dataset_arn" + aws personalize delete-dataset --dataset-arn $dataset_arn --region $AWS_REGION + wait_for_deletion $dataset_arn "dataset" + done + + # Finally, delete the dataset group + echo "Deleting dataset group $dataset_group_arn" + aws personalize delete-dataset-group --dataset-group-arn $dataset_group_arn --region $AWS_REGION + wait_for_deletion $dataset_group_arn "dataset_group" +done + +echo "All datasets, event trackers, solutions, campaigns, and dataset groups have been deleted." + From 62cdc4641d44d79e21949722660173df4c749f24 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:22:57 +0530 Subject: [PATCH 137/201] fix: add validation for concurrent_modification error (#3654) --- .../networkHandler.js | 14 ++-- .../dataDelivery/business.ts | 67 +++++++++++++++++++ .../network.ts | 48 +++++++++++++ 3 files changed, 125 insertions(+), 4 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js index 6491215a93..8fa4867b78 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/networkHandler.js @@ -1,7 +1,7 @@ const { NetworkError } = require('@rudderstack/integrations-lib'); +const get = require('get-value'); const { prepareProxyRequest, handleHttpRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util/index'); - const { processAxiosResponse, getDynamicErrorType, @@ -148,9 +148,15 @@ const gaAudienceProxyRequest = async (request) => { }; const gaAudienceRespHandler = (destResponse, stageMsg) => { - const { status, response } = destResponse; - // const respAttributes = response["@attributes"] || null; - // const { stat, err_code: errorCode } = respAttributes; + let { status } = destResponse; + const { response } = destResponse; + + if ( + status === 400 && + get(response, 'error.details.0.errors.0.errorCode.databaseError') === 'CONCURRENT_MODIFICATION' + ) { + status = 500; + } throw new NetworkError( `${JSON.stringify(response)} ${stageMsg}`, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts index c0d8454548..ee9f7bbae2 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts @@ -373,4 +373,71 @@ export const testScenariosForV1API = [ }, }, }, + { + id: 'garl_v1_scenario_4', + name: 'google_adwords_remarketing_lists', + description: + '[Proxy v1 API] :: getting concurrent_modification error code while sending request to GA audience API', + successCriteria: 'Should return 500 with destination response', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + headers: commonHeaders, + params: { ...commonParams, customerId: 'wrongCustomerId' }, + JSON: validRequestPayload2, + endpoint: + 'https://googleads.googleapis.com/v15/customers/wrongCustomerId/offlineUserDataJobs', + }, + metadataArray, + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + '{"error":{"code":400,"message":"Request contains an invalid argument.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"databaseError":"CONCURRENT_MODIFICATION"},"message":"Multiple requests were attempting to modify the same resource at once. Retry the request."}],"requestId":"08X6xmM1WJPf_lW1ppYfsA"}]}} during ga_audience response transformation', + response: [ + { + error: + '{"error":{"code":400,"message":"Request contains an invalid argument.","status":"INVALID_ARGUMENT","details":[{"@type":"type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure","errors":[{"errorCode":{"databaseError":"CONCURRENT_MODIFICATION"},"message":"Multiple requests were attempting to modify the same resource at once. Retry the request."}],"requestId":"08X6xmM1WJPf_lW1ppYfsA"}]}} during ga_audience response transformation', + metadata: { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 1, + secret: { + access_token: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + statusCode: 500, + }, + ], + statTags: { + destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'retryable', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', + }, + status: 500, + }, + }, + }, + }, + }, ]; diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts index d17f518c46..9c2c7f1709 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts @@ -289,4 +289,52 @@ export const networkCallsData = [ }, }, }, + { + httpReq: { + url: 'https://googleads.googleapis.com/v15/customers/wrongCustomerId/offlineUserDataJobs:create', + data: { + job: { + type: 'CUSTOMER_MATCH_USER_LIST', + customerMatchUserListMetadata: { + userList: 'customers/wrongCustomerId/userLists/709078448', + consent: { + adPersonalization: 'UNSPECIFIED', + adUserData: 'UNSPECIFIED', + }, + }, + }, + }, + headers: { + Authorization: 'Bearer dummy-access', + 'Content-Type': 'application/json', + 'developer-token': 'dummy-dev-token', + }, + method: 'POST', + }, + httpRes: { + status: 400, + data: { + error: { + code: 400, + message: 'Request contains an invalid argument.', + status: 'INVALID_ARGUMENT', + details: [ + { + '@type': 'type.googleapis.com/google.ads.googleads.v16.errors.GoogleAdsFailure', + errors: [ + { + errorCode: { + databaseError: 'CONCURRENT_MODIFICATION', + }, + message: + 'Multiple requests were attempting to modify the same resource at once. Retry the request.', + }, + ], + requestId: '08X6xmM1WJPf_lW1ppYfsA', + }, + ], + }, + }, + }, + }, ]; From 6c51487183b6b0b755620aac6cd51c2ffc966102 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:27:58 +0530 Subject: [PATCH 138/201] fix: clevertap bugsnag issue (#3656) fix: fixing clevertap bugsnag issue --- src/v0/destinations/clevertap/transform.js | 2 +- .../destinations/clevertap/processor/data.ts | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/v0/destinations/clevertap/transform.js b/src/v0/destinations/clevertap/transform.js index 214f9e6409..e558b119f1 100644 --- a/src/v0/destinations/clevertap/transform.js +++ b/src/v0/destinations/clevertap/transform.js @@ -316,7 +316,7 @@ const responseBuilderSimple = (message, category, destination) => { // For 'Order Completed' type of events we are mapping it as 'Charged' // Special event in Clevertap. // Source: https://developer.clevertap.com/docs/concepts-events#recording-customer-purchases - if (get(message.event) && get(message.event).toLowerCase() === 'order completed') { + if (get(message.event) && get(message.event).toString().toLowerCase() === 'order completed') { eventPayload = { evtName: 'Charged', evtData: constructPayload(message, MAPPING_CONFIG[CONFIG_CATEGORIES.ECOM.name]), diff --git a/test/integrations/destinations/clevertap/processor/data.ts b/test/integrations/destinations/clevertap/processor/data.ts index 49647e1937..f15fc409fb 100644 --- a/test/integrations/destinations/clevertap/processor/data.ts +++ b/test/integrations/destinations/clevertap/processor/data.ts @@ -3354,4 +3354,82 @@ export const data = [ }, }, }, + { + name: 'clevertap', + description: 'Should not throw bugsnag error if event is not of type string', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { + Config: { + passcode: 'sample_passcode', + accountId: '476550467', + trackAnonymous: true, + enableObjectIdMapping: false, + }, + }, + message: { + type: 'track', + userId: 'user123', + event: 'Product Purchased', + properties: { + name: "Rubik's Cube", + revenue: 4.99, + }, + context: { + ip: '14.5.67.21', + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.clevertap.com/1/upload', + headers: { + 'X-CleverTap-Account-Id': '476550467', + 'X-CleverTap-Passcode': 'sample_passcode', + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: { + d: [ + { + evtName: 'Product Purchased', + evtData: { + name: "Rubik's Cube", + revenue: 4.99, + }, + type: 'event', + identity: 'user123', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, ]; From 31b03fc022ace0cda8df798c50e4764a9703c23b Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:58:48 +0530 Subject: [PATCH 139/201] fix: snapchat conversion bugsnag issue (#3657) * fix: fixing snapchat bugsnag issue * fix: code review suggestion Co-authored-by: Sankeerth --------- Co-authored-by: Sankeerth --- .../snapchat_conversion/transform.js | 4 +- .../snapchat_conversion/processor/data.ts | 114 ++++++++++++++++++ 2 files changed, 116 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/snapchat_conversion/transform.js b/src/v0/destinations/snapchat_conversion/transform.js index 6fec6313a4..dbb2865e4a 100644 --- a/src/v0/destinations/snapchat_conversion/transform.js +++ b/src/v0/destinations/snapchat_conversion/transform.js @@ -179,7 +179,7 @@ const getEventConversionType = (message) => { // Returns the response for the track event after constructing the payload and setting necessary fields const trackResponseBuilder = (message, { Config }, mappedEvent) => { let payload = {}; - const event = mappedEvent.trim().replace(/\s+/g, '_'); + const event = mappedEvent?.toString().trim().replace(/\s+/g, '_'); const eventConversionType = getEventConversionType(message); const { apiKey, pixelId, snapAppId, appId, deduplicationKey, enableDeduplication } = Config; validateEventConfiguration(eventConversionType, pixelId, snapAppId, appId); @@ -305,7 +305,7 @@ const eventMappingHandler = (message, destination) => { if (!event) { throw new InstrumentationError('Event name is required'); } - event = event.trim().replace(/\s+/g, '_'); + event = event.toString().trim().replace(/\s+/g, '_'); let { rudderEventsToSnapEvents } = destination.Config; const mappedEvents = new Set(); diff --git a/test/integrations/destinations/snapchat_conversion/processor/data.ts b/test/integrations/destinations/snapchat_conversion/processor/data.ts index 7de7ed9b8d..b7fde67c4e 100644 --- a/test/integrations/destinations/snapchat_conversion/processor/data.ts +++ b/test/integrations/destinations/snapchat_conversion/processor/data.ts @@ -4734,6 +4734,120 @@ export const data = [ }, }, }, + { + name: 'snapchat_conversion', + description: "Test case non string event doesn't match with snapchat events", + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + messageId: 'ec5481b6-a926-4d2e-b293-0b3a77c4d3be', + originalTimestamp: '2022-04-22T10:57:58Z', + anonymousId: 'ea5cfab2-3961-4d8a-8187-3d1858c99090', + context: { + traits: { + email: 'test@email.com', + phone: '+91 2111111 ', + }, + app: { + build: '1.0.0', + name: 'RudderLabs JavaScript SDK', + namespace: 'com.rudderlabs.javascript', + version: '1.0.0', + }, + device: { + advertisingId: 'T0T0T072-5e28-45a1-9eda-ce22a3e36d1a', + id: '3f034872-5e28-45a1-9eda-ce22a3e36d1a', + manufacturer: 'Google', + name: 'generic_x86_arm', + type: 'ios', + attTrackingStatus: 3, + }, + library: { + name: 'RudderLabs JavaScript SDK', + version: '1.0.0', + }, + locale: 'en-US', + os: { + name: 'iOS', + version: '14.4.1', + }, + screen: { + density: 2, + }, + externalId: [ + { + type: 'ga4AppInstanceId', + id: 'f0dd99v4f979fb997ce453373900f891', + }, + ], + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', + }, + type: 'track', + event: 1234, + properties: { + query: 't-shirts', + event_conversion_type: 'web', + }, + integrations: { + All: true, + }, + sentAt: '2022-04-22T10:57:58Z', + }, + destination: { + DestinationDefinition: { + Config: { + cdkV2Enabled: false, + }, + }, + Config: { + pixelId: 'dummyPixelId', + apiKey: 'dummyApiKey', + rudderEventsToSnapEvents: [], + }, + }, + metadata: { + jobId: 45, + destinationId: 'd2', + workspaceId: 'w2', + }, + }, + ], + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + jobId: 45, + destinationId: 'd2', + workspaceId: 'w2', + }, + error: "Event 1234 doesn't match with Snapchat Events!", + statTags: { + destType: 'SNAPCHAT_CONVERSION', + destinationId: 'd2', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'native', + module: 'destination', + workspaceId: 'w2', + }, + statusCode: 400, + }, + ], + }, + }, + }, ].map((tc) => ({ ...tc, mockFns: (_) => { From 1cb3f86c894f30bdf04df870484c6df3a956f36e Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:12:00 +0530 Subject: [PATCH 140/201] fix: validation for iterable object of HS (#3653) --- src/v0/destinations/hs/transform.js | 2 +- src/v0/destinations/hs/util.js | 9 + src/v0/destinations/hs/util.test.js | 19 ++ src/v1/destinations/hs/networkHandler.ts | 1 + .../destinations/hs/router/data.ts | 213 ++++++++++++++++++ test/integrations/testUtils.ts | 2 +- 6 files changed, 244 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/hs/transform.js b/src/v0/destinations/hs/transform.js index 1d1a81b6b0..b6ca213f03 100644 --- a/src/v0/destinations/hs/transform.js +++ b/src/v0/destinations/hs/transform.js @@ -107,6 +107,7 @@ const processBatchRouter = async (inputs, reqMetadata) => { errorRespList: tempInputs.map((input) => handleRtTfSingleEventError(input, error, reqMetadata), ), + dontBatchEvents: [], }; } @@ -192,7 +193,6 @@ const processRouterDest = async (inputs, reqMetadata) => { batchedResponseList.push(...response.batchedResponseList); dontBatchEvents.push(...response.dontBatchEvents); }); - console.log(JSON.stringify([...batchedResponseList, ...errorRespList, ...dontBatchEvents])); return [...batchedResponseList, ...errorRespList, ...dontBatchEvents]; }; diff --git a/src/v0/destinations/hs/util.js b/src/v0/destinations/hs/util.js index fc22a89d69..56ec6e4167 100644 --- a/src/v0/destinations/hs/util.js +++ b/src/v0/destinations/hs/util.js @@ -875,6 +875,14 @@ const convertToResponseFormat = (successRespListWithDontBatchTrue) => { return response; }; +const isIterable = (obj) => { + // checks for null and undefined + if (obj == null) { + return false; + } + return typeof obj[Symbol.iterator] === 'function'; +}; + module.exports = { validateDestinationConfig, addExternalIdToHSTraits, @@ -895,4 +903,5 @@ module.exports = { extractIDsForSearchAPI, getRequestData, convertToResponseFormat, + isIterable, }; diff --git a/src/v0/destinations/hs/util.test.js b/src/v0/destinations/hs/util.test.js index ea2e10dc3d..819baff83c 100644 --- a/src/v0/destinations/hs/util.test.js +++ b/src/v0/destinations/hs/util.test.js @@ -3,6 +3,7 @@ const { extractIDsForSearchAPI, validatePayloadDataTypes, getObjectAndIdentifierType, + isIterable, } = require('./util'); const { primaryToSecondaryFields } = require('./config'); @@ -239,3 +240,21 @@ describe('getRequestDataAndRequestOptions utility test cases', () => { expect(requestData).toEqual(expectedRequestData); }); }); + +describe('isIterable utility test cases', () => { + it('should return true when the input is an array', () => { + const input = [1, 2, 3]; + const result = isIterable(input); + expect(result).toBe(true); + }); + it('should return false when the input is null', () => { + const input = null; + const result = isIterable(input); + expect(result).toBe(false); + }); + it('should return false when the input is undefined', () => { + const input = undefined; + const result = isIterable(input); + expect(result).toBe(false); + }); +}); diff --git a/src/v1/destinations/hs/networkHandler.ts b/src/v1/destinations/hs/networkHandler.ts index 8293a7240c..8dd22b465f 100644 --- a/src/v1/destinations/hs/networkHandler.ts +++ b/src/v1/destinations/hs/networkHandler.ts @@ -30,6 +30,7 @@ const findFeatureandVersion = (response, rudderJobMetadata, destinationConfig) = if ( Array.isArray(results) && results.length !== rudderJobMetadata.length && + Array.isArray(errors) && results.length + errors.length === rudderJobMetadata.length ) return 'newApiWithMultipleEventsAndErrors'; diff --git a/test/integrations/destinations/hs/router/data.ts b/test/integrations/destinations/hs/router/data.ts index 989a581e55..b47d6b7f07 100644 --- a/test/integrations/destinations/hs/router/data.ts +++ b/test/integrations/destinations/hs/router/data.ts @@ -3394,4 +3394,217 @@ export const data = [ }, }, }, + { + name: 'hs', + description: 'test when get properties call failed', + feature: 'router', + module: 'destination', + id: 'routerGetPropertiesCallFailed', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + channel: 'web', + context: { + mappedToDestination: true, + externalId: [ + { identifierType: 'email', id: 'testhubspot2@email.com', type: 'HS-lead' }, + ], + sources: { + job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', + task_id: 'vw_rs_mailchimp_mocked_hg_data', + version: 'v1.8.1', + batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', + job_run_id: 'c8el40l6e87v0c4hkbl0', + task_run_id: 'c8el40l6e87v0c4hkblg', + }, + }, + type: 'identify', + traits: { firstname: 'Test Hubspot', anonymousId: '12345', country: 'India' }, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: 'invalid-api-key', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + metadata: { jobId: 2, userId: 'u1' }, + }, + { + message: { + channel: 'web', + context: { + mappedToDestination: true, + externalId: [ + { identifierType: 'email', id: 'testhubspot@email.com', type: 'HS-lead' }, + ], + sources: { + job_id: '24c5HJxHomh6YCngEOCgjS5r1KX/Syncher', + task_id: 'vw_rs_mailchimp_mocked_hg_data', + version: 'v1.8.1', + batch_id: 'f252c69d-c40d-450e-bcd2-2cf26cb62762', + job_run_id: 'c8el40l6e87v0c4hkbl0', + task_run_id: 'c8el40l6e87v0c4hkblg', + }, + }, + type: 'identify', + traits: { firstname: 'Test Hubspot 1', anonymousId: '123451', country: 'India 1' }, + messageId: '50360b9c-ea8d-409c-b672-c9230f91cce5', + originalTimestamp: '2019-10-15T09:35:31.288Z', + anonymousId: '00000000000000000000000000', + userId: '12345', + integrations: { All: true }, + sentAt: '2019-10-14T09:03:22.563Z', + }, + destination: { + Config: { apiKey: 'invalid-api-key', hubID: 'dummy-hubId' }, + secretConfig: {}, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + name: 'Hubspot', + enabled: true, + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + deleted: false, + createdAt: '2020-12-30T08:39:32.005Z', + updatedAt: '2021-02-03T16:22:31.374Z', + destinationDefinition: { + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + displayName: 'Hubspot', + createdAt: '2020-04-09T09:24:31.794Z', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + transformations: [], + isConnectionEnabled: true, + isProcessorEnabled: true, + }, + metadata: { jobId: 3, userId: 'u1' }, + }, + ], + destType: 'hs', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + destination: { + Config: { + apiKey: 'invalid-api-key', + hubID: 'dummy-hubId', + }, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + createdAt: '2020-12-30T08:39:32.005Z', + deleted: false, + destinationDefinition: { + createdAt: '2020-04-09T09:24:31.794Z', + displayName: 'Hubspot', + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + enabled: true, + isConnectionEnabled: true, + isProcessorEnabled: true, + name: 'Hubspot', + secretConfig: {}, + transformations: [], + updatedAt: '2021-02-03T16:22:31.374Z', + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + }, + error: + '{"message":"Failed to get hubspot properties: {\\"status\\":\\"error\\",\\"message\\":\\"The API key provided is invalid. View or manage your API key here: https://app.hubspot.com/l/api-key/\\",\\"correlationId\\":\\"4d39ff11-e121-4514-bcd8-132a9dd1ff50\\",\\"category\\":\\"INVALID_AUTHENTICATION\\",\\"links\\":{\\"api key\\":\\"https://app.hubspot.com/l/api-key/\\"}}","destinationResponse":{"response":{"status":"error","message":"The API key provided is invalid. View or manage your API key here: https://app.hubspot.com/l/api-key/","correlationId":"4d39ff11-e121-4514-bcd8-132a9dd1ff50","category":"INVALID_AUTHENTICATION","links":{"api key":"https://app.hubspot.com/l/api-key/"}},"status":401}}', + metadata: [ + { + jobId: 2, + userId: 'u1', + }, + ], + statTags: { + destType: 'HS', + errorCategory: 'network', + errorType: 'aborted', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + statusCode: 401, + }, + { + batched: false, + destination: { + Config: { + apiKey: 'invalid-api-key', + hubID: 'dummy-hubId', + }, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + createdAt: '2020-12-30T08:39:32.005Z', + deleted: false, + destinationDefinition: { + createdAt: '2020-04-09T09:24:31.794Z', + displayName: 'Hubspot', + id: '1aIXqM806xAVm92nx07YwKbRrO9', + name: 'HS', + updatedAt: '2021-01-11T11:03:28.103Z', + }, + enabled: true, + isConnectionEnabled: true, + isProcessorEnabled: true, + name: 'Hubspot', + secretConfig: {}, + transformations: [], + updatedAt: '2021-02-03T16:22:31.374Z', + workspaceId: '1TSN08muJTZwH8iCDmnnRt1pmLd', + }, + error: + '{"message":"Failed to get hubspot properties: {\\"status\\":\\"error\\",\\"message\\":\\"The API key provided is invalid. View or manage your API key here: https://app.hubspot.com/l/api-key/\\",\\"correlationId\\":\\"4d39ff11-e121-4514-bcd8-132a9dd1ff50\\",\\"category\\":\\"INVALID_AUTHENTICATION\\",\\"links\\":{\\"api key\\":\\"https://app.hubspot.com/l/api-key/\\"}}","destinationResponse":{"response":{"status":"error","message":"The API key provided is invalid. View or manage your API key here: https://app.hubspot.com/l/api-key/","correlationId":"4d39ff11-e121-4514-bcd8-132a9dd1ff50","category":"INVALID_AUTHENTICATION","links":{"api key":"https://app.hubspot.com/l/api-key/"}},"status":401}}', + metadata: [ + { + jobId: 3, + userId: 'u1', + }, + ], + statTags: { + destType: 'HS', + errorCategory: 'network', + errorType: 'aborted', + feature: 'router', + implementation: 'native', + module: 'destination', + }, + statusCode: 401, + }, + ], + }, + }, + }, + }, ]; diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index bec79f8570..6eaf662c78 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -27,7 +27,7 @@ export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): strin if (opts.destination || opts.source) { testFilePaths = testFilePaths.filter((testFile) => - testFile.includes(opts.destination || opts.source), + testFile.includes(`${opts.destination}/` || opts.source), ); } if (opts.feature) { From 932a2968e95a51febc27b5ee2389f2631715545e Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 14 Aug 2024 07:44:18 +0000 Subject: [PATCH 141/201] chore(release): 1.75.1 --- CHANGELOG.md | 10 ++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9305e68efa..2e4a636b4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.75.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.75.0...v1.75.1) (2024-08-14) + + +### Bug Fixes + +* add validation for concurrent_modification error ([#3654](https://github.com/rudderlabs/rudder-transformer/issues/3654)) ([62cdc46](https://github.com/rudderlabs/rudder-transformer/commit/62cdc4641d44d79e21949722660173df4c749f24)) +* clevertap bugsnag issue ([#3656](https://github.com/rudderlabs/rudder-transformer/issues/3656)) ([6c51487](https://github.com/rudderlabs/rudder-transformer/commit/6c51487183b6b0b755620aac6cd51c2ffc966102)) +* snapchat conversion bugsnag issue ([#3657](https://github.com/rudderlabs/rudder-transformer/issues/3657)) ([31b03fc](https://github.com/rudderlabs/rudder-transformer/commit/31b03fc022ace0cda8df798c50e4764a9703c23b)) +* validation for iterable object of HS ([#3653](https://github.com/rudderlabs/rudder-transformer/issues/3653)) ([1cb3f86](https://github.com/rudderlabs/rudder-transformer/commit/1cb3f86c894f30bdf04df870484c6df3a956f36e)) + ## [1.75.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.74.1...v1.75.0) (2024-08-12) diff --git a/package-lock.json b/package-lock.json index e765269ec7..d16e52424a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.75.0", + "version": "1.75.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.75.0", + "version": "1.75.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 2dbaeda368..2dad49bba6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.75.0", + "version": "1.75.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 474f2bddc58e1962206e39d92514827f29f84c83 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Mon, 19 Aug 2024 15:22:25 +0530 Subject: [PATCH 142/201] feat: klaviyo onboard unsubscribe profile support (#3646) * feat: klaviyo onboard unsubscribe profile support * fix: reduce cognitive complexity --- src/v0/destinations/klaviyo/batchUtil.js | 91 +- src/v0/destinations/klaviyo/batchUtil.test.js | 3 + src/v0/destinations/klaviyo/config.js | 5 + src/v0/destinations/klaviyo/transformV2.js | 62 +- src/v0/destinations/klaviyo/util.js | 80 +- .../klaviyo/processor/groupTestDataV2.ts | 82 +- .../klaviyo/processor/identifyTestDataV2.ts | 112 ++- .../destinations/klaviyo/router/dataV2.ts | 784 ++++++++++++++++++ 8 files changed, 1143 insertions(+), 76 deletions(-) diff --git a/src/v0/destinations/klaviyo/batchUtil.js b/src/v0/destinations/klaviyo/batchUtil.js index 3e99e03deb..0351bd2e2f 100644 --- a/src/v0/destinations/klaviyo/batchUtil.js +++ b/src/v0/destinations/klaviyo/batchUtil.js @@ -25,16 +25,17 @@ const groupSubscribeResponsesUsingListIdV2 = (subscribeResponseList) => { /** * This function takes susbscription as input and batches them into a single request body * @param {subscription} - * subscription= {listId, subscriptionProfileList} + * subscription= {listId, subscriptionProfileList, operation} + * subscription.operation could be either subscribe or unsubscribe */ const generateBatchedSubscriptionRequest = (subscription, destination) => { const subscriptionPayloadResponse = defaultRequestConfig(); // fetching listId from first event as listId is same for all the events const profiles = []; // list of profiles to be subscribed - const { listId, subscriptionProfileList } = subscription; + const { listId, subscriptionProfileList, operation } = subscription; subscriptionProfileList.forEach((profileList) => profiles.push(...profileList)); - subscriptionPayloadResponse.body.JSON = getSubscriptionPayload(listId, profiles); - subscriptionPayloadResponse.endpoint = `${BASE_ENDPOINT}/api/profile-subscription-bulk-create-jobs`; + subscriptionPayloadResponse.body.JSON = getSubscriptionPayload(listId, profiles, operation); + subscriptionPayloadResponse.endpoint = `${BASE_ENDPOINT}/api/${operation === 'subscribe' ? 'profile-subscription-bulk-create-jobs' : 'profile-subscription-bulk-delete-jobs'}`; subscriptionPayloadResponse.headers = { Authorization: `Klaviyo-API-Key ${destination.Config.privateApiKey}`, 'Content-Type': JSON_MIME_TYPE, @@ -90,12 +91,12 @@ const populateArrWithRespectiveProfileData = ( * ex: * profileSubscriptionAndMetadataArr = [ { - subscription: { subscriptionProfileList, listId1 }, + subscription: { subscriptionProfileList, listId1, operation }, metadataList1, profiles: [respectiveProfiles for above metadata] }, { - subscription: { subscriptionProfile List With No Profiles, listId2 }, + subscription: { subscriptionProfile List With No Profiles, listId2, operation }, metadataList2, }, { @@ -107,10 +108,7 @@ const populateArrWithRespectiveProfileData = ( * @param {*} destination * @returns */ -const buildRequestsForProfileSubscriptionAndMetadataArr = ( - profileSubscriptionAndMetadataArr, - destination, -) => { +const buildProfileAndSubscriptionRequests = (profileSubscriptionAndMetadataArr, destination) => { const finalResponseList = []; profileSubscriptionAndMetadataArr.forEach((profileSubscriptionData) => { const batchedRequest = []; @@ -118,7 +116,7 @@ const buildRequestsForProfileSubscriptionAndMetadataArr = ( if (profileSubscriptionData.profiles?.length > 0) { batchedRequest.push(...getProfileRequests(profileSubscriptionData.profiles, destination)); } - + // following condition ensures if no subscriptions are present we won't build subscription payload if (profileSubscriptionData.subscription?.subscriptionProfileList?.length > 0) { batchedRequest.push( generateBatchedSubscriptionRequest(profileSubscriptionData.subscription, destination), @@ -132,46 +130,88 @@ const buildRequestsForProfileSubscriptionAndMetadataArr = ( return finalResponseList; }; -const batchRequestV2 = (subscribeRespList, profileRespList, destination) => { - const subscribeEventGroups = groupSubscribeResponsesUsingListIdV2(subscribeRespList); - let profileSubscriptionAndMetadataArr = []; - const metaDataIndexMap = new Map(); +/** + * This function updates the profileSubscriptionAndMetadataArr array with the subscription requests + * @param {*} subscribeStatusList + * @param {*} profilesList + * @param {*} operation + * @param {*} profileSubscriptionAndMetadataArr + * @param {*} metaDataIndexMap + */ +const updateArrWithSubscriptions = ( + subscribeStatusList, + profilesList, + operation, + profileSubscriptionAndMetadataArr, + metaDataIndexMap, +) => { + const subscribeEventGroups = groupSubscribeResponsesUsingListIdV2(subscribeStatusList); + Object.keys(subscribeEventGroups).forEach((listId) => { // eventChunks = [[e1,e2,e3,..batchSize],[e1,e2,e3,..batchSize]..] const eventChunks = lodash.chunk(subscribeEventGroups[listId], MAX_BATCH_SIZE); - eventChunks.forEach((chunk, index) => { + eventChunks.forEach((chunk) => { // get subscriptionProfiles for the chunk const subscriptionProfileList = chunk.map((event) => event.payload?.profile); // get metadata for this chunk const metadataList = chunk.map((event) => event.metadata); // get list of jobIds from the above metdadata const jobIdList = metadataList.map((metadata) => metadata.jobId); + // using length as index + const index = profileSubscriptionAndMetadataArr.length; // push the jobId: index to metadataIndex mapping which let us know the metadata respective payload index position in batched request jobIdList.forEach((jobId) => { metaDataIndexMap.set(jobId, index); }); profileSubscriptionAndMetadataArr.push({ - subscription: { subscriptionProfileList, listId }, + subscription: { subscriptionProfileList, listId, operation }, metadataList, profiles: [], }); }); }); - profileSubscriptionAndMetadataArr = populateArrWithRespectiveProfileData( +}; + +/** + * This function performs batching for the subscription and unsubscription requests and attaches respective profile request as well if present + * @param {*} subscribeList + * @param {*} unsubscribeList + * @param {*} profilesList + * @param {*} destination + * @returns + */ +const batchRequestV2 = (subscribeList, unsubscribeList, profilesList, destination) => { + const profileSubscriptionAndMetadataArr = []; + const metaDataIndexMap = new Map(); + updateArrWithSubscriptions( + subscribeList, + profilesList, + 'subscribe', profileSubscriptionAndMetadataArr, metaDataIndexMap, - profileRespList, + ); + updateArrWithSubscriptions( + unsubscribeList, + profilesList, + 'unsubscribe', + profileSubscriptionAndMetadataArr, + metaDataIndexMap, + ); + const subscriptionsAndProfileArr = populateArrWithRespectiveProfileData( + profileSubscriptionAndMetadataArr, + metaDataIndexMap, + profilesList, ); /* Till this point I have a profileSubscriptionAndMetadataArr containing the the events in one object for which batching has to happen in following format [ { - subscription: { subscriptionProfileList, listId1 }, + subscription: { subscriptionProfileList, listId1, operation }, metadataList1, profiles: [respectiveProfiles for above metadata] }, { - subscription: { subscriptionProfile List With No Profiles, listId2 }, + subscription: { subscriptionProfile List With No Profiles, listId2, operation }, metadataList2, }, { @@ -180,14 +220,11 @@ const batchRequestV2 = (subscribeRespList, profileRespList, destination) => { } ] */ - return buildRequestsForProfileSubscriptionAndMetadataArr( - profileSubscriptionAndMetadataArr, - destination, - ); + return buildProfileAndSubscriptionRequests(subscriptionsAndProfileArr, destination); /* for identify calls with batching batched with identify with no batching - we will sonctruct O/P as: + we will construct O/P as: [ - [2 calls for identifywith batching], + [2 calls for identify with batching], [1 call identify calls with batching] ] */ diff --git a/src/v0/destinations/klaviyo/batchUtil.test.js b/src/v0/destinations/klaviyo/batchUtil.test.js index af1afd8670..9c04a402ca 100644 --- a/src/v0/destinations/klaviyo/batchUtil.test.js +++ b/src/v0/destinations/klaviyo/batchUtil.test.js @@ -1,3 +1,4 @@ +const { OperatorType } = require('@rudderstack/json-template-engine'); const { groupSubscribeResponsesUsingListIdV2, populateArrWithRespectiveProfileData, @@ -94,6 +95,7 @@ describe('generateBatchedSubscriptionRequest', () => { const subscription = { listId: 'test-list-id', subscriptionProfileList: [[{ id: 'profile1' }, { id: 'profile2' }], [{ id: 'profile3' }]], + operation: 'subscribe', }; const destination = { Config: { @@ -144,6 +146,7 @@ describe('generateBatchedSubscriptionRequest', () => { const subscription = { listId: 'test-list-id', subscriptionProfileList: [], + operation: 'subscribe', }; const destination = { Config: { diff --git a/src/v0/destinations/klaviyo/config.js b/src/v0/destinations/klaviyo/config.js index 54216852f7..9f907330df 100644 --- a/src/v0/destinations/klaviyo/config.js +++ b/src/v0/destinations/klaviyo/config.js @@ -19,6 +19,11 @@ const CONFIG_CATEGORIES = { VIEWED_PRODUCT: { name: 'ViewedProduct' }, ADDED_TO_CART: { name: 'AddedToCart' }, ITEMS: { name: 'Items' }, + SUBSCRIBE: { name: 'KlaviyoProfileV2', apiUrl: '/api/profile-subscription-bulk-create-jobs' }, + UNSUBSCRIBE: { + name: 'KlaviyoProfileV2', + apiUrl: '/api/profile-subscription-bulk-delete-jobs', + }, }; const ecomExclusionKeys = [ 'name', diff --git a/src/v0/destinations/klaviyo/transformV2.js b/src/v0/destinations/klaviyo/transformV2.js index ad98d2f559..6d04cb8644 100644 --- a/src/v0/destinations/klaviyo/transformV2.js +++ b/src/v0/destinations/klaviyo/transformV2.js @@ -7,9 +7,9 @@ const { EventType, MappedToDestinationKey } = require('../../../constants'); const { CONFIG_CATEGORIES, MAPPING_CONFIG } = require('./config'); const { constructProfile, - subscribeUserToListV2, + subscribeOrUnsubscribeUserToListV2, buildRequest, - buildSubscriptionRequest, + buildSubscriptionOrUnsubscriptionPayload, getTrackRequests, fetchTransformedEvents, addSubscribeFlagToTraits, @@ -24,6 +24,7 @@ const { adduserIdFromExternalId, groupEventsByType, flattenJson, + isDefinedAndNotNull, } = require('../../util'); /** @@ -49,9 +50,17 @@ const identifyRequestHandler = (message, category, destination) => { } const payload = removeUndefinedAndNullValues(constructProfile(message, destination, true)); const response = { profile: payload }; - // check if user wants to subscribe profile or not and listId is present or not - if (traitsInfo?.properties?.subscribe && (traitsInfo.properties?.listId || listId)) { - response.subscription = subscribeUserToListV2(message, traitsInfo, destination); + // check if user wants to subscribe/unsubscribe profile or do nothing and listId is present or not + if ( + isDefinedAndNotNull(traitsInfo?.properties?.subscribe) && + (traitsInfo.properties?.listId || listId) + ) { + response.subscription = subscribeOrUnsubscribeUserToListV2( + message, + traitsInfo, + destination, + traitsInfo.properties.subscribe ? 'subscribe' : 'unsubscribe', + ); } return response; }; @@ -93,7 +102,7 @@ const trackOrScreenRequestHandler = (message, category, destination) => { }; /** - * Main handlerfunc for group request add/subscribe users to the list based on property sent + * Main handlerfunc for group request add/subscribe to or remove/delete users to the list based on property sent * DOCS:https://developers.klaviyo.com/en/reference/subscribe_profiles * @param {*} message * @param {*} category @@ -105,11 +114,17 @@ const groupRequestHandler = (message, category, destination) => { throw new InstrumentationError('groupId is a required field for group events'); } const traitsInfo = getFieldValueFromMessage(message, 'traits'); - if (!traitsInfo?.subscribe) { - throw new InstrumentationError('Subscribe flag should be true for group call'); + if (!isDefinedAndNotNull(traitsInfo?.subscribe)) { + throw new InstrumentationError('Subscribe flag should be included in group call'); } - // throwing error for subscribe flag - return { subscription: subscribeUserToListV2(message, traitsInfo, destination) }; + return { + subscription: subscribeOrUnsubscribeUserToListV2( + message, + traitsInfo, + destination, + traitsInfo.subscribe ? 'subscribe' : 'unsubscribe', + ), + }; }; const processEvent = (event) => { @@ -152,9 +167,7 @@ const processV2 = (event) => { respList.push(buildRequest(response.profile, destination, CONFIG_CATEGORIES.IDENTIFYV2)); } if (response.subscription) { - respList.push( - buildSubscriptionRequest(response.subscription, destination, CONFIG_CATEGORIES.TRACKV2), - ); + respList.push(buildSubscriptionOrUnsubscriptionPayload(response.subscription, destination)); } if (response.event) { respList.push(buildRequest(response.event, destination, CONFIG_CATEGORIES.TRACKV2)); @@ -163,9 +176,19 @@ const processV2 = (event) => { }; // This function separates subscribe, proifle and event responses from process () and other responses in chunks -const getEventChunks = (input, subscribeRespList, profileRespList, eventRespList) => { +const getEventChunks = ( + input, + subscribeRespList, + profileRespList, + eventRespList, + unsubscriptionList, +) => { if (input.payload.subscription) { - subscribeRespList.push({ payload: input.payload.subscription, metadata: input.metadata }); + if (input.payload.subscription.operation === 'subscribe') { + subscribeRespList.push({ payload: input.payload.subscription, metadata: input.metadata }); + } else { + unsubscriptionList.push({ payload: input.payload.subscription, metadata: input.metadata }); + } } if (input.payload.profile) { profileRespList.push({ payload: input.payload.profile, metadata: input.metadata }); @@ -179,6 +202,7 @@ const processRouter = (inputs, reqMetadata) => { const batchResponseList = []; const batchErrorRespList = []; const subscribeRespList = []; + const unsubscriptionList = []; const profileRespList = []; const eventRespList = []; const { destination } = inputs[0]; @@ -197,6 +221,7 @@ const processRouter = (inputs, reqMetadata) => { subscribeRespList, profileRespList, eventRespList, + unsubscriptionList, ); } } catch (error) { @@ -204,7 +229,12 @@ const processRouter = (inputs, reqMetadata) => { batchErrorRespList.push(errRespEvent); } }); - const batchedResponseList = batchRequestV2(subscribeRespList, profileRespList, destination); + const batchedResponseList = batchRequestV2( + subscribeRespList, + unsubscriptionList, + profileRespList, + destination, + ); const trackRespList = getTrackRequests(eventRespList, destination); batchResponseList.push(...trackRespList, ...batchedResponseList); diff --git a/src/v0/destinations/klaviyo/util.js b/src/v0/destinations/klaviyo/util.js index 7b2b011d43..4421764d95 100644 --- a/src/v0/destinations/klaviyo/util.js +++ b/src/v0/destinations/klaviyo/util.js @@ -454,42 +454,62 @@ const constructProfile = (message, destination, isIdentifyCall) => { return { data }; }; +/** This function update profile with consents for subscribing to email and/or phone + * @param {*} profileAttributes + * @param {*} subscribeConsent + * @param {*} email + * @param {*} phone + */ +const updateProfileWithConsents = (profileAttributes, subscribeConsent, email, phone) => { + let consent = subscribeConsent; + if (!Array.isArray(consent)) { + consent = [consent]; + } + if (consent.includes('email') && email) { + set(profileAttributes, 'subscriptions.email.marketing.consent', 'SUBSCRIBED'); + } + if (consent.includes('sms') && phone) { + set(profileAttributes, 'subscriptions.sms.marketing.consent', 'SUBSCRIBED'); + } +}; /** * This function is used for creating profile response for subscribing users to a particular list for V2 * DOCS: https://developers.klaviyo.com/en/reference/subscribe_profiles + * Return an object with listId, profiles and operation */ -const subscribeUserToListV2 = (message, traitsInfo, destination) => { +const subscribeOrUnsubscribeUserToListV2 = (message, traitsInfo, destination, operation) => { // listId from message properties are preferred over Config listId const { consent } = destination.Config; let { listId } = destination.Config; - let subscribeConsent = traitsInfo.consent || traitsInfo.properties?.consent || consent; + const subscribeConsent = traitsInfo.consent || traitsInfo.properties?.consent || consent; const email = getFieldValueFromMessage(message, 'email'); const phone = getFieldValueFromMessage(message, 'phone'); const profileAttributes = { email, phone_number: phone, }; - if (subscribeConsent) { - if (!Array.isArray(subscribeConsent)) { - subscribeConsent = [subscribeConsent]; - } - if (subscribeConsent.includes('email') && email) { - set(profileAttributes, 'subscriptions.email.marketing.consent', 'SUBSCRIBED'); - } - if (subscribeConsent.includes('sms') && phone) { - set(profileAttributes, 'subscriptions.sms.marketing.consent', 'SUBSCRIBED'); - } + + // used only for subscription and not for unsubscription + if (operation === 'subscribe' && subscribeConsent) { + updateProfileWithConsents(profileAttributes, subscribeConsent, email, phone); } const profile = removeUndefinedAndNullValues({ type: 'profile', - id: getDestinationExternalID(message, 'klaviyo-profileId'), + id: + operation === 'subscribe' + ? getDestinationExternalID(message, 'klaviyo-profileId') + : undefined, // id is not applicable for unsubscription attributes: removeUndefinedAndNullValues(profileAttributes), }); if (!email && !phone && profile.id) { - throw new InstrumentationError( - 'Profile Id, Email or/and Phone are required to subscribe to a list', - ); + if (operation === 'subscribe') { + throw new InstrumentationError( + 'Profile Id, Email or/and Phone are required to subscribe to a list', + ); + } else { + throw new InstrumentationError('Email or/and Phone are required to unsubscribe from a list'); + } } // fetch list id from message if (traitsInfo?.properties?.listId) { @@ -499,17 +519,20 @@ const subscribeUserToListV2 = (message, traitsInfo, destination) => { if (message.type === 'group') { listId = message.groupId; } - - return { listId, profile: [profile] }; + return { listId, profile: [profile], operation }; }; /** * This Create a subscription payload to subscribe profile(s) to list listId * @param {*} listId * @param {*} profiles + * @param {*} operation can be either subscribe or unsubscribe */ -const getSubscriptionPayload = (listId, profiles) => ({ +const getSubscriptionPayload = (listId, profiles, operation) => ({ data: { - type: 'profile-subscription-bulk-create-job', + type: + operation === 'subscribe' + ? 'profile-subscription-bulk-create-job' + : 'profile-subscription-bulk-delete-job', attributes: { profiles: { data: profiles } }, relationships: { list: { @@ -523,14 +546,15 @@ const getSubscriptionPayload = (listId, profiles) => ({ }); /** - * This function accepts subscriptions object and builds a request for it + * This function accepts subscriptions/ unsubscription object and builds a request for it * @param {*} subscription * @param {*} destination + * @param {*} operation can be either subscription or unsubscription * @returns defaultRequestConfig */ -const buildSubscriptionRequest = (subscription, destination) => { +const buildSubscriptionOrUnsubscriptionPayload = (subscription, destination) => { const response = defaultRequestConfig(); - response.endpoint = `${BASE_ENDPOINT}/api/profile-subscription-bulk-create-jobs`; + response.endpoint = `${BASE_ENDPOINT}${CONFIG_CATEGORIES[subscription.operation.toUpperCase()].apiUrl}`; response.method = defaultPostRequestConfig.requestMethod; response.headers = { Authorization: `Klaviyo-API-Key ${destination.Config.privateApiKey}`, @@ -538,7 +562,11 @@ const buildSubscriptionRequest = (subscription, destination) => { 'Content-Type': JSON_MIME_TYPE, revision, }; - response.body.JSON = getSubscriptionPayload(subscription.listId, subscription.profile); + response.body.JSON = getSubscriptionPayload( + subscription.listId, + subscription.profile, + subscription.operation, + ); return response; }; @@ -602,10 +630,10 @@ module.exports = { profileUpdateResponseBuilder, getIdFromNewOrExistingProfile, constructProfile, - subscribeUserToListV2, + subscribeOrUnsubscribeUserToListV2, getProfileMetadataAndMetadataFields, buildRequest, - buildSubscriptionRequest, + buildSubscriptionOrUnsubscriptionPayload, getTrackRequests, fetchTransformedEvents, addSubscribeFlagToTraits, diff --git a/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts index dcd7fbc38e..da7769b110 100644 --- a/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts +++ b/test/integrations/destinations/klaviyo/processor/groupTestDataV2.ts @@ -32,7 +32,7 @@ const headers = { revision: '2024-06-15', }; -const endpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; +const subscriptionEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; const commonOutputSubscriptionProps = { profiles: { @@ -50,6 +50,19 @@ const commonOutputSubscriptionProps = { ], }, }; +const commonOutputUnsubscriptionProps = { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 678 900', + }, + }, + ], + }, +}; const subscriptionRelations = { list: { @@ -59,12 +72,13 @@ const subscriptionRelations = { }, }, }; +const unsubscriptionEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs'; export const groupTestData: ProcessorTestData[] = [ { id: 'klaviyo-group-test-1', name: 'klaviyo', - description: 'Simple group call', + description: 'Simple group call for subscription', scenario: 'Business', successCriteria: 'Response should contain only group payload and status code should be 200, for the group payload a subscription payload should be present in the final payload with email and phone', @@ -109,7 +123,67 @@ export const groupTestData: ProcessorTestData[] = [ relationships: subscriptionRelations, }, }, - endpoint: endpoint, + endpoint: subscriptionEndpoint, + headers: headers, + method: 'POST', + userId: '', + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'klaviyo-group-test-1', + name: 'klaviyo', + description: 'Simple group call for subscription', + scenario: 'Business', + successCriteria: + 'Response should contain only group payload and status code should be 200, for the group payload a unsubscription payload should be present in the final payload with email and phone', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: generateSimplifiedGroupPayload({ + userId: 'user123', + groupId: 'group_list_id', + traits: { + subscribe: false, + }, + context: { + traits: { + email: 'test@rudderstack.com', + phone: '+12 345 678 900', + consent: ['email'], + }, + }, + timestamp: '2020-01-21T00:21:34.208Z', + }), + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + JSON: { + data: { + type: 'profile-subscription-bulk-delete-job', + attributes: commonOutputUnsubscriptionProps, + relationships: subscriptionRelations, + }, + }, + endpoint: unsubscriptionEndpoint, headers: headers, method: 'POST', userId: '', @@ -122,7 +196,7 @@ export const groupTestData: ProcessorTestData[] = [ }, }, { - id: 'klaviyo-group-test-2', + id: 'klaviyo-group-test-3', name: 'klaviyo', description: 'Simple group call without groupId', scenario: 'Business', diff --git a/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts b/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts index 80ae918af0..612bfe88f8 100644 --- a/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts +++ b/test/integrations/destinations/klaviyo/processor/identifyTestDataV2.ts @@ -87,6 +87,19 @@ const commonOutputSubscriptionProps = { ], }, }; +const commonOutputUnsubscriptionProps = { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'test@rudderstack.com', + phone_number: '+12 345 578 900', + }, + }, + ], + }, +}; const subscriptionRelations = { list: { data: { @@ -109,6 +122,7 @@ const sentAt = '2021-01-03T17:02:53.195Z'; const originalTimestamp = '2021-01-03T17:02:53.193Z'; const userProfileCommonEndpoint = 'https://a.klaviyo.com/api/profile-import'; const subscribeEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs'; +const unsubscribeEndpoint = 'https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs'; export const identifyData: ProcessorTestData[] = [ { @@ -206,7 +220,99 @@ export const identifyData: ProcessorTestData[] = [ id: 'klaviyo-identify-150624-test-2', name: 'klaviyo', description: - '150624 -> Profile without subscribing the user and get klaviyo id from externalId', + '150624 -> Identify call with flattenProperties enabled in destination config and unsubscribe', + scenario: 'Business', + successCriteria: + 'The profile response should contain the flattened properties of the friend object and one request object for subscribe', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: overrideDestination(destination, { flattenProperties: true }), + message: generateSimplifiedIdentifyPayload({ + sentAt, + userId, + context: { + traits: { + ...commonTraits, + properties: { ...commonTraits.properties, subscribe: false }, + friend: { + names: { + first: 'Alice', + last: 'Smith', + }, + age: 25, + }, + }, + }, + anonymousId, + originalTimestamp, + }), + metadata: generateMetadata(2), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile', + attributes: { + ...commonOutputUserProps, + properties: { + ...commonOutputUserProps.properties, + 'friend.age': 25, + 'friend.names.first': 'Alice', + 'friend.names.last': 'Smith', + }, + }, + meta: { + patch_properties: {}, + }, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(2), + }, + { + output: transformResultBuilder({ + userId: '', + method: 'POST', + endpoint: unsubscribeEndpoint, + headers: commonOutputHeaders, + JSON: { + data: { + type: 'profile-subscription-bulk-delete-job', + attributes: commonOutputUnsubscriptionProps, + relationships: subscriptionRelations, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(2), + }, + ], + }, + }, + }, + { + id: 'klaviyo-identify-150624-test-3', + name: 'klaviyo', + description: + '150624 -> Profile without subscribing/unsubscribing the user and get klaviyo id from externalId', scenario: 'Business', successCriteria: 'Response should contain only profile update payload and status code should be 200 as subscribe is set to false in the payload', @@ -234,7 +340,7 @@ export const identifyData: ProcessorTestData[] = [ appendList2: 'New Value 2', unappendList1: 'Old Value 1', unappendList2: 'Old Value 2', - properties: { ...commonTraits.properties, subscribe: false }, + properties: { ...commonTraits.properties, subscribe: undefined }, }, }, integrations: { @@ -292,7 +398,7 @@ export const identifyData: ProcessorTestData[] = [ }, }, { - id: 'klaviyo-identify-150624-test-5', + id: 'klaviyo-identify-150624-test-4', name: 'klaviyo', description: '150624 -> Identify call with enforceEmailAsPrimary enabled in destination config', scenario: 'Business', diff --git a/test/integrations/destinations/klaviyo/router/dataV2.ts b/test/integrations/destinations/klaviyo/router/dataV2.ts index 714560fdfd..5a0a06fad1 100644 --- a/test/integrations/destinations/klaviyo/router/dataV2.ts +++ b/test/integrations/destinations/klaviyo/router/dataV2.ts @@ -1260,4 +1260,788 @@ export const dataV2: RouterTestData[] = [ }, }, }, + { + id: 'klaviyo-router-150624-test-5', + name: 'klaviyo', + description: '150624 -> Only Identify calls with some subcribe and some unsubscribe operation', + scenario: 'Framework', + successCriteria: + 'All the subscription events with same listId should be batched and same for unsubscribe as well.', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + // user 1 idenitfy call with anonymousId and subscription as true + channel: 'web', + traits: { + email: 'testklaviyo1@rs.com', + firstname: 'Test Klaviyo 1', + properties: { + subscribe: true, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + anonymousId: 'anonTestKlaviyo1', + type: 'identify', + userId: 'testKlaviyo1', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(1, 'testKlaviyo1'), + destination, + }, + { + message: { + // user 2 idenitfy call with no anonymousId and subscription as true + channel: 'web', + traits: { + email: 'testklaviyo2@rs.com', + firstname: 'Test Klaviyo 2', + properties: { + subscribe: true, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + type: 'identify', + userId: 'testKlaviyo2', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(2, 'testKlaviyo2'), + destination, + }, + { + message: { + // user 3 idenitfy call with no anonymousId and subscription as false + channel: 'web', + traits: { + email: 'testklaviyo3@rs.com', + firstname: 'Test Klaviyo 3', + properties: { + subscribe: false, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + type: 'identify', + userId: 'testKlaviyo3', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(3, 'testKlaviyo3'), + destination, + }, + { + message: { + // user 4 idenitfy call with anonymousId and subscription as false + channel: 'web', + traits: { + email: 'testklaviyo4@rs.com', + firstname: 'Test Klaviyo 4', + properties: { + subscribe: false, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + type: 'identify', + anonymousId: 'anon id 4', + userId: 'testKlaviyo4', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(4, 'testKlaviyo4'), + destination, + }, + ], + destType: 'klaviyo', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + // 2 identify calls and one batched subscription request for user 1 and user 2 + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo1', + email: 'testklaviyo1@rs.com', + first_name: 'Test Klaviyo 1', + anonymous_id: 'anonTestKlaviyo1', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo2', + email: 'testklaviyo2@rs.com', + first_name: 'Test Klaviyo 2', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'testklaviyo1@rs.com', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + { + type: 'profile', + attributes: { + email: 'testklaviyo2@rs.com', + subscriptions: { + email: { marketing: { consent: 'SUBSCRIBED' } }, + }, + }, + }, + ], + }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'configListId', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(1, 'testKlaviyo1'), generateMetadata(2, 'testKlaviyo2')], + batched: true, + statusCode: 200, + destination, + }, + { + // 2 identify calls and one batched unsubscription request for user 3 and user 4 + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo3', + email: 'testklaviyo3@rs.com', + first_name: 'Test Klaviyo 3', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: userProfileCommonEndpoint, + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo4', + email: 'testklaviyo4@rs.com', + first_name: 'Test Klaviyo 4', + anonymous_id: 'anon id 4', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs', + headers, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-delete-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'testklaviyo3@rs.com', + }, + }, + { + type: 'profile', + attributes: { + email: 'testklaviyo4@rs.com', + }, + }, + ], + }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'configListId', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(3, 'testKlaviyo3'), generateMetadata(4, 'testKlaviyo4')], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, + { + id: 'klaviyo-router-150624-test-6', + name: 'klaviyo', + description: + '150624 -> Router tests to have some anonymous track event, some identify events with unsubscription and some identified track event', + scenario: 'Framework', + successCriteria: + 'All the unsubscription events under same message type should be batched and respective profile requests should also be placed in same batched request', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + // user 1 track call with userId and anonymousId + channel: 'web', + context: { + traits: { + email: 'testklaviyo1@email.com', + firstname: 'Test Klaviyo 1', + }, + }, + type: 'track', + anonymousId: 'anonTestKlaviyo1', + userId: 'testKlaviyo1', + event: 'purchase', + properties: { + price: '12', + }, + }, + metadata: generateMetadata(1, 'testKlaviyo1'), + destination, + }, + { + message: { + // Anonymous Tracking -> user 2 track call with anonymousId only + channel: 'web', + context: { + traits: {}, + }, + type: 'track', + anonymousId: 'anonTestKlaviyo2', + event: 'viewed product', + properties: { + price: '120', + }, + }, + metadata: generateMetadata(2), + destination, + }, + { + message: { + // user 2 idenitfy call with anonymousId and subscription + channel: 'web', + traits: { + email: 'testklaviyo2@rs.com', + firstname: 'Test Klaviyo 2', + properties: { + subscribe: false, + listId: 'configListId', + consent: ['email'], + }, + }, + context: {}, + anonymousId: 'anonTestKlaviyo2', + type: 'identify', + userId: 'testKlaviyo2', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(3, 'testKlaviyo2'), + destination, + }, + { + message: { + // user 2 track call with email only + channel: 'web', + context: { + traits: { + email: 'testklaviyo2@email.com', + firstname: 'Test Klaviyo 2', + }, + }, + type: 'track', + userId: 'testKlaviyo2', + event: 'purchase', + properties: { + price: '120', + }, + }, + metadata: generateMetadata(4, 'testKlaviyo2'), + destination, + }, + { + message: { + // for user 3 identify call without anonymousId and subscriptiontraits: + channel: 'web', + traits: { + email: 'testklaviyo3@rs.com', + firstname: 'Test Klaviyo 3', + properties: { + subscribe: false, + listId: 'configListId', + consent: ['email', 'sms'], + }, + }, + context: {}, + type: 'identify', + userId: 'testKlaviyo3', + integrations: { + All: true, + }, + }, + metadata: generateMetadata(5, 'testKlaviyo3'), + destination, + }, + ], + destType: 'klaviyo', + }, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + // user 1 track call with userId and anonymousId + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '12', + }, + profile: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo1', + anonymous_id: 'anonTestKlaviyo1', + email: 'testklaviyo1@email.com', + first_name: 'Test Klaviyo 1', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'purchase', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1, 'testKlaviyo1')], + batched: false, + statusCode: 200, + destination, + }, + { + // anonn event for user 2 + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '120', + }, + profile: { + data: { + type: 'profile', + attributes: { + anonymous_id: 'anonTestKlaviyo2', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'viewed product', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(2)], + batched: false, + statusCode: 200, + destination, + }, + { + // identify call for user 2 and user 3 with subscription + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo2', + anonymous_id: 'anonTestKlaviyo2', + email: 'testklaviyo2@rs.com', + first_name: 'Test Klaviyo 2', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-import', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo3', + email: 'testklaviyo3@rs.com', + first_name: 'Test Klaviyo 3', + properties: {}, + }, + meta: { + patch_properties: {}, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-delete-jobs', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-delete-job', + attributes: { + profiles: { + data: [ + { + type: 'profile', + attributes: { + email: 'testklaviyo2@rs.com', + }, + }, + { + type: 'profile', + attributes: { + email: 'testklaviyo3@rs.com', + }, + }, + ], + }, + }, + relationships: { + list: { + data: { + type: 'list', + id: 'configListId', + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(3, 'testKlaviyo2'), generateMetadata(5, 'testKlaviyo3')], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/events', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + Accept: 'application/json', + 'Content-Type': 'application/json', + revision: '2024-06-15', + }, + params: {}, + body: { + JSON: { + data: { + type: 'event', + attributes: { + properties: { + price: '120', + }, + profile: { + data: { + type: 'profile', + attributes: { + external_id: 'testKlaviyo2', + email: 'testklaviyo2@email.com', + first_name: 'Test Klaviyo 2', + properties: {}, + meta: { + patch_properties: {}, + }, + }, + }, + }, + metric: { + data: { + type: 'metric', + attributes: { + name: 'purchase', + }, + }, + }, + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(4, 'testKlaviyo2')], + batched: false, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + }, ]; From 01a483ababd0eddb08a2272c7deb0e3e72de0b5c Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 20 Aug 2024 12:43:46 +0530 Subject: [PATCH 143/201] chore: cicd improvements (#3585) * chore: cicd improvements * chore: verify formatting & lint errors to only check for added/modified files - chore: add json prettification on save in vscode settings * chore: remove test command while building image * fix: formatting in features.json * chore: update eslint in verify gha * chore: update latest image sha (#3622) * chore: update latest image sha * chore: add echo while setting a variable in run script * chore: update ut prod deployment workflow --------- Co-authored-by: Sai Sankeerth * chore: re-introduce execution of tests while building image - introduce a flag to skip tests - modify artifact building workflow to know when to skip tests * fix: update the correct workflows to skip tests in docker for hotfix release * fix: execute tests when dockerfile, package json is updated * chore: send slack message when prod deployment fails * chore: move slack notification to separate workflow * fix: format error * chore: add checkout step * chore: move notification to a separate job inside workflow - add capability to understand overall failure or just tests failure for notifying * chore: add missing lint step * fix: reusable notify workflow * chore: update notification job name --------- Co-authored-by: Sai Sankeerth --- .github/workflows/build-push-docker-image.yml | 63 ++++++++++++++++++- .../dt-test-and-report-code-coverage.yml | 26 +++++++- .github/workflows/prepare-for-dev-deploy.yml | 1 + .../workflows/prepare-for-prod-dt-deploy.yml | 2 + .../workflows/prepare-for-prod-ut-deploy.yml | 2 + .../workflows/prepare-for-staging-deploy.yml | 1 + .github/workflows/slack-notify.yml | 51 +++++++++++++++ .github/workflows/verify.yml | 24 +++++-- .vscode/settings.json | 4 ++ src/routerUtils.js | 1 + src/services/comparator.ts | 1 + 11 files changed, 169 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/slack-notify.yml diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 1e7281479e..f0e33ff142 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -23,6 +23,15 @@ on: type: string build_type: type: string + use_merge_sha: + type: boolean + default: false + skip_tests: + type: boolean + default: false + description: if this option is true, we would skip tests while building docker image + workflow_url: + type: string secrets: DOCKERHUB_PROD_TOKEN: required: true @@ -31,14 +40,61 @@ env: DOCKERHUB_USERNAME: rudderlabs jobs: + get_sha: + runs-on: ubuntu-latest + name: Get SHA information + outputs: + sha: ${{steps.getSHA.outputs.SHA}} + steps: + - name: Checkout SHA + id: getSHA + run: | + if ${{inputs.use_merge_sha}} == true; then + sha=$(echo ${{github.sha}}) + else + sha=$(echo ${{ github.event.pull_request.head.sha }}) + fi + echo "SHA: $sha" + echo "SHA=$sha" >> $GITHUB_OUTPUT + + get_changed_files: + runs-on: ubuntu-latest + name: Get Changed files + outputs: + should_execute_tests: ${{ steps.processing.outputs.should_execute_tests }} + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 1 + - id: files + uses: Ana06/get-changed-files@v1.2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + format: 'json' + - id: processing + run: | + readarray -t modified_files <<<"$(jq -r '.[]' <<<'${{ steps.files.outputs.modified }}')" + echo "Modified files: $modified_files" + found=false + for modified_file in "${modified_files[@]}"; do + if [[ "$modified_file" == "Dockerfile" || "$modified_file" == "docker-compose.yml" || "$modified_file" == "Dockerfile" || "$modified_file" == "Dockerfile-ut-func" ]]; then + found=true + break + fi + done + echo "Match Found: $found" + echo "::set-output name=should_execute_tests::$found" + build-transformer-image-arm64: name: Build Transformer Docker Image ARM64 runs-on: [self-hosted, Linux, ARM64] + needs: [get_sha, get_changed_files] steps: - name: Checkout uses: actions/checkout@v4.1.1 with: - ref: ${{ github.event.pull_request.head.sha }} + ref: ${{ needs.get_sha.outputs.sha }} fetch-depth: 1 - name: Setup Docker Buildx @@ -62,6 +118,7 @@ jobs: # cache-to: type=gha,mode=max - name: Run Tests + if: ${{ inputs.skip_tests != true || needs.get_changed_files.outputs.should_execute_tests == true }} run: | docker run ${{ inputs.build_tag }} npm run test:js:ci docker run ${{ inputs.build_tag }} npm run test:ts:ci @@ -85,11 +142,12 @@ jobs: build-transformer-image-amd64: name: Build Transformer Docker Image AMD64 runs-on: [self-hosted, Linux, X64] + needs: [get_sha, get_changed_files] steps: - name: Checkout uses: actions/checkout@v4.1.1 with: - ref: ${{ github.event.pull_request.head.sha }} + ref: ${{ needs.get_sha.outputs.sha }} fetch-depth: 1 - name: Setup Docker Buildx @@ -113,6 +171,7 @@ jobs: # cache-to: type=gha,mode=max - name: Run Tests + if: ${{ inputs.skip_tests != true || needs.get_changed_files.outputs.should_execute_tests == true }} run: | docker run ${{ inputs.build_tag }} npm run test:js:ci docker run ${{ inputs.build_tag }} npm run test:ts:ci diff --git a/.github/workflows/dt-test-and-report-code-coverage.yml b/.github/workflows/dt-test-and-report-code-coverage.yml index 755eb24397..b1da46898a 100644 --- a/.github/workflows/dt-test-and-report-code-coverage.yml +++ b/.github/workflows/dt-test-and-report-code-coverage.yml @@ -13,10 +13,22 @@ concurrency: cancel-in-progress: true jobs: + get_workflow_url: + runs-on: ubuntu-latest + steps: + - id: get_url + run: | + curl -s https://api.github.com/repos/${{ github.repository }}/actions/workflows/${{ github.workflow }}/runs/${{ github.run_id }} | jq -r .html_url >> workflow_url.txt + echo "::set-output name=workflow_url::$(cat workflow_url.txt)" + outputs: + url: ${{ steps.get_url.outputs.workflow_url }} + coverage: name: Code Coverage runs-on: ubuntu-latest - + needs: [get_workflow_url] + outputs: + tests_run_outcome: ${{steps.run_tests.outcome}} steps: - name: Checkout uses: actions/checkout@v4.1.1 @@ -33,6 +45,8 @@ jobs: run: npm ci - name: Run Tests + id: run_tests + continue-on-error: true run: | # Supress logging in tests LOG_LEVEL=100 npm run test:js:ci @@ -70,3 +84,13 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.PAT }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + + notify: + name: slack notification on failure + needs: [get_workflow_url, coverage] + if: needs.coverage.outputs.tests_run_outcome == 'failure' || failure() + uses: ./.github/workflows/slack-notify.yml + with: + workflow_url: ${{ needs.get_workflow_url.outputs.url }} + should_notify: ${{startsWith(github.event.pull_request.head.ref, 'hotfix-release/')}} + secrets: inherit diff --git a/.github/workflows/prepare-for-dev-deploy.yml b/.github/workflows/prepare-for-dev-deploy.yml index 66020feef0..a1fdda8ccd 100644 --- a/.github/workflows/prepare-for-dev-deploy.yml +++ b/.github/workflows/prepare-for-dev-deploy.yml @@ -60,6 +60,7 @@ jobs: dockerfile: Dockerfile load_target: development push_target: production + use_merge_sha: true secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} diff --git a/.github/workflows/prepare-for-prod-dt-deploy.yml b/.github/workflows/prepare-for-prod-dt-deploy.yml index 4a4d656e78..8e589f5b20 100644 --- a/.github/workflows/prepare-for-prod-dt-deploy.yml +++ b/.github/workflows/prepare-for-prod-dt-deploy.yml @@ -57,6 +57,8 @@ jobs: load_target: development push_target: production build_type: dt + use_merge_sha: true + skip_tests: ${{startsWith(github.event.pull_request.head.ref, 'hotfix-release/')}} secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} diff --git a/.github/workflows/prepare-for-prod-ut-deploy.yml b/.github/workflows/prepare-for-prod-ut-deploy.yml index a5afed6dee..468307b94a 100644 --- a/.github/workflows/prepare-for-prod-ut-deploy.yml +++ b/.github/workflows/prepare-for-prod-ut-deploy.yml @@ -60,6 +60,8 @@ jobs: load_target: development push_target: production build_type: ut + use_merge_sha: true + skip_tests: ${{startsWith(github.event.pull_request.head.ref, 'hotfix-release/')}} secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} diff --git a/.github/workflows/prepare-for-staging-deploy.yml b/.github/workflows/prepare-for-staging-deploy.yml index 4a4bf44f75..60a6238aa8 100644 --- a/.github/workflows/prepare-for-staging-deploy.yml +++ b/.github/workflows/prepare-for-staging-deploy.yml @@ -52,6 +52,7 @@ jobs: dockerfile: Dockerfile load_target: development push_target: production + use_merge_sha: true secrets: DOCKERHUB_PROD_TOKEN: ${{ secrets.DOCKERHUB_PROD_TOKEN }} diff --git a/.github/workflows/slack-notify.yml b/.github/workflows/slack-notify.yml new file mode 100644 index 0000000000..bb5cac82f1 --- /dev/null +++ b/.github/workflows/slack-notify.yml @@ -0,0 +1,51 @@ +name: Notify workflow failure + +on: + workflow_call: + inputs: + should_notify: + type: boolean + default: true + workflow_url: + type: string + required: true + +jobs: + notify: + runs-on: ubuntu-latest + if: ${{ inputs.should_notify }} + steps: + - name: Checkout + uses: actions/checkout@v4.1.1 + + - name: notify + uses: slackapi/slack-github-action@v1.25.0 + continue-on-error: true + env: + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} + PROJECT_NAME: 'Rudder Transformer' + with: + channel-id: ${{ secrets.SLACK_INTEGRATION_DEV_CHANNEL_ID }} + payload: | + { + "text": "**\nCC: ", + "blocks": [ + { + "type": "header", + "text": { + "type": "plain_text", + "text": ":siren2: prod release tests - Failed :siren2:" + } + }, + { + "type": "divider" + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "*<${{inputs.workflow_url}}|failed workflow>*\nCC: " + } + } + ] + } diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index a03037d4ad..0d389f0e55 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -28,13 +28,29 @@ jobs: - name: Install Dependencies run: npm ci - - name: Run Lint Checks + - id: files + uses: Ana06/get-changed-files@v1.2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Run format Checks + run: | + npx prettier ${{steps.files.outputs.added_modified}} --write + + - run: git diff --exit-code + + - name: Formatting Error message + if: ${{ failure() }} + run: | + echo 'prettier formatting failure. Ensure you run `npm run format` and commit the files.' + + - name: Run eslint Checks run: | - npm run lint + npx eslint ${{steps.files.outputs.added_modified}} --fix - run: git diff --exit-code - - name: Error message + - name: Eslint Error message if: ${{ failure() }} run: | - echo 'Eslint check is failing Ensure you have run `npm run lint` and committed the files locally.' + echo 'Eslint failure. Ensure you run `npm run lint:fix` and commit the files.' diff --git a/.vscode/settings.json b/.vscode/settings.json index 13c49c08f1..8d723306a9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,10 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, "[yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true diff --git a/src/routerUtils.js b/src/routerUtils.js index ff9dd4b6f8..081070d78a 100644 --- a/src/routerUtils.js +++ b/src/routerUtils.js @@ -22,6 +22,7 @@ const userTransformHandler = () => { async function sendToDestination(destination, payload) { let parsedResponse; logger.info('Request recieved for destination', destination); + const resp = await proxyRequest(payload); if (resp.success) { diff --git a/src/services/comparator.ts b/src/services/comparator.ts index 0e28339797..1eb67cd597 100644 --- a/src/services/comparator.ts +++ b/src/services/comparator.ts @@ -33,6 +33,7 @@ export class ComparatorService implements DestinationService { public init(): void { this.primaryService.init(); + this.secondaryService.init(); } From 06f5d33a061c60529d668c3cea147a1a63c24a59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:59:20 +0530 Subject: [PATCH 144/201] chore(deps): bump docker/setup-buildx-action from 3.4.0 to 3.6.1 (#3635) Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.4.0 to 3.6.1. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v3.4.0...v3.6.1) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-push-docker-image.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index f0e33ff142..69f68c1676 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -98,7 +98,7 @@ jobs: fetch-depth: 1 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3.4.0 + uses: docker/setup-buildx-action@v3.6.1 - name: Login to DockerHub uses: docker/login-action@v3.3.0 @@ -151,7 +151,7 @@ jobs: fetch-depth: 1 - name: Setup Docker Buildx - uses: docker/setup-buildx-action@v3.4.0 + uses: docker/setup-buildx-action@v3.6.1 - name: Login to DockerHub uses: docker/login-action@v3.3.0 @@ -199,7 +199,7 @@ jobs: steps: - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.4.0 + uses: docker/setup-buildx-action@v3.6.1 - name: Login to DockerHub uses: docker/login-action@v3.3.0 From d987d1fc9afb9e1dc7482b2fe1458573f0f2699e Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:02:32 +0530 Subject: [PATCH 145/201] feat: onboard sfmc with vdm for rETL (#3655) * feat: onboard sfmc with vdm for rETL * chore: add test cases and add cache for access token * chore: address comment --- src/v0/destinations/sfmc/config.js | 5 + src/v0/destinations/sfmc/transform.js | 46 ++++- .../destinations/sfmc/processor/data.ts | 178 ++++++++++++++++++ 3 files changed, 227 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/sfmc/config.js b/src/v0/destinations/sfmc/config.js index 1b1f5c323b..1c89c04112 100644 --- a/src/v0/destinations/sfmc/config.js +++ b/src/v0/destinations/sfmc/config.js @@ -7,6 +7,10 @@ const ENDPOINTS = { EVENT: 'rest.marketingcloudapis.com/interaction/v1/events', }; +const ACCESS_TOKEN_CACHE_TTL = process.env.SFMC_ACCESS_TOKEN_CACHE_TTL + ? parseInt(process.env.SFMC_ACCESS_TOKEN_CACHE_TTL, 10) + : 1000; + const CONFIG_CATEGORIES = { IDENTIFY: { type: 'identify', @@ -24,4 +28,5 @@ module.exports = { ENDPOINTS, MAPPING_CONFIG, CONFIG_CATEGORIES, + ACCESS_TOKEN_CACHE_TTL, }; diff --git a/src/v0/destinations/sfmc/transform.js b/src/v0/destinations/sfmc/transform.js index a433179f9c..d20a9ed40d 100644 --- a/src/v0/destinations/sfmc/transform.js +++ b/src/v0/destinations/sfmc/transform.js @@ -6,10 +6,19 @@ const { InstrumentationError, isDefinedAndNotNull, isEmpty, + MappedToDestinationKey, + GENERIC_TRUE_VALUES, + PlatformError, } = require('@rudderstack/integrations-lib'); +const get = require('get-value'); const { EventType } = require('../../../constants'); const { handleHttpRequest } = require('../../../adapters/network'); -const { CONFIG_CATEGORIES, MAPPING_CONFIG, ENDPOINTS } = require('./config'); +const { + CONFIG_CATEGORIES, + MAPPING_CONFIG, + ENDPOINTS, + ACCESS_TOKEN_CACHE_TTL, +} = require('./config'); const { removeUndefinedAndNullValues, getFieldValueFromMessage, @@ -21,12 +30,15 @@ const { toTitleCase, getHashFromArray, simpleProcessRouterDest, + getDestinationExternalIDInfoForRetl, } = require('../../util'); const { getDynamicErrorType } = require('../../../adapters/utils/networkUtils'); const { isHttpStatusSuccess } = require('../../util'); const tags = require('../../util/tags'); const { JSON_MIME_TYPE } = require('../../util/constant'); +const Cache = require('../../util/cache'); +const accessTokenCache = new Cache(ACCESS_TOKEN_CACHE_TTL); const CONTACT_KEY_KEY = 'Contact Key'; // DOC: https://developer.salesforce.com/docs/atlas.en-us.mc-app-development.meta/mc-app-development/access-token-s2s.htm @@ -271,11 +283,41 @@ const responseBuilderSimple = async ({ message, destination, metadata }, categor throw new ConfigurationError(`Event type '${category.type}' not supported`); }; +const retlResponseBuilder = async (message, destination, metadata) => { + const { clientId, clientSecret, subDomain, externalKey } = destination.Config; + const token = await accessTokenCache.get(metadata.destinationId, () => + getToken(clientId, clientSecret, subDomain, metadata), + ); + const { destinationExternalId, objectType, identifierType } = getDestinationExternalIDInfoForRetl( + message, + 'SFMC', + ); + if (objectType?.toLowerCase() === 'data extension') { + const response = defaultRequestConfig(); + response.method = defaultPutRequestConfig.requestMethod; + response.endpoint = `https://${subDomain}.${ENDPOINTS.INSERT_CONTACTS}${externalKey}/rows/${identifierType}:${destinationExternalId}`; + response.headers = { + 'Content-Type': JSON_MIME_TYPE, + Authorization: `Bearer ${token}`, + }; + response.body.JSON = { + values: { + ...message.traits, + }, + }; + return response; + } + throw new PlatformError('Unsupported object type for rETL use case'); +}; + const processEvent = async ({ message, destination, metadata }) => { if (!message.type) { throw new InstrumentationError('Event type is required'); } - + const mappedToDestination = get(message, MappedToDestinationKey); + if (mappedToDestination && GENERIC_TRUE_VALUES.includes(mappedToDestination?.toString())) { + return retlResponseBuilder(message, destination, metadata); + } const messageType = message.type.toLowerCase(); let category; // only accept track and identify calls diff --git a/test/integrations/destinations/sfmc/processor/data.ts b/test/integrations/destinations/sfmc/processor/data.ts index 883032d223..e8d9375e43 100644 --- a/test/integrations/destinations/sfmc/processor/data.ts +++ b/test/integrations/destinations/sfmc/processor/data.ts @@ -2216,4 +2216,182 @@ export const data = [ }, }, }, + { + name: 'sfmc', + description: 'success scenario for rETL use case', + feature: 'processor', + id: 'sfmcRetlTestCase-1', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + traits: { + key2: 'value2', + key3: 'value3', + key4: 'value4', + }, + userId: 'someRandomEmail@test.com', + channel: 'sources', + context: { + sources: { + job_id: '2kbW13URkJ6jfeo5SbFcC7ecP6d', + version: 'v1.53.1', + job_run_id: 'cqtl6pfqskjtoh6t24i0', + task_run_id: 'cqtl6pfqskjtoh6t24ig', + }, + externalId: [ + { + id: 'someRandomEmail@test.com', + type: 'SFMC-data extension', + identifierType: 'key1', + }, + ], + mappedToDestination: 'true', + }, + recordId: '3', + rudderId: 'c5741aa5-b038-4079-99ec-e4169eb0d9e2', + messageId: '95a1b214-03d9-4824-8ada-bc6ef2398100', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + Config: { + clientId: 'dummyClientId', + clientSecret: 'dummyClientSecret', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + externalKey: 'externalKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + jobId: 'jobid1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: 'destId', + jobId: 'jobid1', + }, + output: { + body: { + FORM: {}, + JSON: { + values: { + key2: 'value2', + key3: 'value3', + key4: 'value4', + }, + }, + JSON_ARRAY: {}, + XML: {}, + }, + endpoint: + 'https://vcn7AQ2W9GGIAZSsN6Mfq.rest.marketingcloudapis.com/hub/v1/dataevents/key:externalKey/rows/key1:someRandomEmail@test.com', + files: {}, + headers: { + Authorization: 'Bearer yourAuthToken', + 'Content-Type': 'application/json', + }, + method: 'PUT', + params: {}, + type: 'REST', + userId: '', + version: '1', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'sfmc', + description: 'failure scenario for rETL use case when wrong object type is used', + feature: 'processor', + id: 'sfmcRetlTestCase-2', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + type: 'identify', + traits: { + key2: 'value2', + key3: 'value3', + key4: 'value4', + }, + userId: 'someRandomEmail@test.com', + channel: 'sources', + context: { + externalId: [ + { + id: 'someRandomEmail@test.com', + type: 'SFMC-contacts', + identifierType: 'key1', + }, + ], + mappedToDestination: 'true', + }, + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'SFMC', + Config: { + clientId: 'dummyClientId', + clientSecret: 'dummyClientSecret', + subDomain: 'vcn7AQ2W9GGIAZSsN6Mfq', + createOrUpdateContacts: false, + externalKey: 'externalKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + jobId: 'jobid1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: 'Unsupported object type for rETL use case', + metadata: { + destinationId: 'destId', + jobId: 'jobid1', + }, + statTags: { + destType: 'SFMC', + destinationId: 'destId', + errorCategory: 'platform', + feature: 'processor', + implementation: 'native', + module: 'destination', + }, + statusCode: 400, + }, + ], + }, + }, + }, ]; From 1a6167584a5780ab50beda13cc5ef6bf4e283e38 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Tue, 20 Aug 2024 15:22:06 +0530 Subject: [PATCH 146/201] fix: fixing facebook utils (#3664) * fix: fixing facebook utils * fix: adding test cases * fix: review comments addressed Co-authored-by: Anant Jain <62471433+anantjain45823@users.noreply.github.com> --------- Co-authored-by: Anant Jain <62471433+anantjain45823@users.noreply.github.com> --- src/v0/util/facebookUtils/index.js | 12 +++++++----- src/v0/util/facebookUtils/index.test.js | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/v0/util/facebookUtils/index.js b/src/v0/util/facebookUtils/index.js index 7462320cca..fd94db442b 100644 --- a/src/v0/util/facebookUtils/index.js +++ b/src/v0/util/facebookUtils/index.js @@ -148,11 +148,13 @@ const getContentType = (message, defaultValue, categoryToContent, destinationNam } let { category } = properties || {}; - if (!category) { - const { products } = properties; - if (products && products.length > 0 && Array.isArray(products) && isObject(products[0])) { - category = products[0].category; - } + if ( + !category && + Array.isArray(properties?.products) && + properties?.products.length > 0 && + isObject(properties?.products[0]) + ) { + category = properties?.products[0].category; } if (Array.isArray(categoryToContent) && category) { diff --git a/src/v0/util/facebookUtils/index.test.js b/src/v0/util/facebookUtils/index.test.js index 1a2de4ed12..90588c627b 100644 --- a/src/v0/util/facebookUtils/index.test.js +++ b/src/v0/util/facebookUtils/index.test.js @@ -639,6 +639,21 @@ describe('getContentType', () => { expect(result).toBe(defaultValue); }); + + it('should return default value when no product array or categoryToContent is provided', () => { + const message = { + properties: { + revenue: 1234, + }, + }; + const defaultValue = 'product'; + const categoryToContent = []; + const destinationName = 'fb_pixel'; + + const result = getContentType(message, defaultValue, categoryToContent, destinationName); + + expect(result).toBe(defaultValue); + }); }); describe('isHtmlFormat', () => { From b0fd614ee0d04c03919dc6aef42844803def6d6c Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Tue, 20 Aug 2024 16:18:59 +0530 Subject: [PATCH 147/201] chore: update api version to 17 from 16 --- .../config.js | 2 +- .../util.test.js | 2 +- .../dataDelivery/oauth.ts | 4 +- .../network.ts | 4 +- .../processor/data.ts | 42 +++++++++---------- .../router/data.ts | 14 +++---- 6 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/config.js b/src/v0/destinations/google_adwords_remarketing_lists/config.js index c7b97e0e6c..88e802e5ec 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/config.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/config.js @@ -1,6 +1,6 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v16/customers'; +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v17/customers'; const CONFIG_CATEGORIES = { AUDIENCE_LIST: { type: 'audienceList', name: 'offlineDataJobs' }, ADDRESSINFO: { type: 'addressInfo', name: 'addressInfo' }, diff --git a/src/v0/destinations/google_adwords_remarketing_lists/util.test.js b/src/v0/destinations/google_adwords_remarketing_lists/util.test.js index e9fe90c317..b308b81fe2 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/util.test.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/util.test.js @@ -66,7 +66,7 @@ const expectedResponse = { version: '1', type: 'REST', method: 'POST', - endpoint: 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + endpoint: 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts index 9fd695a7a3..3dfad8d0d8 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts @@ -29,7 +29,7 @@ export const oauthError = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload1, - endpoint: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + endpoint: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs', accessToken: 'dummy-access', }), method: 'POST', @@ -84,7 +84,7 @@ export const oauthError = [ headers: { ...commonHeaders, Authorization: 'Bearer wrongCustomerID' }, params: { ...commonParams, customerId: 'wrongCustomerID' }, JSON: validRequestPayload1, - endpoint: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs', + endpoint: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs', accessToken: 'wrongCustomerID', }), method: 'POST', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts index d17f518c46..ebc1d4b345 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts @@ -209,7 +209,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', + url: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs:create', data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', @@ -243,7 +243,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v16/customers/customerid/offlineUserDataJobs:create', + url: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs:create', data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts index 83eae90aea..d92618d859 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts @@ -70,7 +70,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -203,7 +203,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -323,7 +323,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -1425,7 +1425,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -2820,7 +2820,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -2900,7 +2900,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -4113,7 +4113,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -5413,7 +5413,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -6790,7 +6790,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -8100,7 +8100,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -9400,7 +9400,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -10795,7 +10795,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -10875,7 +10875,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11050,7 +11050,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11128,7 +11128,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11272,7 +11272,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11479,7 +11479,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11618,7 +11618,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11756,7 +11756,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11896,7 +11896,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -12039,7 +12039,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts index a282b0a56c..48e0b17ef3 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts @@ -26,7 +26,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -122,7 +122,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -218,7 +218,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -269,7 +269,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -387,7 +387,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -485,7 +485,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -613,7 +613,7 @@ export const data = [ type: 'REST', method: 'POST', endpoint: - 'https://googleads.googleapis.com/v16/customers/7693729833/offlineUserDataJobs', + 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', From 866dbf3e81754e71ff8ac08b258b359ec5cc6889 Mon Sep 17 00:00:00 2001 From: shrouti1507 <60211312+shrouti1507@users.noreply.github.com> Date: Tue, 20 Aug 2024 17:20:01 +0530 Subject: [PATCH 148/201] fix: attentive tag bugsnag issue (#3663) * fix: attentive tag bugsnag issue * fix: review comment addressed * fix: review comment addressed * fix: editing test caes * fix: editing test caes --- .../destinations/attentive_tag/transform.js | 6 +-- src/v0/destinations/attentive_tag/util.js | 13 +++-- .../destinations/attentive_tag/util.test.js | 51 +++++++++++++++++++ .../attentive_tag/processor/data.ts | 2 +- 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/v0/destinations/attentive_tag/util.test.js diff --git a/src/v0/destinations/attentive_tag/transform.js b/src/v0/destinations/attentive_tag/transform.js index fa05eb6c21..5522c078b0 100644 --- a/src/v0/destinations/attentive_tag/transform.js +++ b/src/v0/destinations/attentive_tag/transform.js @@ -16,7 +16,7 @@ const { const { getDestinationItemProperties, getExternalIdentifiersMapping, - getPropertiesKeyValidation, + arePropertiesValid, validateTimestamp, } = require('./util'); const { JSON_MIME_TYPE } = require('../../util/constant'); @@ -137,9 +137,9 @@ const trackResponseBuilder = (message, { Config }) => { payload = constructPayload(message, mappingConfig[ConfigCategory.TRACK.name]); endpoint = ConfigCategory.TRACK.endpoint; payload.type = get(message, 'event'); - if (!getPropertiesKeyValidation(payload)) { + if (!arePropertiesValid(payload.properties)) { throw new InstrumentationError( - '[Attentive Tag]:The event name contains characters which is not allowed', + '[Attentive Tag]:The properties contains characters which is not allowed', ); } } diff --git a/src/v0/destinations/attentive_tag/util.js b/src/v0/destinations/attentive_tag/util.js index c96d03028f..8e73f572fc 100644 --- a/src/v0/destinations/attentive_tag/util.js +++ b/src/v0/destinations/attentive_tag/util.js @@ -14,12 +14,19 @@ const { mappingConfig, ConfigCategory } = require('./config'); * The keys should not contain any of the values inside the validationArray. * STEP 1: Storing keys in the array. * Checking for the non-valid characters inside the keys of properties. + * ref: https://docs.attentivemobile.com/openapi/reference/tag/Custom-Events/ * @param {*} payload * @returns */ -const getPropertiesKeyValidation = (payload) => { +const arePropertiesValid = (properties) => { + if (!isDefinedAndNotNullAndNotEmpty(properties)) { + return true; + } + if (typeof properties !== 'object') { + return false; + } const validationArray = [`'`, `"`, `{`, `}`, `[`, `]`, ',', `,`]; - const keys = Object.keys(payload.properties); + const keys = Object.keys(properties); for (const key of keys) { for (const validationChar of validationArray) { if (key.includes(validationChar)) { @@ -134,6 +141,6 @@ const getDestinationItemProperties = (message, isItemsRequired) => { module.exports = { getDestinationItemProperties, getExternalIdentifiersMapping, - getPropertiesKeyValidation, + arePropertiesValid, validateTimestamp, }; diff --git a/src/v0/destinations/attentive_tag/util.test.js b/src/v0/destinations/attentive_tag/util.test.js new file mode 100644 index 0000000000..59fdc9f361 --- /dev/null +++ b/src/v0/destinations/attentive_tag/util.test.js @@ -0,0 +1,51 @@ +const { arePropertiesValid } = require('./util'); + +describe('arePropertiesValid', () => { + // returns true for valid properties object with no special characters in keys + it('should return true when properties object has no special characters in keys', () => { + const properties = { key1: 'value1', key2: 'value2' }; + const result = arePropertiesValid(properties); + expect(result).toBe(true); + }); + + // returns true for null properties input + it('should return true when properties input is null', () => { + const properties = null; + const result = arePropertiesValid(properties); + expect(result).toBe(true); + }); + + // returns false for properties object with keys containing special characters + it('should return false for properties object with keys containing special characters', () => { + const properties = { + key1: 'value1', + 'key,2': 'value2', + key3: 'value3', + }; + expect(arePropertiesValid(properties)).toBe(false); + }); + + // returns true for empty properties object + it('should return true for empty properties object', () => { + const properties = {}; + expect(arePropertiesValid(properties)).toBe(true); + }); + + // returns true for undefined properties input + it('should return true for undefined properties input', () => { + const result = arePropertiesValid(undefined); + expect(result).toBe(true); + }); + + // returns true for empty string properties input + it('should return true for empty string properties input', () => { + const result = arePropertiesValid(''); + expect(result).toBe(true); + }); + + // returns false for empty string properties input + it('should return false for non object properties input', () => { + const result = arePropertiesValid('1234'); + expect(result).toBe(false); + }); +}); diff --git a/test/integrations/destinations/attentive_tag/processor/data.ts b/test/integrations/destinations/attentive_tag/processor/data.ts index 12e0f4bea1..c026569439 100644 --- a/test/integrations/destinations/attentive_tag/processor/data.ts +++ b/test/integrations/destinations/attentive_tag/processor/data.ts @@ -1458,7 +1458,7 @@ export const data = [ body: [ { statusCode: 400, - error: '[Attentive Tag]:The event name contains characters which is not allowed', + error: '[Attentive Tag]:The properties contains characters which is not allowed', statTags: { destType: 'ATTENTIVE_TAG', errorCategory: 'dataValidation', From 001ee2b013f6b6b2db1dd40e1368d10ae6d1ac9a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 20 Aug 2024 12:29:22 +0000 Subject: [PATCH 149/201] chore(release): 1.76.0 --- CHANGELOG.md | 17 +++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e4a636b4a..0483a544b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.76.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.75.1...v1.76.0) (2024-08-20) + + +### Features + +* klaviyo onboard unsubscribe profile support ([#3646](https://github.com/rudderlabs/rudder-transformer/issues/3646)) ([474f2bd](https://github.com/rudderlabs/rudder-transformer/commit/474f2bddc58e1962206e39d92514827f29f84c83)) +* onboard sfmc with vdm for rETL ([#3655](https://github.com/rudderlabs/rudder-transformer/issues/3655)) ([d987d1f](https://github.com/rudderlabs/rudder-transformer/commit/d987d1fc9afb9e1dc7482b2fe1458573f0f2699e)) + + +### Bug Fixes + +* add alias support in case alias details are present ([#3579](https://github.com/rudderlabs/rudder-transformer/issues/3579)) ([cb67262](https://github.com/rudderlabs/rudder-transformer/commit/cb672628b312f20ea0fcc27a60ec8ab5692f8b06)) +* attentive tag bugsnag issue ([#3663](https://github.com/rudderlabs/rudder-transformer/issues/3663)) ([866dbf3](https://github.com/rudderlabs/rudder-transformer/commit/866dbf3e81754e71ff8ac08b258b359ec5cc6889)) +* fixing facebook utils ([#3664](https://github.com/rudderlabs/rudder-transformer/issues/3664)) ([1a61675](https://github.com/rudderlabs/rudder-transformer/commit/1a6167584a5780ab50beda13cc5ef6bf4e283e38)) +* reserved properties for braze ([#3573](https://github.com/rudderlabs/rudder-transformer/issues/3573)) ([413e9ce](https://github.com/rudderlabs/rudder-transformer/commit/413e9ce56f8f6569bbeb188bff4f43d400ea71b1)) +* source transformation integration test generation ([#3645](https://github.com/rudderlabs/rudder-transformer/issues/3645)) ([23196ec](https://github.com/rudderlabs/rudder-transformer/commit/23196ec42acf35f314e1953f339f6acbb72edd70)) + ### [1.75.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.75.0...v1.75.1) (2024-08-14) diff --git a/package-lock.json b/package-lock.json index 8c7377da3e..3e1ab9730f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.75.1", + "version": "1.76.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.75.1", + "version": "1.76.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index c14e6b9ef5..9a0d1faccb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.75.1", + "version": "1.76.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 6b1a23af845084d6f2f5fd14656e4a1d11a7e34b Mon Sep 17 00:00:00 2001 From: Manish Kumar <144022547+manish339k@users.noreply.github.com> Date: Wed, 21 Aug 2024 11:52:19 +0530 Subject: [PATCH 150/201] feat: added bloomreach retl support (#3619) * feat: added bloomreach retl support * fix: resolving comments * feat: added other scenario test * fix: fixing payload structure * fix: fixing network handler for catalog * fix: minor change * fix: catalog batch items * feat: splitting bloomreach destination into bloomreach and bloomreach_catalog * chore: refactoring bloomreach catalog * chore: minor changes * chore: minor changes * chore: refactoring code after suggestion --- .../destinations/bloomreach_catalog/config.ts | 31 ++ .../bloomreach_catalog/rtWorkflow.yaml | 42 +++ .../bloomreach_catalog/transformRecord.ts | 93 +++++ .../destinations/bloomreach_catalog/utils.ts | 147 ++++++++ src/features.json | 3 +- .../bloomreach_catalog/networkHandler.js | 85 +++++ .../destinations/bloomreach_catalog/common.ts | 81 +++++ .../bloomreach_catalog/dataDelivery/data.ts | 197 +++++++++++ .../destinations/bloomreach_catalog/mocks.ts | 5 + .../bloomreach_catalog/network.ts | 108 ++++++ .../bloomreach_catalog/router/data.ts | 328 ++++++++++++++++++ 11 files changed, 1119 insertions(+), 1 deletion(-) create mode 100644 src/cdk/v2/destinations/bloomreach_catalog/config.ts create mode 100644 src/cdk/v2/destinations/bloomreach_catalog/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/bloomreach_catalog/transformRecord.ts create mode 100644 src/cdk/v2/destinations/bloomreach_catalog/utils.ts create mode 100644 src/v1/destinations/bloomreach_catalog/networkHandler.js create mode 100644 test/integrations/destinations/bloomreach_catalog/common.ts create mode 100644 test/integrations/destinations/bloomreach_catalog/dataDelivery/data.ts create mode 100644 test/integrations/destinations/bloomreach_catalog/mocks.ts create mode 100644 test/integrations/destinations/bloomreach_catalog/network.ts create mode 100644 test/integrations/destinations/bloomreach_catalog/router/data.ts diff --git a/src/cdk/v2/destinations/bloomreach_catalog/config.ts b/src/cdk/v2/destinations/bloomreach_catalog/config.ts new file mode 100644 index 0000000000..8b469c3cf9 --- /dev/null +++ b/src/cdk/v2/destinations/bloomreach_catalog/config.ts @@ -0,0 +1,31 @@ +export const MAX_PAYLOAD_SIZE = 10000000; +export const MAX_ITEMS = 5000; + +// ref:- https://documentation.bloomreach.com/engagement/reference/bulk-update-catalog-item +export const getCreateBulkCatalogItemEndpoint = ( + apiBaseUrl: string, + projectToken: string, + catalogId: string, +): string => `${apiBaseUrl}/data/v2/projects/${projectToken}/catalogs/${catalogId}/items`; + +// ref:- https://documentation.bloomreach.com/engagement/reference/bulk-partial-update-catalog-item +export const getUpdateBulkCatalogItemEndpoint = ( + apiBaseUrl: string, + projectToken: string, + catalogId: string, +): string => + `${apiBaseUrl}/data/v2/projects/${projectToken}/catalogs/${catalogId}/items/partial-update`; + +// ref:- https://documentation.bloomreach.com/engagement/reference/bulk-delete-catalog-items +export const getDeleteBulkCatalogItemEndpoint = ( + apiBaseUrl: string, + projectToken: string, + catalogId: string, +): string => + `${apiBaseUrl}/data/v2/projects/${projectToken}/catalogs/${catalogId}/items/bulk-delete`; + +export const CatalogAction = { + INSERT: 'insert', + UPDATE: 'update', + DELETE: 'delete', +}; diff --git a/src/cdk/v2/destinations/bloomreach_catalog/rtWorkflow.yaml b/src/cdk/v2/destinations/bloomreach_catalog/rtWorkflow.yaml new file mode 100644 index 0000000000..55809350eb --- /dev/null +++ b/src/cdk/v2/destinations/bloomreach_catalog/rtWorkflow.yaml @@ -0,0 +1,42 @@ +bindings: + - name: EventType + path: ../../../../constants + - name: processRecordInputs + path: ./transformRecord + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + - name: InstrumentationError + path: '@rudderstack/integrations-lib' + +steps: + - name: validateConfig + template: | + const config = ^[0].destination.Config + $.assertConfig(config.apiBaseUrl, "API Base URL is not present. Aborting"); + $.assertConfig(config.apiKey, "API Key is not present . Aborting"); + $.assertConfig(config.apiSecret, "API Secret is not present. Aborting"); + $.assertConfig(config.projectToken, "Project Token is not present. Aborting"); + $.assertConfig(config.catalogID, "Catalog Id is not present. Aborting"); + + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: processRecordEvents + template: | + $.processRecordInputs(^.{.message.type === $.EventType.RECORD}[], ^[0].destination) + + - name: failOtherEvents + template: | + const otherEvents = ^.{.message.type !== $.EventType.RECORD}[] + let failedEvents = otherEvents.map( + function(event) { + const error = new $.InstrumentationError("Event type " + event.message.type + " is not supported"); + $.handleRtTfSingleEventError(event, error, {}) + } + ) + failedEvents ?? [] + + - name: finalPayload + template: | + [...$.outputs.processRecordEvents, ...$.outputs.failOtherEvents] diff --git a/src/cdk/v2/destinations/bloomreach_catalog/transformRecord.ts b/src/cdk/v2/destinations/bloomreach_catalog/transformRecord.ts new file mode 100644 index 0000000000..68277448d0 --- /dev/null +++ b/src/cdk/v2/destinations/bloomreach_catalog/transformRecord.ts @@ -0,0 +1,93 @@ +import { InstrumentationError } from '@rudderstack/integrations-lib'; +import { CatalogAction } from './config'; +import { batchResponseBuilder } from './utils'; + +import { handleRtTfSingleEventError, isEmptyObject } from '../../../../v0/util'; + +const prepareCatalogInsertOrUpdatePayload = (fields: any): any => { + // eslint-disable-next-line @typescript-eslint/naming-convention + const { item_id, ...properties } = fields; + return { item_id, properties }; +}; + +const processEvent = (event: any) => { + const { message } = event; + const { fields, action } = message; + const response = { + action, + payload: null, + }; + if (isEmptyObject(fields)) { + throw new InstrumentationError('`fields` cannot be empty'); + } + if (!fields.item_id) { + throw new InstrumentationError('`item_id` cannot be empty'); + } + if (action === CatalogAction.INSERT || action === CatalogAction.UPDATE) { + response.payload = prepareCatalogInsertOrUpdatePayload(fields); + } else if (action === CatalogAction.DELETE) { + response.payload = fields.item_id; + } else { + throw new InstrumentationError( + `Invalid action type ${action}. You can only add, update or remove items from the catalog`, + ); + } + return response; +}; + +const getEventChunks = ( + input: any, + insertItemRespList: any[], + updateItemRespList: any[], + deleteItemRespList: any[], +) => { + switch (input.response.action) { + case CatalogAction.INSERT: + insertItemRespList.push({ payload: input.response.payload, metadata: input.metadata }); + break; + case CatalogAction.UPDATE: + updateItemRespList.push({ payload: input.response.payload, metadata: input.metadata }); + break; + case CatalogAction.DELETE: + deleteItemRespList.push({ payload: input.response.payload, metadata: input.metadata }); + break; + default: + throw new InstrumentationError(`Invalid action type ${input.response.action}`); + } +}; + +export const processRecordInputs = (inputs: any[], destination: any) => { + const insertItemRespList: any[] = []; + const updateItemRespList: any[] = []; + const deleteItemRespList: any[] = []; + const batchErrorRespList: any[] = []; + + if (!inputs || inputs.length === 0) { + return []; + } + + inputs.forEach((input) => { + try { + getEventChunks( + { + response: processEvent(input), + metadata: input.metadata, + }, + insertItemRespList, + updateItemRespList, + deleteItemRespList, + ); + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(input, error, {}); + batchErrorRespList.push(errRespEvent); + } + }); + + const batchSuccessfulRespList = batchResponseBuilder( + insertItemRespList, + updateItemRespList, + deleteItemRespList, + destination, + ); + return [...batchSuccessfulRespList, ...batchErrorRespList]; +}; diff --git a/src/cdk/v2/destinations/bloomreach_catalog/utils.ts b/src/cdk/v2/destinations/bloomreach_catalog/utils.ts new file mode 100644 index 0000000000..0e74ce9379 --- /dev/null +++ b/src/cdk/v2/destinations/bloomreach_catalog/utils.ts @@ -0,0 +1,147 @@ +import { BatchUtils } from '@rudderstack/workflow-engine'; +import { base64Convertor } from '@rudderstack/integrations-lib'; +import { + getCreateBulkCatalogItemEndpoint, + getDeleteBulkCatalogItemEndpoint, + getUpdateBulkCatalogItemEndpoint, + MAX_ITEMS, + MAX_PAYLOAD_SIZE, +} from './config'; + +const buildBatchedRequest = ( + payload: string, + method: string, + endpoint: string, + headers: any, + metadata: any, + destination: any, +) => ({ + batchedRequest: { + body: { + JSON: {}, + JSON_ARRAY: { batch: payload }, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method, + endpoint, + headers, + params: {}, + files: {}, + }, + metadata, + batched: true, + statusCode: 200, + destination, +}); + +const getHeaders = (destination: any) => ({ + 'Content-Type': 'application/json', + Authorization: `Basic ${base64Convertor(`${destination.Config.apiKey}:${destination.Config.apiSecret}`)}`, +}); + +// returns merged metadata for a batch +const getMergedMetadata = (batch: any[]) => batch.map((input) => input.metadata); + +// returns merged payload for a batch +const getMergedEvents = (batch: any[]) => batch.map((input) => input.payload); + +// builds final batched response for insert action records +const insertItemBatchResponseBuilder = (insertItemRespList: any[], destination: any) => { + const insertItemBatchedResponse: any[] = []; + + const method = 'PUT'; + const endpoint = getCreateBulkCatalogItemEndpoint( + destination.Config.apiBaseUrl, + destination.Config.projectToken, + destination.Config.catalogID, + ); + const headers = getHeaders(destination); + + const batchesOfEvents = BatchUtils.chunkArrayBySizeAndLength(insertItemRespList, { + maxSizeInBytes: MAX_PAYLOAD_SIZE, + maxItems: MAX_ITEMS, + }); + batchesOfEvents.items.forEach((batch: any) => { + const mergedPayload = JSON.stringify(getMergedEvents(batch)); + const mergedMetadata = getMergedMetadata(batch); + insertItemBatchedResponse.push( + buildBatchedRequest(mergedPayload, method, endpoint, headers, mergedMetadata, destination), + ); + }); + return insertItemBatchedResponse; +}; + +// builds final batched response for update action records +const updateItemBatchResponseBuilder = (updateItemRespList: any[], destination: any) => { + const updateItemBatchedResponse: any[] = []; + + const method = 'POST'; + const endpoint = getUpdateBulkCatalogItemEndpoint( + destination.Config.apiBaseUrl, + destination.Config.projectToken, + destination.Config.catalogID, + ); + const headers = getHeaders(destination); + + const batchesOfEvents = BatchUtils.chunkArrayBySizeAndLength(updateItemRespList, { + maxSizeInBytes: MAX_PAYLOAD_SIZE, + maxItems: MAX_ITEMS, + }); + batchesOfEvents.items.forEach((batch: any) => { + const mergedPayload = JSON.stringify(getMergedEvents(batch)); + const mergedMetadata = getMergedMetadata(batch); + updateItemBatchedResponse.push( + buildBatchedRequest(mergedPayload, method, endpoint, headers, mergedMetadata, destination), + ); + }); + return updateItemBatchedResponse; +}; + +// builds final batched response for delete action records +const deleteItemBatchResponseBuilder = (deleteItemRespList: any[], destination: any) => { + const deleteItemBatchedResponse: any[] = []; + + const method = 'DELETE'; + const endpoint = getDeleteBulkCatalogItemEndpoint( + destination.Config.apiBaseUrl, + destination.Config.projectToken, + destination.Config.catalogID, + ); + const headers = getHeaders(destination); + + const batchesOfEvents = BatchUtils.chunkArrayBySizeAndLength(deleteItemRespList, { + maxSizeInBytes: MAX_PAYLOAD_SIZE, + maxItems: MAX_ITEMS, + }); + batchesOfEvents.items.forEach((batch: any) => { + const mergedPayload = JSON.stringify(getMergedEvents(batch)); + const mergedMetadata = getMergedMetadata(batch); + deleteItemBatchedResponse.push( + buildBatchedRequest(mergedPayload, method, endpoint, headers, mergedMetadata, destination), + ); + }); + return deleteItemBatchedResponse; +}; + +// returns final batched response +export const batchResponseBuilder = ( + insertItemRespList: any, + updateItemRespList: any, + deleteItemRespList: any, + destination: any, +) => { + const response: any[] = []; + if (insertItemRespList.length > 0) { + response.push(...insertItemBatchResponseBuilder(insertItemRespList, destination)); + } + if (updateItemRespList.length > 0) { + response.push(...updateItemBatchResponseBuilder(updateItemRespList, destination)); + } + if (deleteItemRespList.length > 0) { + response.push(...deleteItemBatchResponseBuilder(deleteItemRespList, destination)); + } + return response; +}; diff --git a/src/features.json b/src/features.json index 94e36a2416..1a69a58307 100644 --- a/src/features.json +++ b/src/features.json @@ -76,7 +76,8 @@ "WUNDERKIND": true, "CLICKSEND": true, "ZOHO": true, - "CORDIAL": true + "CORDIAL": true, + "BLOOMREACH_CATALOG": true }, "regulations": [ "BRAZE", diff --git a/src/v1/destinations/bloomreach_catalog/networkHandler.js b/src/v1/destinations/bloomreach_catalog/networkHandler.js new file mode 100644 index 0000000000..1fb987b840 --- /dev/null +++ b/src/v1/destinations/bloomreach_catalog/networkHandler.js @@ -0,0 +1,85 @@ +const { TransformerProxyError } = require('../../../v0/util/errorTypes'); +const { proxyRequest, prepareProxyRequest } = require('../../../adapters/network'); +const { + processAxiosResponse, + getDynamicErrorType, +} = require('../../../adapters/utils/networkUtils'); +const { isHttpStatusSuccess } = require('../../../v0/util/index'); +const tags = require('../../../v0/util/tags'); + +// Catalog response +// [ +// { +// "errors": { +// "properties": [ +// "Fields [field1, field2] are not properly defined." +// ] +// }, +// "queued": false, +// "success": false +// }, +// { +// "success" : "True", +// "queued" : "True", +// }, +// ] +const checkIfEventIsAbortableAndExtractErrorMessage = (element) => { + if (element.success) { + return { isAbortable: false, errorMsg: '' }; + } + + const errorMsg = Object.values(element.errors || {}) + .flat() + .join(', '); + + return { isAbortable: true, errorMsg }; +}; + +const responseHandler = (responseParams) => { + const { destinationResponse, rudderJobMetadata } = responseParams; + + const message = '[BLOOMREACH_CATALOG Response V1 Handler] - Request Processed Successfully'; + const responseWithIndividualEvents = []; + const { response, status } = destinationResponse; + + if (isHttpStatusSuccess(status)) { + // check for Partial Event failures and Successes + response.forEach((event, idx) => { + const proxyOutput = { + statusCode: 200, + error: 'success', + metadata: rudderJobMetadata[idx], + }; + // update status of partial event if abortable + const { isAbortable, errorMsg } = checkIfEventIsAbortableAndExtractErrorMessage(event); + if (isAbortable) { + proxyOutput.error = errorMsg; + proxyOutput.statusCode = 400; + } + responseWithIndividualEvents.push(proxyOutput); + }); + return { + status, + message, + destinationResponse, + response: responseWithIndividualEvents, + }; + } + throw new TransformerProxyError( + `BLOOMREACH_CATALOG: Error encountered in transformer proxy V1`, + status, + { + [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + destinationResponse, + '', + responseWithIndividualEvents, + ); +}; +function networkHandler() { + this.proxy = proxyRequest; + this.processAxiosResponse = processAxiosResponse; + this.prepareProxy = prepareProxyRequest; + this.responseHandler = responseHandler; +} +module.exports = { networkHandler }; diff --git a/test/integrations/destinations/bloomreach_catalog/common.ts b/test/integrations/destinations/bloomreach_catalog/common.ts new file mode 100644 index 0000000000..2b4266837b --- /dev/null +++ b/test/integrations/destinations/bloomreach_catalog/common.ts @@ -0,0 +1,81 @@ +import { Destination } from '../../../../src/types'; + +const destType = 'bloomreach_catalog'; +const destTypeInUpperCase = 'BLOOMREACH_CATALOG'; +const displayName = 'bloomreach catalog'; +const channel = 'web'; +const destination: Destination = { + Config: { + apiBaseUrl: 'https://demoapp-api.bloomreach.com', + apiKey: 'test-api-key', + apiSecret: 'test-api-secret', + projectToken: 'test-project-token', + catalogID: 'test-catalog-id', + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', +}; + +const insertEndpoint = + 'https://demoapp-api.bloomreach.com/data/v2/projects/test-project-token/catalogs/test-catalog-id/items'; +const updateEndpoint = + 'https://demoapp-api.bloomreach.com/data/v2/projects/test-project-token/catalogs/test-catalog-id/items/partial-update'; +const deleteEndpoint = + 'https://demoapp-api.bloomreach.com/data/v2/projects/test-project-token/catalogs/test-catalog-id/items/bulk-delete'; + +const processorInstrumentationErrorStatTags = { + destType: destTypeInUpperCase, + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', +}; + +const RouterInstrumentationErrorStatTags = { + ...processorInstrumentationErrorStatTags, + feature: 'router', +}; + +const proxyV1RetryableErrorStatTags = { + ...RouterInstrumentationErrorStatTags, + errorCategory: 'network', + errorType: 'retryable', + feature: 'dataDelivery', + implementation: 'native', +}; + +const headers = { + 'Content-Type': 'application/json', + Authorization: 'Basic dGVzdC1hcGkta2V5OnRlc3QtYXBpLXNlY3JldA==', +}; + +const sampleContext = { + destinationFields: 'item_id, title, status, unprinted', + mappedToDestination: 'true', +}; + +export { + destType, + channel, + destination, + processorInstrumentationErrorStatTags, + RouterInstrumentationErrorStatTags, + headers, + proxyV1RetryableErrorStatTags, + insertEndpoint, + updateEndpoint, + deleteEndpoint, + sampleContext, +}; diff --git a/test/integrations/destinations/bloomreach_catalog/dataDelivery/data.ts b/test/integrations/destinations/bloomreach_catalog/dataDelivery/data.ts new file mode 100644 index 0000000000..f8cccd04ed --- /dev/null +++ b/test/integrations/destinations/bloomreach_catalog/dataDelivery/data.ts @@ -0,0 +1,197 @@ +import { ProxyV1TestData } from '../../../testTypes'; +import { destType, headers, updateEndpoint } from '../common'; +import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; + +export const data: ProxyV1TestData[] = [ + { + id: 'bloomreach_catalog_v1_business_scenario_1', + name: destType, + description: + '[Proxy v1 API] :: Test for a valid record request - where the destination responds with 200 with error for request 2 in a batch', + successCriteria: 'Should return 200 with partial failures within the response payload', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + headers, + params: {}, + JSON: {}, + JSON_ARRAY: { + batch: + '[{"item_id":"test-item-id","properties":{"unprinted":"1"}},{"item_id":"test-item-id-faulty","properties":{"unprinted1":"1"}}]', + }, + endpoint: updateEndpoint, + }, + [generateMetadata(1), generateMetadata(2)], + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[BLOOMREACH_CATALOG Response V1 Handler] - Request Processed Successfully', + destinationResponse: { + response: [ + { + success: true, + queued: true, + }, + { + success: false, + queued: false, + errors: { + properties: ['Fields [unprinted1] are not properly defined.'], + }, + }, + ], + status: 200, + }, + response: [ + { + statusCode: 200, + metadata: generateMetadata(1), + error: 'success', + }, + { + statusCode: 400, + metadata: generateMetadata(2), + error: 'Fields [unprinted1] are not properly defined.', + }, + ], + }, + }, + }, + }, + }, + { + id: 'bloomreach_catalog_v1_business_scenario_2', + name: destType, + description: + '[Proxy v1 API] :: Test for a valid rETL request - where the destination responds with 200 without any error', + successCriteria: 'Should return 200 with no error with destination response', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + headers, + params: {}, + JSON: {}, + JSON_ARRAY: { + batch: + '[{"item_id":"test-item-id-1","properties":{"unprinted":"1"}},{"item_id":"test-item-id-2","properties":{"unprinted":"2"}}]', + }, + endpoint: updateEndpoint, + }, + [generateMetadata(3), generateMetadata(4)], + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[BLOOMREACH_CATALOG Response V1 Handler] - Request Processed Successfully', + destinationResponse: { + response: [ + { + success: true, + queued: true, + }, + { + success: true, + queued: true, + }, + ], + status: 200, + }, + response: [ + { + statusCode: 200, + metadata: generateMetadata(3), + error: 'success', + }, + { + statusCode: 200, + metadata: generateMetadata(4), + error: 'success', + }, + ], + }, + }, + }, + }, + }, + { + id: 'bloomreach_catalog_v1_business_scenario_3', + name: destType, + description: + '[Proxy v1 API] :: Test for a valid rETL request - where the destination responds with 200 with error', + successCriteria: 'Should return 400 with error message', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + headers, + params: {}, + JSON: {}, + JSON_ARRAY: { + batch: '[{"item_id":"test-item-id-faulty","properties":{"unprinted1":"1"}}]', + }, + endpoint: updateEndpoint, + }, + [generateMetadata(5)], + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + status: 200, + message: '[BLOOMREACH_CATALOG Response V1 Handler] - Request Processed Successfully', + destinationResponse: { + response: [ + { + success: false, + queued: false, + errors: { + properties: ['Fields [unprinted1] are not properly defined.'], + }, + }, + ], + status: 200, + }, + response: [ + { + statusCode: 400, + metadata: generateMetadata(5), + error: 'Fields [unprinted1] are not properly defined.', + }, + ], + }, + }, + }, + }, + }, +]; diff --git a/test/integrations/destinations/bloomreach_catalog/mocks.ts b/test/integrations/destinations/bloomreach_catalog/mocks.ts new file mode 100644 index 0000000000..bb07c0ea72 --- /dev/null +++ b/test/integrations/destinations/bloomreach_catalog/mocks.ts @@ -0,0 +1,5 @@ +import * as config from '../../../../src/cdk/v2/destinations/bloomreach_catalog/config'; + +export const defaultMockFns = () => { + jest.replaceProperty(config, 'MAX_ITEMS', 2 as typeof config.MAX_ITEMS); +}; diff --git a/test/integrations/destinations/bloomreach_catalog/network.ts b/test/integrations/destinations/bloomreach_catalog/network.ts new file mode 100644 index 0000000000..b8ae078498 --- /dev/null +++ b/test/integrations/destinations/bloomreach_catalog/network.ts @@ -0,0 +1,108 @@ +import { destType, headers, updateEndpoint } from './common'; + +export const networkCallsData = [ + { + httpReq: { + url: updateEndpoint, + data: [ + { + item_id: 'test-item-id', + properties: { + unprinted: '1', + }, + }, + { + item_id: 'test-item-id-faulty', + properties: { + unprinted1: '1', + }, + }, + ], + params: { destination: destType }, + headers, + method: 'POST', + }, + httpRes: { + data: [ + { + success: true, + queued: true, + }, + { + success: false, + queued: false, + errors: { + properties: ['Fields [unprinted1] are not properly defined.'], + }, + }, + ], + status: 200, + statusText: 'Ok', + }, + }, + { + httpReq: { + url: updateEndpoint, + data: [ + { + item_id: 'test-item-id-1', + properties: { + unprinted: '1', + }, + }, + { + item_id: 'test-item-id-2', + properties: { + unprinted: '2', + }, + }, + ], + params: { destination: destType }, + headers, + method: 'POST', + }, + httpRes: { + data: [ + { + success: true, + queued: true, + }, + { + success: true, + queued: true, + }, + ], + status: 200, + statusText: 'Ok', + }, + }, + { + httpReq: { + url: updateEndpoint, + data: [ + { + item_id: 'test-item-id-faulty', + properties: { + unprinted1: '1', + }, + }, + ], + params: { destination: destType }, + headers, + method: 'POST', + }, + httpRes: { + data: [ + { + success: false, + queued: false, + errors: { + properties: ['Fields [unprinted1] are not properly defined.'], + }, + }, + ], + status: 200, + statusText: 'Ok', + }, + }, +]; diff --git a/test/integrations/destinations/bloomreach_catalog/router/data.ts b/test/integrations/destinations/bloomreach_catalog/router/data.ts new file mode 100644 index 0000000000..68ab422444 --- /dev/null +++ b/test/integrations/destinations/bloomreach_catalog/router/data.ts @@ -0,0 +1,328 @@ +import { generateMetadata } from '../../../testUtils'; +import { defaultMockFns } from '../mocks'; +import { + destType, + destination, + headers, + RouterInstrumentationErrorStatTags, + insertEndpoint, + updateEndpoint, + deleteEndpoint, + sampleContext, +} from '../common'; + +const routerRequest = { + input: [ + { + message: { + type: 'record', + action: 'insert', + fields: { + item_id: 'test-item-id', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 1, + }, + channel: 'sources', + context: sampleContext, + recordId: '1', + }, + metadata: generateMetadata(1), + destination, + }, + { + message: { + type: 'record', + action: 'insert', + fields: { + item_id: 'test-item-id-7', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 1, + test_empty: '', + test_null: null, + test_empty_array: [], + }, + channel: 'sources', + context: sampleContext, + recordId: '2', + }, + metadata: generateMetadata(2), + destination, + }, + { + message: { + type: 'record', + action: 'update', + fields: { + item_id: 'test-item-id', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 3, + }, + channel: 'sources', + context: sampleContext, + recordId: '3', + }, + metadata: generateMetadata(3), + destination, + }, + { + message: { + type: 'record', + action: 'update', + fields: { + item_id: 'test-item-id', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 2, + }, + channel: 'sources', + context: sampleContext, + recordId: '4', + }, + metadata: generateMetadata(4), + destination, + }, + { + message: { + type: 'record', + action: 'delete', + fields: { + item_id: 'test-item-id-1', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 1, + }, + channel: 'sources', + context: sampleContext, + recordId: '5', + }, + metadata: generateMetadata(5), + destination, + }, + { + message: { + type: 'record', + action: 'delete', + fields: { + item_id: 'test-item-id-2', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 1, + }, + channel: 'sources', + context: sampleContext, + recordId: '6', + }, + metadata: generateMetadata(6), + destination, + }, + { + message: { + type: 'record', + action: 'delete', + fields: { + item_id: 'test-item-id-3', + title: 'Hardcover Monthbooks', + status: 'up to date', + unprinted: 1, + }, + channel: 'sources', + context: sampleContext, + recordId: '7', + }, + metadata: generateMetadata(7), + destination, + }, + { + message: { + type: 'record', + action: 'insert', + fields: {}, + channel: 'sources', + context: sampleContext, + recordId: '8', + }, + metadata: generateMetadata(8), + destination, + }, + { + message: { + type: 'record', + action: 'dummy-action', + fields: { + item_id: 'test-item-id', + }, + channel: 'sources', + context: sampleContext, + recordId: '9', + }, + metadata: generateMetadata(9), + destination, + }, + { + message: { + type: 'record', + action: 'insert', + fields: { + item_id: null, + }, + channel: 'sources', + context: sampleContext, + recordId: '10', + }, + metadata: generateMetadata(10), + destination, + }, + ], + destType, +}; + +export const data = [ + { + id: 'bloomreach-catalog-router-test-1', + name: destType, + description: 'Basic Router Test to test record payloads', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'PUT', + endpoint: insertEndpoint, + headers, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"item_id":"test-item-id","properties":{"title":"Hardcover Monthbooks","status":"up to date","unprinted":1}},{"item_id":"test-item-id-7","properties":{"title":"Hardcover Monthbooks","status":"up to date","unprinted":1,"test_empty":"","test_null":null,"test_empty_array":[]}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1), generateMetadata(2)], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: updateEndpoint, + headers, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"item_id":"test-item-id","properties":{"title":"Hardcover Monthbooks","status":"up to date","unprinted":3}},{"item_id":"test-item-id","properties":{"title":"Hardcover Monthbooks","status":"up to date","unprinted":2}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(3), generateMetadata(4)], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: deleteEndpoint, + headers, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: '["test-item-id-1","test-item-id-2"]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(5), generateMetadata(6)], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'DELETE', + endpoint: deleteEndpoint, + headers, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: '["test-item-id-3"]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(7)], + batched: true, + statusCode: 200, + destination, + }, + { + metadata: [generateMetadata(8)], + batched: false, + statusCode: 400, + error: '`fields` cannot be empty', + statTags: RouterInstrumentationErrorStatTags, + destination, + }, + { + metadata: [generateMetadata(9)], + batched: false, + statusCode: 400, + error: + 'Invalid action type dummy-action. You can only add, update or remove items from the catalog', + statTags: RouterInstrumentationErrorStatTags, + destination, + }, + { + metadata: [generateMetadata(10)], + batched: false, + statusCode: 400, + error: '`item_id` cannot be empty', + statTags: RouterInstrumentationErrorStatTags, + destination, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, +]; From 474a36ec385abf9ff83596b062d4d8e4c24469b8 Mon Sep 17 00:00:00 2001 From: Aanshi Lahoti <110057617+aanshi07@users.noreply.github.com> Date: Wed, 21 Aug 2024 14:45:31 +0530 Subject: [PATCH 151/201] feat: onboard smartly destination (#3660) * feat: onboard smartly destination * chore: updated processor changes * chore: router changes added * chore: mock test added * chore: batch builder func and test case updated * chore: update for auth token * fix: edit after primary dev testing * fix: test * fix: editing test caes * fix: smartly test cases * chore: updated test cases and function * chore: ignore eslint of yaml files * chore: add .eslintignore to .prettierignore * chore: ignore eslint of yaml files * chore: update .prettierignore * chore: update .eslintignore * chore: updated enpoint for processor --------- Co-authored-by: shrouti1507 Co-authored-by: Dilip Kola Co-authored-by: Dilip Kola <33080863+koladilip@users.noreply.github.com> --- .eslintignore | 5 + .eslintrc.json | 3 +- .prettierignore | 2 + src/cdk/v2/destinations/smartly/config.js | 21 ++ .../smartly/data/trackMapping.json | 76 ++++ .../v2/destinations/smartly/procWorkflow.yaml | 31 ++ .../v2/destinations/smartly/rtWorkflow.yaml | 35 ++ src/cdk/v2/destinations/smartly/utils.js | 108 ++++++ src/cdk/v2/destinations/smartly/utils.test.js | 59 ++++ src/features.json | 3 +- .../destinations/smartly/commonConfig.ts | 40 +++ .../destinations/smartly/mocks.ts | 6 + .../destinations/smartly/processor/data.ts | 9 + .../destinations/smartly/processor/track.ts | 71 ++++ .../smartly/processor/validation.ts | 174 +++++++++ .../destinations/smartly/router/data.ts | 329 ++++++++++++++++++ 16 files changed, 970 insertions(+), 2 deletions(-) create mode 100644 src/cdk/v2/destinations/smartly/config.js create mode 100644 src/cdk/v2/destinations/smartly/data/trackMapping.json create mode 100644 src/cdk/v2/destinations/smartly/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/smartly/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/smartly/utils.js create mode 100644 src/cdk/v2/destinations/smartly/utils.test.js create mode 100644 test/integrations/destinations/smartly/commonConfig.ts create mode 100644 test/integrations/destinations/smartly/mocks.ts create mode 100644 test/integrations/destinations/smartly/processor/data.ts create mode 100644 test/integrations/destinations/smartly/processor/track.ts create mode 100644 test/integrations/destinations/smartly/processor/validation.ts create mode 100644 test/integrations/destinations/smartly/router/data.ts diff --git a/.eslintignore b/.eslintignore index ce54730f4b..b1bbed4416 100644 --- a/.eslintignore +++ b/.eslintignore @@ -21,3 +21,8 @@ src/v0/destinations/personalize/scripts/ test/integrations/destinations/testTypes.d.ts *.config*.js scripts/skipPrepareScript.js +*.yaml +*.yml +.eslintignore +.prettierignore +*.json \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 556470697d..144b90e348 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -19,7 +19,8 @@ "parserOptions": { "ecmaVersion": 12, "sourceType": "module", - "project": "./tsconfig.json" + "project": "./tsconfig.json", + "extraFileExtensions": [".yaml"] }, "rules": { "unicorn/filename-case": [ diff --git a/.prettierignore b/.prettierignore index 99747b29bb..ac5f1fc409 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,3 +8,5 @@ test/**/*.js src/util/lodash-es-core.js src/util/url-search-params.min.js dist +.eslintignore +.prettierignore diff --git a/src/cdk/v2/destinations/smartly/config.js b/src/cdk/v2/destinations/smartly/config.js new file mode 100644 index 0000000000..5083fde5fe --- /dev/null +++ b/src/cdk/v2/destinations/smartly/config.js @@ -0,0 +1,21 @@ +const { getMappingConfig } = require('../../../../v0/util'); + +const ConfigCategories = { + TRACK: { + type: 'track', + name: 'trackMapping', + }, +}; + +const mappingConfig = getMappingConfig(ConfigCategories, __dirname); +const singleEventEndpoint = 'https://s2s.smartly.io/events'; +const batchEndpoint = 'https://s2s.smartly.io/events/batch'; + +module.exports = { + ConfigCategories, + mappingConfig, + singleEventEndpoint, + batchEndpoint, + TRACK_CONFIG: mappingConfig[ConfigCategories.TRACK.name], + MAX_BATCH_SIZE: 1000, +}; diff --git a/src/cdk/v2/destinations/smartly/data/trackMapping.json b/src/cdk/v2/destinations/smartly/data/trackMapping.json new file mode 100644 index 0000000000..55ba437f12 --- /dev/null +++ b/src/cdk/v2/destinations/smartly/data/trackMapping.json @@ -0,0 +1,76 @@ +[ + { + "destKey": "value", + "sourceKeys": [ + "properties.total", + "properties.value", + "properties.revenue", + { + "operation": "multiplication", + "args": [ + { + "sourceKeys": "properties.price" + }, + { + "sourceKeys": "properties.quantity", + "default": 1 + } + ] + } + ], + "metadata": { + "type": "toNumber" + }, + "required": false + }, + { + "sourceKeys": ["properties.conversions", "properties.products.length"], + "required": false, + "metadata": { + "defaultValue": "1" + }, + "destKey": "conversions" + }, + { + "sourceKeys": ["properties.adUnitId", "properties.ad_unit_id"], + "required": true, + "destKey": "ad_unit_id", + "metadata": { + "type": "toString" + } + }, + { + "sourceKeys": ["properties.platform"], + "required": true, + "destKey": "platform" + }, + { + "sourceKeys": ["properties.adInteractionTime", "properties.ad_interaction_time"], + "required": true, + "metadata": { + "type": "secondTimestamp" + }, + "destKey": "ad_interaction_time" + }, + { + "sourceKeys": ["properties.installTime"], + "required": false, + "metadata": { + "type": "secondTimestamp" + }, + "destKey": "installTime" + }, + { + "sourceKeys": ["originalTimestamp", "timestamp"], + "required": false, + "metadata": { + "type": "secondTimestamp" + }, + "destKey": "event_time" + }, + { + "sourceKeys": ["properties.currency"], + "required": false, + "destKey": "value_currency" + } +] diff --git a/src/cdk/v2/destinations/smartly/procWorkflow.yaml b/src/cdk/v2/destinations/smartly/procWorkflow.yaml new file mode 100644 index 0000000000..b69df0dd09 --- /dev/null +++ b/src/cdk/v2/destinations/smartly/procWorkflow.yaml @@ -0,0 +1,31 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + - name: defaultRequestConfig + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: constructPayload + path: ../../../../v0/util + - path: ./config + - path: ./utils +steps: + - name: messageType + template: | + .message.type.toLowerCase(); + - name: validateInput + template: | + let messageType = $.outputs.messageType; + $.assert(messageType, "message Type is not present. Aborting"); + $.assert(messageType in {{$.EventType.([.TRACK])}}, "message type " + messageType + " is not supported"); + $.assertConfig(.destination.Config.apiToken, "API Token is not present. Aborting"); + - name: preparePayload + template: | + const payload = $.removeUndefinedAndNullValues($.constructPayload(.message, $.TRACK_CONFIG)); + $.verifyAdInteractionTime(payload.ad_interaction_time); + $.context.payloadList = $.getPayloads(.message.event, .destination.Config, payload) + - name: buildResponse + template: | + const response = $.buildResponseList($.context.payloadList) + response diff --git a/src/cdk/v2/destinations/smartly/rtWorkflow.yaml b/src/cdk/v2/destinations/smartly/rtWorkflow.yaml new file mode 100644 index 0000000000..4d3afdb6d0 --- /dev/null +++ b/src/cdk/v2/destinations/smartly/rtWorkflow.yaml @@ -0,0 +1,35 @@ +bindings: + - path: ./config + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + - path: ./utils +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + loopOverInput: true + + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "output": .body.JSON, + "destination": ^[idx].destination, + "metadata": ^[idx].metadata + })[] + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + - name: batchSuccessfulEvents + description: Batches the successfulEvents + template: | + $.batchResponseBuilder($.outputs.successfulEvents); + + - name: finalPayload + template: | + [...$.outputs.failedEvents, ...$.outputs.batchSuccessfulEvents] diff --git a/src/cdk/v2/destinations/smartly/utils.js b/src/cdk/v2/destinations/smartly/utils.js new file mode 100644 index 0000000000..7d53ed0d27 --- /dev/null +++ b/src/cdk/v2/destinations/smartly/utils.js @@ -0,0 +1,108 @@ +const { BatchUtils } = require('@rudderstack/workflow-engine'); +const { InstrumentationError } = require('@rudderstack/integrations-lib'); +const moment = require('moment'); +const config = require('./config'); +const { + getHashFromArrayWithDuplicate, + defaultRequestConfig, + isDefinedAndNotNull, +} = require('../../../../v0/util'); + +// docs reference : https://support.smartly.io/hc/en-us/articles/4406049685788-S2S-integration-API-description#01H8HBXZF6WSKSYBW1C6NY8A88 + +/** + * This function generates an array of payload objects, each with the event property set + * to different values associated with the given event name according to eventsMapping + * @param {*} event + * @param {*} eventsMapping + * @param {*} payload + * @returns + */ +const getPayloads = (event, Config, payload) => { + if (!isDefinedAndNotNull(event) || typeof event !== 'string') { + throw new InstrumentationError('Event is not defined or is not String'); + } + const eventsMap = getHashFromArrayWithDuplicate(Config.eventsMapping); + // eventsMap = hashmap {"prop1":["val1","val2"],"prop2":["val2"]} + const eventList = Array.isArray(eventsMap[event.toLowerCase()]) + ? eventsMap[event.toLowerCase()] + : Array.from(eventsMap[event.toLowerCase()] || [event]); + + const payloadLists = eventList.map((ev) => ({ ...payload, event_name: ev })); + return payloadLists; +}; + +// ad_interaction_time must be within one year in the future and three years in the past from the current date +// Example : "1735680000" +const verifyAdInteractionTime = (adInteractionTime) => { + if (isDefinedAndNotNull(adInteractionTime)) { + const now = moment(); + const threeYearAgo = now.clone().subtract(3, 'year'); + const oneYearFromNow = now.clone().add(1, 'year'); + const inputMoment = moment(adInteractionTime * 1000); // Convert to milliseconds + if (!inputMoment.isAfter(threeYearAgo) || !inputMoment.isBefore(oneYearFromNow)) { + throw new InstrumentationError( + 'ad_interaction_time must be within one year in the future and three years in the past.', + ); + } + } +}; + +const buildResponseList = (payloadList) => + payloadList.map((payload) => { + const response = defaultRequestConfig(); + response.body.JSON = payload; + response.endpoint = config.singleEventEndpoint; + response.method = 'POST'; + return response; + }); + +const batchBuilder = (batch, destination) => ({ + batchedRequest: { + body: { + JSON: { events: batch.map((event) => event.output) }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: config.batchEndpoint, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${destination.Config.apiToken}`, + }, + params: {}, + files: {}, + }, + metadata: batch + .map((event) => event.metadata) + .filter((metadata, index, self) => self.findIndex((m) => m.jobId === metadata.jobId) === index), // handling jobId duplication for multiplexed events + batched: true, + statusCode: 200, + destination: batch[0].destination, +}); + +/** + * This fucntions make chunk of successful events based on MAX_BATCH_SIZE + * and then build the response for each chunk to be returned as object of an array + * @param {*} events + * @returns + */ +const batchResponseBuilder = (events) => { + if (events.length === 0) { + return []; + } + const { destination } = events[0]; + const batches = BatchUtils.chunkArrayBySizeAndLength(events, { maxItems: config.MAX_BATCH_SIZE }); + + const response = []; + batches.items.forEach((batch) => { + const batchedResponse = batchBuilder(batch, destination); + response.push(batchedResponse); + }); + return response; +}; + +module.exports = { batchResponseBuilder, getPayloads, buildResponseList, verifyAdInteractionTime }; diff --git a/src/cdk/v2/destinations/smartly/utils.test.js b/src/cdk/v2/destinations/smartly/utils.test.js new file mode 100644 index 0000000000..0ad73f5369 --- /dev/null +++ b/src/cdk/v2/destinations/smartly/utils.test.js @@ -0,0 +1,59 @@ +const moment = require('moment'); +const { verifyAdInteractionTime } = require('./utils'); + +describe('verifyAdInteractionTime', () => { + it('should pass when adInteractionTime is 2 years in the past (UNIX timestamp)', () => { + // 2 years ago from now + const adInteractionTime = moment().subtract(2, 'years').unix(); + expect(() => verifyAdInteractionTime(adInteractionTime)).not.toThrow(); + }); + + it('should pass when adInteractionTime is 10 months in the future (UNIX timestamp)', () => { + // 10 months in the future from now + const adInteractionTime = moment().add(10, 'months').unix(); + expect(() => verifyAdInteractionTime(adInteractionTime)).not.toThrow(); + }); + + it('should fail when adInteractionTime is 4 years in the past (UNIX timestamp)', () => { + // 4 years ago from now + const adInteractionTime = moment().subtract(4, 'years').unix(); + expect(() => verifyAdInteractionTime(adInteractionTime)).toThrow( + 'ad_interaction_time must be within one year in the future and three years in the past.', + ); + }); + + it('should fail when adInteractionTime is 2 years in the future (UNIX timestamp)', () => { + // 2 years in the future from now + const adInteractionTime = moment().add(2, 'years').unix(); + expect(() => verifyAdInteractionTime(adInteractionTime)).toThrow( + 'ad_interaction_time must be within one year in the future and three years in the past.', + ); + }); + + it('should pass when adInteractionTime is exactly 1 year in the future (UTC date string)', () => { + // Exactly 1 year in the future from now + const adInteractionTime = moment.utc().add(1, 'year').toISOString(); + expect(() => verifyAdInteractionTime(adInteractionTime)).toThrow(); + }); + + it('should fail when adInteractionTime is 4 years in the past (UTC date string)', () => { + // 4 years ago from now + const adInteractionTime = moment.utc().subtract(4, 'years').toISOString(); + expect(() => verifyAdInteractionTime(adInteractionTime)).toThrow( + 'ad_interaction_time must be within one year in the future and three years in the past.', + ); + }); + + it('should fail when adInteractionTime is 2 years in the future (UTC date string)', () => { + // 2 years in the future from now + const adInteractionTime = moment.utc().add(2, 'years').toISOString(); + expect(() => verifyAdInteractionTime(adInteractionTime)).toThrow( + 'ad_interaction_time must be within one year in the future and three years in the past.', + ); + }); + + it('should not throw an error if adInteractionTime is null or undefined', () => { + expect(() => verifyAdInteractionTime(null)).not.toThrow(); + expect(() => verifyAdInteractionTime(undefined)).not.toThrow(); + }); +}); diff --git a/src/features.json b/src/features.json index 1a69a58307..a0261683a8 100644 --- a/src/features.json +++ b/src/features.json @@ -77,7 +77,8 @@ "CLICKSEND": true, "ZOHO": true, "CORDIAL": true, - "BLOOMREACH_CATALOG": true + "BLOOMREACH_CATALOG": true, + "SMARTLY": true }, "regulations": [ "BRAZE", diff --git a/test/integrations/destinations/smartly/commonConfig.ts b/test/integrations/destinations/smartly/commonConfig.ts new file mode 100644 index 0000000000..f5b0a6f4d4 --- /dev/null +++ b/test/integrations/destinations/smartly/commonConfig.ts @@ -0,0 +1,40 @@ +export const destination = { + ID: 'random_id', + Name: 'smartly', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiToken: 'testAuthToken', + eventsMapping: [ + { + from: 'product list viewed', + to: 'event1', + }, + { + from: 'product list viewed', + to: 'event2', + }, + ], + }, +}; + +export const routerInstrumentationErrorStatTags = { + destType: 'SMARTLY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'router', + implementation: 'cdkV2', + module: 'destination', +}; +export const processInstrumentationErrorStatTags = { + destType: 'SMARTLY', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'dummyDestId', +}; diff --git a/test/integrations/destinations/smartly/mocks.ts b/test/integrations/destinations/smartly/mocks.ts new file mode 100644 index 0000000000..78773d8853 --- /dev/null +++ b/test/integrations/destinations/smartly/mocks.ts @@ -0,0 +1,6 @@ +import config from '../../../../src/cdk/v2/destinations/smartly/config'; + +export const defaultMockFns = () => { + jest.useFakeTimers().setSystemTime(new Date('2024-02-01')); + jest.replaceProperty(config, 'MAX_BATCH_SIZE', 2); +}; diff --git a/test/integrations/destinations/smartly/processor/data.ts b/test/integrations/destinations/smartly/processor/data.ts new file mode 100644 index 0000000000..a94f6b220f --- /dev/null +++ b/test/integrations/destinations/smartly/processor/data.ts @@ -0,0 +1,9 @@ +import { trackTestData } from './track'; +import { validationFailures } from './validation'; + +export const mockFns = (_) => { + // @ts-ignore + jest.useFakeTimers().setSystemTime(new Date('2024-02-01')); +}; + +export const data = [...trackTestData, ...validationFailures].map((d) => ({ ...d, mockFns })); diff --git a/test/integrations/destinations/smartly/processor/track.ts b/test/integrations/destinations/smartly/processor/track.ts new file mode 100644 index 0000000000..944327fce3 --- /dev/null +++ b/test/integrations/destinations/smartly/processor/track.ts @@ -0,0 +1,71 @@ +import { destination } from '../commonConfig'; + +export const trackTestData = [ + { + name: 'smartly', + description: 'Test 0', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + event: 'Add to cart', + properties: { + platform: 'meta', + ad_unit_id: '228287', + ad_interaction_time: 1735680000, + email: 'eventIdn01@sample.com', + }, + type: 'track', + userId: 'eventIdn01', + }, + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://s2s.smartly.io/events', + headers: {}, + params: {}, + body: { + JSON: { + platform: 'meta', + ad_unit_id: '228287', + ad_interaction_time: 1735680000, + conversions: '1', + event_name: 'Add to cart', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/smartly/processor/validation.ts b/test/integrations/destinations/smartly/processor/validation.ts new file mode 100644 index 0000000000..996afc34b3 --- /dev/null +++ b/test/integrations/destinations/smartly/processor/validation.ts @@ -0,0 +1,174 @@ +import { processInstrumentationErrorStatTags, destination } from '../commonConfig'; + +export const validationFailures = [ + { + id: 'Smartly-validation-test-1', + name: 'smartly', + description: 'Required field anonymousId not present', + scenario: 'Framework', + successCriteria: 'Transformationn Error for anonymousId not present', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + event: 'product purchased', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'john123', + properties: { + products: [{}], + ad_unit_id: '22123387', + ad_interaction_time: '1690867200', + }, + integrations: { + All: true, + }, + originalTimestamp: '2021-01-25T15:32:56.409Z', + }, + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Missing required value from ["properties.platform"]: Workflow: procWorkflow, Step: preparePayload, ChildStep: undefined, OriginalError: Missing required value from ["properties.platform"]', + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'Smartly-test-2', + name: 'smartly', + description: 'Unsupported message type -> group', + scenario: 'Framework', + successCriteria: 'Transformationn Error for Unsupported message type', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'group', + event_name: 'purchase', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'john67', + channel: 'mobile', + rudderId: 'b7b24f86-cccx-46d8-b2b4-ccaxxx80239c', + messageId: 'dummy_msg_id', + properties: { + platform: 'snapchat', + ad_unit_id: '2653387', + ad_interaction_time: '1690867200', + }, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + }, + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'message type group is not supported: Workflow: procWorkflow, Step: validateInput, ChildStep: undefined, OriginalError: message type group is not supported', + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, + { + id: 'Smartly-test-3', + name: 'smartly', + description: 'Event name not defined', + scenario: 'Framework', + successCriteria: 'Transformationn Error for Undefined Event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'track', + sentAt: '2021-01-25T16:12:02.048Z', + userId: 'john67', + channel: 'mobile', + rudderId: 'b7b24f86-cccx-46d8-b2b4-ccaxxx80239c', + messageId: 'dummy_msg_id', + properties: { + platform: 'snapchat', + ad_unit_id: '2653387', + ad_interaction_time: 1675094400, + }, + anonymousId: 'anon_123', + integrations: { + All: true, + }, + }, + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + error: + 'Event is not defined or is not String: Workflow: procWorkflow, Step: preparePayload, ChildStep: undefined, OriginalError: Event is not defined or is not String', + metadata: { + destinationId: 'dummyDestId', + jobId: '1', + }, + statTags: processInstrumentationErrorStatTags, + statusCode: 400, + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/smartly/router/data.ts b/test/integrations/destinations/smartly/router/data.ts new file mode 100644 index 0000000000..7c2d74e6f0 --- /dev/null +++ b/test/integrations/destinations/smartly/router/data.ts @@ -0,0 +1,329 @@ +import { destination, routerInstrumentationErrorStatTags } from '../commonConfig'; +import { defaultMockFns } from '../mocks'; + +export const data = [ + { + name: 'smartly', + id: 'Test 0 - router', + description: 'Track call with multiplexing and batching', + scenario: 'Framework+Buisness', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'track', + event: 'product list viewed', + properties: { + platform: 'meta', + conversions: 1, + ad_unit_id: '221187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 2, userId: 'u2' }, + destination, + }, + { + message: { + type: 'track', + event: 'add to cart', + properties: { + conversions: 3, + platform: 'snapchat', + ad_unit_id: '77187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 3, userId: 'u3' }, + destination, + }, + ], + destType: 'smartly', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + body: { + JSON: { + events: [ + { + conversions: 1, + ad_unit_id: '221187', + platform: 'meta', + ad_interaction_time: 1690867200, + event_name: 'event1', + }, + { + conversions: 1, + ad_unit_id: '221187', + platform: 'meta', + ad_interaction_time: 1690867200, + event_name: 'event2', + }, + { + conversions: 3, + ad_unit_id: '77187', + platform: 'snapchat', + ad_interaction_time: 1690867200, + event_name: 'add to cart', + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://s2s.smartly.io/events/batch', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer testAuthToken`, + }, + params: {}, + files: {}, + }, + metadata: [ + { + jobId: 2, + userId: 'u2', + }, + { + jobId: 3, + userId: 'u3', + }, + ], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + mockFns: () => { + jest.useFakeTimers().setSystemTime(new Date('2024-02-01')); + }, + }, + { + name: 'smartly', + id: 'Test 1 - router', + description: 'Batch calls with 4 succesfull events including multiplexing and 2 failed events', + scenario: 'Framework+Buisness', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + message: { + type: 'track', + event: 'product list viewed', + properties: { + platform: 'meta', + conversions: 1, + ad_unit_id: '221187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 11, userId: 'u1' }, + destination, + }, + { + message: { + type: 'track', + event: 'purchase', + userId: 'testuserId1', + integrations: { All: true }, + properties: { + conversions: 3, + platform: 'snapchat', + ad_unit_id: '77187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 13, userId: 'u1' }, + destination, + }, + { + message: { + type: 'track', + userId: 'testuserId1', + integrations: { All: true }, + properties: { + conversions: 3, + platform: 'snapchat', + ad_unit_id: '12387', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 14, userId: 'u1' }, + destination, + }, + { + message: { + type: 'track', + event: 'random event', + userId: 'testuserId1', + integrations: { All: true }, + properties: { + conversions: 3, + ad_unit_id: '77187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 15, userId: 'u1' }, + destination, + }, + { + message: { + type: 'track', + event: 'add to cart', + userId: 'testuserId1', + integrations: { All: true }, + properties: { + conversions: 3, + platform: 'tiktok', + ad_unit_id: '789187', + ad_interaction_time: 1690867200, + }, + }, + metadata: { jobId: 16, userId: 'u1' }, + destination, + }, + ], + destType: 'smartly', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: false, + destination, + error: 'Event is not defined or is not String', + metadata: [{ jobId: 14, userId: 'u1' }], + statTags: routerInstrumentationErrorStatTags, + statusCode: 400, + }, + { + batched: false, + destination, + error: 'Missing required value from ["properties.platform"]', + metadata: [{ jobId: 15, userId: 'u1' }], + statTags: routerInstrumentationErrorStatTags, + statusCode: 400, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://s2s.smartly.io/events/batch', + params: {}, + body: { + FORM: {}, + JSON: { + events: [ + { + platform: 'meta', + conversions: 1, + event_name: 'event1', + ad_unit_id: '221187', + ad_interaction_time: 1690867200, + }, + { + platform: 'meta', + conversions: 1, + event_name: 'event2', + ad_unit_id: '221187', + ad_interaction_time: 1690867200, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer testAuthToken`, + }, + files: {}, + }, + metadata: [{ jobId: 11, userId: 'u1' }], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://s2s.smartly.io/events/batch', + params: {}, + body: { + FORM: {}, + JSON: { + events: [ + { + conversions: 3, + event_name: 'purchase', + platform: 'snapchat', + ad_unit_id: '77187', + ad_interaction_time: 1690867200, + }, + { + conversions: 3, + event_name: 'add to cart', + platform: 'tiktok', + ad_unit_id: '789187', + ad_interaction_time: 1690867200, + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + }, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer testAuthToken`, + }, + files: {}, + }, + metadata: [ + { jobId: 13, userId: 'u1' }, + { jobId: 16, userId: 'u1' }, + ], + batched: true, + statusCode: 200, + destination, + }, + ], + }, + }, + }, + mockFns: defaultMockFns, + }, +]; From 89804550805ba1164e91f137368d8d2473ec7553 Mon Sep 17 00:00:00 2001 From: shrouti1507 Date: Wed, 21 Aug 2024 15:12:08 +0530 Subject: [PATCH 152/201] chore: edit changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0483a544b6..dbdea91711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ All notable changes to this project will be documented in this file. See [standa * klaviyo onboard unsubscribe profile support ([#3646](https://github.com/rudderlabs/rudder-transformer/issues/3646)) ([474f2bd](https://github.com/rudderlabs/rudder-transformer/commit/474f2bddc58e1962206e39d92514827f29f84c83)) * onboard sfmc with vdm for rETL ([#3655](https://github.com/rudderlabs/rudder-transformer/issues/3655)) ([d987d1f](https://github.com/rudderlabs/rudder-transformer/commit/d987d1fc9afb9e1dc7482b2fe1458573f0f2699e)) +* onboard smartly destination ([#3660](https://github.com/rudderlabs/rudder-transformer/issues/3660)) ([474a36e](https://github.com/rudderlabs/rudder-transformer/commit/474a36ec385abf9ff83596b062d4d8e4c24469b8)) +* add bloomreach retl support ([#3619](https://github.com/rudderlabs/rudder-transformer/issues/3619)) ([6b1a23a](https://github.com/rudderlabs/rudder-transformer/commit/6b1a23af845084d6f2f5fd14656e4a1d11a7e34b)) ### Bug Fixes From bcdabe2a9be41dd18881420a0012414acbad1715 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 11:20:46 +0530 Subject: [PATCH 153/201] chore(deps): bump axios from 1.6.5 to 1.7.3 (#3632) * chore(deps): bump axios from 1.6.5 to 1.7.3 Bumps [axios](https://github.com/axios/axios) from 1.6.5 to 1.7.3. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.6.5...v1.7.3) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore: include package files to eslintignore * chore: include eslintignore file to prettierignore --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Co-authored-by: ItsSudip --- .eslintignore | 2 ++ .prettierignore | 1 + package-lock.json | 10 +++++----- package.json | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.eslintignore b/.eslintignore index ce54730f4b..abeac6b164 100644 --- a/.eslintignore +++ b/.eslintignore @@ -21,3 +21,5 @@ src/v0/destinations/personalize/scripts/ test/integrations/destinations/testTypes.d.ts *.config*.js scripts/skipPrepareScript.js +package-lock.json +package.json diff --git a/.prettierignore b/.prettierignore index 99747b29bb..10ea30580f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,3 +8,4 @@ test/**/*.js src/util/lodash-es-core.js src/util/url-search-params.min.js dist +.eslintignore \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8c7377da3e..c29db44559 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", - "axios": "^1.6.4", + "axios": "^1.7.3", "btoa": "^1.2.1", "component-each": "^0.2.6", "crypto-js": "^4.2.0", @@ -7244,11 +7244,11 @@ "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" }, "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } diff --git a/package.json b/package.json index c14e6b9ef5..d13f7f14da 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "ajv": "^8.12.0", "ajv-draft-04": "^1.0.0", "ajv-formats": "^2.1.1", - "axios": "^1.6.4", + "axios": "^1.7.3", "btoa": "^1.2.1", "component-each": "^0.2.6", "crypto-js": "^4.2.0", From 78e7a95dd1fabdface2f14d402b2b63f0f47c082 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 16:52:22 +0530 Subject: [PATCH 154/201] chore(deps): bump docker/build-push-action from 6.5.0 to 6.7.0 (#3666) Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.5.0 to 6.7.0. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v6.5.0...v6.7.0) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- .github/workflows/build-push-docker-image.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-push-docker-image.yml b/.github/workflows/build-push-docker-image.yml index 69f68c1676..cffb5f91da 100644 --- a/.github/workflows/build-push-docker-image.yml +++ b/.github/workflows/build-push-docker-image.yml @@ -107,7 +107,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v6.5.0 + uses: docker/build-push-action@v6.7.0 with: context: . file: ${{ inputs.dockerfile }} @@ -124,7 +124,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v6.5.0 + uses: docker/build-push-action@v6.7.0 with: context: . file: ${{ inputs.dockerfile }} @@ -160,7 +160,7 @@ jobs: password: ${{ secrets.DOCKERHUB_PROD_TOKEN }} - name: Build Docker Image - uses: docker/build-push-action@v6.5.0 + uses: docker/build-push-action@v6.7.0 with: context: . file: ${{ inputs.dockerfile }} @@ -177,7 +177,7 @@ jobs: docker run ${{ inputs.build_tag }} npm run test:ts:ci - name: Build and Push Multi-platform Images - uses: docker/build-push-action@v6.5.0 + uses: docker/build-push-action@v6.7.0 with: context: . file: ${{ inputs.dockerfile }} From 4776544161564dc2603347c025f31c4511f7a24f Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Mon, 26 Aug 2024 10:26:23 +0530 Subject: [PATCH 155/201] chore: add constant for api_version --- .../config.js | 5 +- .../dataDelivery/business.ts | 17 +++-- .../network.ts | 18 +++--- .../processor/data.ts | 64 +++++++------------ .../router/data.ts | 22 +++---- 5 files changed, 51 insertions(+), 75 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/config.js b/src/v0/destinations/google_adwords_remarketing_lists/config.js index 88e802e5ec..0478a1b11b 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/config.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/config.js @@ -1,6 +1,8 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v17/customers'; +const API_VERSION = 'v17'; + +const BASE_ENDPOINT = `https://googleads.googleapis.com/${API_VERSION}/customers`; const CONFIG_CATEGORIES = { AUDIENCE_LIST: { type: 'audienceList', name: 'offlineDataJobs' }, ADDRESSINFO: { type: 'addressInfo', name: 'addressInfo' }, @@ -22,6 +24,7 @@ const consentConfigMap = { }; module.exports = { + API_VERSION, BASE_ENDPOINT, TYPEOFLIST, attributeMapping, diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts index c0d8454548..92902247b8 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/business.ts @@ -4,6 +4,8 @@ import { generateProxyV1Payload, } from '../../../testUtils'; +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_remarketing_lists/config'; + export const commonHeaders = { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -120,7 +122,7 @@ export const testScenariosForV0API = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload1, - endpoint: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, }), method: 'POST', }, @@ -154,7 +156,7 @@ export const testScenariosForV0API = [ headers: commonHeaders, params: commonParams, JSON: invalidArgumentRequestPayload, - endpoint: 'https://googleads.googleapis.com/v15/customers/7693729834/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729834/offlineUserDataJobs`, }), method: 'POST', }, @@ -217,7 +219,7 @@ export const testScenariosForV0API = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload2, - endpoint: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, }), method: 'POST', }, @@ -255,8 +257,7 @@ export const testScenariosForV1API = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload1, - endpoint: - 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, }, metadataArray, ), @@ -299,8 +300,7 @@ export const testScenariosForV1API = [ headers: commonHeaders, params: commonParams, JSON: invalidArgumentRequestPayload, - endpoint: - 'https://googleads.googleapis.com/v15/customers/7693729834/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729834/offlineUserDataJobs`, }, metadataArray, ), @@ -346,8 +346,7 @@ export const testScenariosForV1API = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload2, - endpoint: - 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, }, metadataArray, ), diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts index ebc1d4b345..19f88e274b 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/network.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/network.ts @@ -1,9 +1,9 @@ -import { enhanceRequestOptions, getFormData } from '../../../../src/adapters/network'; +import { API_VERSION } from '../../../../src/v0/destinations/google_adwords_remarketing_lists/config'; export const networkCallsData = [ { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs:create', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs:create`, data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', @@ -29,7 +29,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs/18025019461:addOperations', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs/18025019461:addOperations`, data: { enablePartialFailure: true, operations: [ @@ -71,7 +71,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs/18025019461:run', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs/18025019461:run`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -85,7 +85,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729834/offlineUserDataJobs:create', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729834/offlineUserDataJobs:create`, data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', @@ -111,7 +111,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729834/offlineUserDataJobs/18025019462:addOperations', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729834/offlineUserDataJobs/18025019462:addOperations`, data: { enablePartialFailure: true, operations: [{ create: { userIdentifiers: [{ hashedEmail: 'abcd@testmail.com' }] } }], @@ -167,7 +167,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/7693729833/offlineUserDataJobs/18025019461:addOperations', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs/18025019461:addOperations`, data: { enablePartialFailure: true, operations: [ @@ -209,7 +209,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs:create', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/customerid/offlineUserDataJobs:create`, data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', @@ -243,7 +243,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs:create', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/customerid/offlineUserDataJobs:create`, data: { job: { type: 'CUSTOMER_MATCH_USER_LIST', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts index d92618d859..e20ed89545 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/processor/data.ts @@ -1,3 +1,4 @@ +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_remarketing_lists/config'; export const data = [ { name: 'google_adwords_remarketing_lists', @@ -69,8 +70,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -202,8 +202,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -322,8 +321,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -1424,8 +1422,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -2819,8 +2816,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -2899,8 +2895,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -4112,8 +4107,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -5412,8 +5406,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -6789,8 +6782,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -8099,8 +8091,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -9399,8 +9390,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -10794,8 +10784,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -10874,8 +10863,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11049,8 +11037,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11127,8 +11114,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11271,8 +11257,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11478,8 +11463,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11617,8 +11601,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11755,8 +11738,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -11895,8 +11877,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', @@ -12038,8 +12019,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer dummy-access', 'Content-Type': 'application/json', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts index 48e0b17ef3..f5789bf7ef 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/router/data.ts @@ -1,5 +1,6 @@ import { rETLAudienceRouterRequest } from './audience'; import { rETLRecordRouterRequest } from './record'; +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_remarketing_lists/config'; export const data = [ { @@ -25,8 +26,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -121,8 +121,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -217,8 +216,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -268,8 +266,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -386,8 +383,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -484,8 +480,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', @@ -612,8 +607,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer default-accessToken', 'Content-Type': 'application/json', From 2c25c0385951341153df422a2ed8f2d7f199ac50 Mon Sep 17 00:00:00 2001 From: ItsSudip Date: Mon, 26 Aug 2024 10:50:39 +0530 Subject: [PATCH 156/201] chore: use constant value everywhere --- .../google_adwords_remarketing_lists/util.test.js | 4 ++-- .../google_adwords_remarketing_lists/dataDelivery/oauth.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/v0/destinations/google_adwords_remarketing_lists/util.test.js b/src/v0/destinations/google_adwords_remarketing_lists/util.test.js index b308b81fe2..a5897776c0 100644 --- a/src/v0/destinations/google_adwords_remarketing_lists/util.test.js +++ b/src/v0/destinations/google_adwords_remarketing_lists/util.test.js @@ -1,5 +1,5 @@ const { populateIdentifiers, responseBuilder } = require('./util'); - +const { API_VERSION } = require('./config'); const accessToken = 'abcd1234'; const developerToken = 'ijkl9101'; const body = { @@ -66,7 +66,7 @@ const expectedResponse = { version: '1', type: 'REST', method: 'POST', - endpoint: 'https://googleads.googleapis.com/v17/customers/7693729833/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/7693729833/offlineUserDataJobs`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', diff --git a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts index 3dfad8d0d8..e8a1cfc07e 100644 --- a/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_remarketing_lists/dataDelivery/oauth.ts @@ -1,5 +1,6 @@ import { generateMetadata, generateProxyV1Payload } from '../../../testUtils'; import { commonHeaders, commonParams, validRequestPayload1 } from './business'; +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_remarketing_lists/config'; const commonStatTags = { destType: 'GOOGLE_ADWORDS_REMARKETING_LISTS', @@ -29,7 +30,7 @@ export const oauthError = [ headers: commonHeaders, params: commonParams, JSON: validRequestPayload1, - endpoint: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/customerid/offlineUserDataJobs`, accessToken: 'dummy-access', }), method: 'POST', @@ -84,7 +85,7 @@ export const oauthError = [ headers: { ...commonHeaders, Authorization: 'Bearer wrongCustomerID' }, params: { ...commonParams, customerId: 'wrongCustomerID' }, JSON: validRequestPayload1, - endpoint: 'https://googleads.googleapis.com/v17/customers/customerid/offlineUserDataJobs', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/customerid/offlineUserDataJobs`, accessToken: 'wrongCustomerID', }), method: 'POST', From 2d8b315a5f2e681bc256128032e4ee066f9177fc Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:37:30 +0530 Subject: [PATCH 157/201] fix: handle trade desk null, undefined fields (#3661) --- .../the_trade_desk/transformRecord.js | 13 ++- .../the_trade_desk/router/data.ts | 84 ++++++++++++++++++- 2 files changed, 92 insertions(+), 5 deletions(-) diff --git a/src/cdk/v2/destinations/the_trade_desk/transformRecord.js b/src/cdk/v2/destinations/the_trade_desk/transformRecord.js index b452f8d7bc..42bbb0816d 100644 --- a/src/cdk/v2/destinations/the_trade_desk/transformRecord.js +++ b/src/cdk/v2/destinations/the_trade_desk/transformRecord.js @@ -40,6 +40,9 @@ const batchResponseBuilder = (items, config) => { return response; }; +const checkNullUndefinedEmptyFields = (fields) => + !!Object.entries(fields).some(([, value]) => !value); + const processRecordInputs = (inputs, destination) => { const { Config } = destination; const items = []; @@ -68,6 +71,11 @@ const processRecordInputs = (inputs, destination) => { return; } + if (checkNullUndefinedEmptyFields(fields)) { + errorResponseList.push(handleRtTfSingleEventError(input, emptyFieldsError, {})); + return; + } + successMetadata.push(input.metadata); const data = [ { @@ -78,10 +86,7 @@ const processRecordInputs = (inputs, destination) => { Object.keys(fields).forEach((id) => { const value = fields[id]; - if (value) { - // adding only non empty ID's - items.push({ [id]: value, Data: data }); - } + items.push({ [id]: value, Data: data }); }); }); diff --git a/test/integrations/destinations/the_trade_desk/router/data.ts b/test/integrations/destinations/the_trade_desk/router/data.ts index f095f561db..d2dbf9a7cc 100644 --- a/test/integrations/destinations/the_trade_desk/router/data.ts +++ b/test/integrations/destinations/the_trade_desk/router/data.ts @@ -45,7 +45,7 @@ export const data = [ action: 'insert', fields: { DAID: 'test-daid-2', - UID2: null, + UID2: 'test-uid2-2', }, channel: 'sources', context: sampleContext, @@ -117,6 +117,35 @@ export const data = [ }, files: {}, }, + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://sin-data.adsrvr.org/data/advertiser', + headers: {}, + params: {}, + body: { + JSON: { + DataProviderId: dataProviderId, + AdvertiserId: advertiserId, + Items: [ + { + UID2: 'test-uid2-2', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, + ], + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, ], metadata: [ { @@ -727,6 +756,8 @@ export const data = [ action: 'insert', fields: { DAID: 'test-daid-1', + UID2: 'test-uid2-1', + EUID: 'test-euid-1', }, channel: 'sources', context: sampleContext, @@ -737,6 +768,24 @@ export const data = [ jobId: 2, }, }, + { + message: { + type: 'record', + action: 'insert', + fields: { + DAID: 'test-daid-2', + UID2: null, + EUID: null, + }, + channel: 'sources', + context: sampleContext, + recordId: '3', + }, + destination: sampleDestination, + metadata: { + jobId: 3, + }, + }, ], destType, }, @@ -771,6 +820,24 @@ export const data = [ }, ], }, + { + UID2: 'test-uid2-1', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, + { + EUID: 'test-euid-1', + Data: [ + { + Name: segmentName, + TTLInMinutes: 43200, + }, + ], + }, ], }, JSON_ARRAY: {}, @@ -804,6 +871,21 @@ export const data = [ }, destination: sampleDestination, }, + { + batched: false, + metadata: [{ jobId: 3 }], + statusCode: 400, + error: '`fields` cannot be empty', + statTags: { + destType: destTypeInUpperCase, + implementation: 'cdkV2', + feature: 'router', + module: 'destination', + errorCategory: 'dataValidation', + errorType: 'instrumentation', + }, + destination: sampleDestination, + }, ], }, }, From fc6bcf7eda690d82cfe2d381753948058efbcd3d Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Mon, 26 Aug 2024 23:37:33 +0530 Subject: [PATCH 158/201] fix: login using docker creds on the node to allow to pull the desired image (#3682) * fix: login using docker creds on the node to allow to pull the desired image * fix: add steps to create regcred secret and then patch deployment with it * chore: fix the github action * chore: patch the service account in openfaas-fn ns to allow for pulling openfaas flask base images * chore: minor fixes --- .github/workflows/ut-tests.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ut-tests.yml b/.github/workflows/ut-tests.yml index 2f2f303219..b825bdb9d3 100644 --- a/.github/workflows/ut-tests.yml +++ b/.github/workflows/ut-tests.yml @@ -66,6 +66,18 @@ jobs: --set gateway.image=rudderlabs/rudder-openfaas-gateway:0.25.2 \ --set faasnetes.image=rudderlabs/rudder-openfaas-faas-netes:0.15.4 + - name: Create regcred secret in openfaas + run: kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=${{ secrets.DOCKERHUB_USERNAME }} --docker-password=${{ secrets.DOCKERHUB_TOKEN }} --docker-email=${{ secrets.DOCKERHUB_EMAIL }} -n openfaas + + - name: Create regcred secret in openfaas-fn + run: kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v1/ --docker-username=${{ secrets.DOCKERHUB_USERNAME }} --docker-password=${{ secrets.DOCKERHUB_TOKEN }} --docker-email=${{ secrets.DOCKERHUB_EMAIL }} -n openfaas-fn + + - name: Patch default service account in openfaas-fn + run: 'kubectl patch serviceaccount default -n openfaas-fn -p ''{"imagePullSecrets": [{"name": "regcred"}]}''' + + - name: Patch deployment "gateway" + run: 'kubectl patch deployment gateway -n openfaas -p ''{"spec": {"template": {"spec": {"imagePullSecrets": [{"name": "regcred"}]}}}}''' + - name: Wait for deployment "gateway" rollout run: kubectl rollout status deploy/gateway --timeout 120s -n openfaas From f58d38642f723de28cfff590f34b14f72db78d69 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:22:41 +0530 Subject: [PATCH 159/201] chore: update api version of google ads for gaec to 17 from 15 (#3671) chore: update api version of google ads for gaec to 17 from 16 --- .../config.js | 5 ++++- .../dataDelivery/business.ts | 13 +++++-------- .../dataDelivery/oauth.ts | 14 +++++--------- .../network.ts | 19 ++++++++++--------- .../processor/data.ts | 13 +++++-------- .../router/data.ts | 5 +++-- 6 files changed, 32 insertions(+), 37 deletions(-) diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/config.js b/src/v0/destinations/google_adwords_enhanced_conversions/config.js index e8f486fb7a..8a3f8ab673 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/config.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/config.js @@ -1,6 +1,8 @@ const { getMappingConfig } = require('../../util'); -const BASE_ENDPOINT = 'https://googleads.googleapis.com/v15/customers'; +const API_VERSION = 'v17'; + +const BASE_ENDPOINT = 'https://googleads.googleapis.com/v17/customers'; const CONFIG_CATEGORIES = { TRACK_CONFIG: { type: 'track', name: 'trackConfig' }, @@ -17,4 +19,5 @@ module.exports = { hashAttributes, CONVERSION_ACTION_ID_CACHE_TTL, destType: 'google_adwords_enhanced_conversions', + API_VERSION, }; diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts index 0cee1418e1..a5bbaa05c5 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts @@ -4,6 +4,7 @@ import { generateProxyV1Payload, } from '../../../testUtils'; import { ProxyV1TestData } from '../../../testTypes'; +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_enhanced_conversions/config'; const headers = { Authorization: 'Bearer abcd1234', @@ -82,8 +83,7 @@ export const testScenariosForV0API = [ request: { body: generateProxyV0Payload({ ...commonRequestParameters, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567899:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567899:uploadConversionAdjustments`, }), method: 'POST', }, @@ -138,8 +138,7 @@ export const testScenariosForV0API = [ customerId: '1234567888', destination: 'google_adwords_enhanced_conversions', }, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567888:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567888:uploadConversionAdjustments`, }), method: 'POST', }, @@ -203,8 +202,7 @@ export const testScenariosForV1API: ProxyV1TestData[] = [ body: generateProxyV1Payload( { ...commonRequestParameters, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567899:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567899:uploadConversionAdjustments`, }, [generateMetadata(1)], ), @@ -251,8 +249,7 @@ export const testScenariosForV1API: ProxyV1TestData[] = [ customerId: '1234567888', destination: 'google_adwords_enhanced_conversions', }, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567888:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567888:uploadConversionAdjustments`, }, [generateMetadata(1)], ), diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/oauth.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/oauth.ts index 70d9eeaf33..c6e29925dd 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/oauth.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/oauth.ts @@ -1,4 +1,4 @@ -import { ProxyV1TestData } from '../../../testTypes'; +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_enhanced_conversions/config'; import { generateProxyV1Payload, generateProxyV0Payload, @@ -83,8 +83,7 @@ export const v0oauthScenarios = [ request: { body: generateProxyV0Payload({ ...commonRequestParameters, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, }), method: 'POST', }, @@ -137,8 +136,7 @@ export const v0oauthScenarios = [ customerId: '1234567910', destination: 'google_adwords_enhanced_conversions', }, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567910/googleAds:searchStream', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567910/googleAds:searchStream`, }), method: 'POST', }, @@ -192,8 +190,7 @@ export const v1oauthScenarios = [ request: { body: generateProxyV1Payload({ ...commonRequestParameters, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, }), method: 'POST', }, @@ -244,8 +241,7 @@ export const v1oauthScenarios = [ customerId: '1234567910', destination: 'google_adwords_enhanced_conversions', }, - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567910/googleAds:searchStream', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567910/googleAds:searchStream`, }), method: 'POST', }, diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/network.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/network.ts index 69b3a6103a..270ec2dc77 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/network.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/network.ts @@ -1,7 +1,8 @@ +import { API_VERSION } from '../../../../src/v0/destinations/google_adwords_enhanced_conversions/config'; export const networkCallsData = [ { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567890/googleAds:searchStream', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890/googleAds:searchStream`, data: { query: `SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Product Added'`, }, @@ -29,7 +30,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567899/googleAds:searchStream', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567899/googleAds:searchStream`, data: { query: `SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Product Added'`, }, @@ -59,7 +60,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567899:uploadConversionAdjustments', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567899:uploadConversionAdjustments`, data: { conversionAdjustments: [ { @@ -123,7 +124,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567891/googleAds:searchStream', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567891/googleAds:searchStream`, data: { query: `SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Product Added'`, }, @@ -153,7 +154,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567891:uploadConversionAdjustments', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567891:uploadConversionAdjustments`, data: { conversionAdjustments: [ { @@ -214,7 +215,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567891:uploadClickConversions', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567891:uploadClickConversions`, data: { conversionAdjustments: [ { @@ -275,7 +276,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567888/googleAds:searchStream', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567888/googleAds:searchStream`, data: { query: `SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Product Added'`, }, @@ -305,7 +306,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567888:uploadConversionAdjustments', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567888:uploadConversionAdjustments`, data: { conversionAdjustments: [ { @@ -382,7 +383,7 @@ export const networkCallsData = [ }, { httpReq: { - url: 'https://googleads.googleapis.com/v15/customers/1234567910/googleAds:searchStream', + url: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567910/googleAds:searchStream`, data: { query: `SELECT conversion_action.id FROM conversion_action WHERE conversion_action.name = 'Product Added'`, }, diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/processor/data.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/processor/data.ts index 13b2609bf8..40d8370fcb 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/processor/data.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/processor/data.ts @@ -1,3 +1,4 @@ +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_enhanced_conversions/config'; export const data = [ { name: 'google_adwords_enhanced_conversions', @@ -128,8 +129,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', @@ -616,8 +616,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', @@ -1328,8 +1327,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', @@ -1519,8 +1517,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts index dff0f772d3..1d77b5d774 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/router/data.ts @@ -1,3 +1,5 @@ +import { API_VERSION } from '../../../../../src/v0/destinations/google_adwords_enhanced_conversions/config'; + const events = [ { metadata: { @@ -357,8 +359,7 @@ export const data = [ version: '1', type: 'REST', method: 'POST', - endpoint: - 'https://googleads.googleapis.com/v15/customers/1234567890:uploadConversionAdjustments', + endpoint: `https://googleads.googleapis.com/${API_VERSION}/customers/1234567890:uploadConversionAdjustments`, headers: { Authorization: 'Bearer abcd1234', 'Content-Type': 'application/json', From 4cb27998f2c1e2a2a7b535666a54621fd1d43ef0 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:05:15 +0530 Subject: [PATCH 160/201] feat: add support for customerio source email subscribed event (#3679) --- src/v0/sources/customerio/config.js | 1 + test/integrations/sources/customerio/data.ts | 53 ++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/v0/sources/customerio/config.js b/src/v0/sources/customerio/config.js index f084f5e189..41257ed6de 100644 --- a/src/v0/sources/customerio/config.js +++ b/src/v0/sources/customerio/config.js @@ -8,6 +8,7 @@ const emailEventNameMap = { spammed: 'Email Marked as Spam', dropped: 'Email Dropped', bounced: 'Email Bounced', + subscribed: 'Email Subscribed', unsubscribed: 'Email Unsubscribed', converted: 'Email Converted', clicked: 'Email Link Clicked', diff --git a/test/integrations/sources/customerio/data.ts b/test/integrations/sources/customerio/data.ts index be2fc1a62e..b831b1d0b0 100644 --- a/test/integrations/sources/customerio/data.ts +++ b/test/integrations/sources/customerio/data.ts @@ -1431,6 +1431,59 @@ export const data = [ }, }, }, + { + name: 'customerio', + description: 'test-23: email subscribed', + module: 'source', + version: 'v0', + input: { + request: { + body: [ + { + data: { + customer_id: '0200102', + identifiers: { id: '0200102' }, + email_address: 'test@example.com', + }, + event_id: '01E4C4C6P79C12J5A6KPE6XNFD', + object_type: 'email', + metric: 'subscribed', + timestamp: 1585250179, + }, + ], + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: [ + { + context: { + library: { name: 'unknown', version: 'unknown' }, + integration: { name: 'Customer.io' }, + traits: { email: 'test@example.com' }, + }, + integrations: { 'Customer.io': false }, + type: 'track', + event: 'Email Subscribed', + properties: { eventId: '01E4C4C6P79C12J5A6KPE6XNFD' }, + userId: '0200102', + originalTimestamp: '2020-03-26T19:16:19.000Z', + sentAt: '2020-03-26T19:16:19.000Z', + }, + ], + }, + }, + ], + }, + }, + }, ].map((tc) => ({ ...tc, mockFns: () => { From 35eee4c63f44334c14b31f36c37d7700b68a7ee9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 10:29:11 +0530 Subject: [PATCH 161/201] chore(deps): bump SonarSource/sonarcloud-github-action from 2.1.1 to 3.0.0 (#3680) chore(deps): bump SonarSource/sonarcloud-github-action Bumps [SonarSource/sonarcloud-github-action](https://github.com/sonarsource/sonarcloud-github-action) from 2.1.1 to 3.0.0. - [Release notes](https://github.com/sonarsource/sonarcloud-github-action/releases) - [Commits](https://github.com/sonarsource/sonarcloud-github-action/compare/v2.1.1...v3.0.0) --- updated-dependencies: - dependency-name: SonarSource/sonarcloud-github-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sai Sankeerth --- .github/workflows/dt-test-and-report-code-coverage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dt-test-and-report-code-coverage.yml b/.github/workflows/dt-test-and-report-code-coverage.yml index b1da46898a..85625a1558 100644 --- a/.github/workflows/dt-test-and-report-code-coverage.yml +++ b/.github/workflows/dt-test-and-report-code-coverage.yml @@ -80,7 +80,7 @@ jobs: - name: SonarCloud Scan if: always() - uses: SonarSource/sonarcloud-github-action@v2.1.1 + uses: SonarSource/sonarcloud-github-action@v3.0.0 env: GITHUB_TOKEN: ${{ secrets.PAT }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} From 9fb463e7661c225077b11a0196b3190c15741058 Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Thu, 29 Aug 2024 14:23:19 +0530 Subject: [PATCH 162/201] fix: adding a new condition for retrying the function creation in python transformation (#3684) --- src/util/openfaas/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index b5021cf715..1f44df86bb 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -241,8 +241,9 @@ const deployFaasFunction = async ( // To handle concurrent create requests, // throw retry error if deployment or service already exists so that request can be retried if ( - (error.statusCode === 500 || error.statusCode === 400) && - error.message.includes('already exists') + ((error.statusCode === 500 || error.statusCode === 400) && + error.message.includes('already exists')) || + (error.statusCode === 409 && error.message.includes('Conflict change already made')) ) { setFunctionInCache(functionName); throw new RetryRequestError(`${functionName} already exists`); From e21ebd0085aadfe61cb6442da6689e32be33f52f Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Thu, 29 Aug 2024 17:20:30 +0530 Subject: [PATCH 163/201] feat: webhook v2 (#3651) * feat: webhook v2 * feat: webhook v2 * refactor: getAuthHeaders utility * feat: add xml support * feat: add batching * feat: update batching logic * chore: remove logs * fix: excludeMappedFields utility * test: add testcases * fix: use sha256 for better hashing --- package-lock.json | 19 +- package.json | 3 +- .../destinations/webhook_v2/procWorkflow.yaml | 67 ++++ .../destinations/webhook_v2/rtWorkflow.yaml | 60 +++ src/cdk/v2/destinations/webhook_v2/utils.js | 146 ++++++++ src/features.json | 3 +- .../destinations/webhook_v2/common.ts | 321 ++++++++++++++++ .../webhook_v2/processor/configuration.ts | 206 +++++++++++ .../destinations/webhook_v2/processor/data.ts | 2 + .../destinations/webhook_v2/router/data.ts | 350 ++++++++++++++++++ 10 files changed, 1171 insertions(+), 6 deletions(-) create mode 100644 src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml create mode 100644 src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml create mode 100644 src/cdk/v2/destinations/webhook_v2/utils.js create mode 100644 test/integrations/destinations/webhook_v2/common.ts create mode 100644 test/integrations/destinations/webhook_v2/processor/configuration.ts create mode 100644 test/integrations/destinations/webhook_v2/processor/data.ts create mode 100644 test/integrations/destinations/webhook_v2/router/data.ts diff --git a/package-lock.json b/package-lock.json index c29db44559..fa6221bebe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.17.1", + "@rudderstack/json-template-engine": "^0.18.0", "@rudderstack/workflow-engine": "^0.8.13", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", @@ -45,6 +45,7 @@ "json-diff": "^1.0.3", "json-size": "^1.0.0", "jsontoxml": "^1.0.1", + "jstoxml": "^5.0.2", "koa": "^2.14.1", "koa-bodyparser": "^4.4.0", "koa2-swagger-ui": "^5.7.0", @@ -5583,9 +5584,9 @@ } }, "node_modules/@rudderstack/json-template-engine": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", - "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.18.0.tgz", + "integrity": "sha512-yArdj5flPrYbH3lq8xLixBGjt74WOv+TY0rrTF8gB7v6hFFBn7IrcsNcLDbN2SoLT604ycgMTMgIYcsAqAWWDg==" }, "node_modules/@rudderstack/workflow-engine": { "version": "0.8.13", @@ -5623,6 +5624,11 @@ "tslib": "^2.6.2" } }, + "node_modules/@rudderstack/workflow-engine/node_modules/@rudderstack/json-template-engine": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", + "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" + }, "node_modules/@shopify/jest-koa-mocks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@shopify/jest-koa-mocks/-/jest-koa-mocks-5.1.1.tgz", @@ -15638,6 +15644,11 @@ "node": ">=0.2.0" } }, + "node_modules/jstoxml": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-5.0.2.tgz", + "integrity": "sha512-p/Uyi1nSlAcOL+FbWCbTLAHtMbk/QlPMAE/wRLek7W8646jWII3GtLEKSBzf97UitieRWj1VZcbZxs8arq2nbg==" + }, "node_modules/keygrip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", diff --git a/package.json b/package.json index d13f7f14da..d8e34f55fe 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "@ndhoule/extend": "^2.0.0", "@pyroscope/nodejs": "^0.2.9", "@rudderstack/integrations-lib": "^0.2.10", - "@rudderstack/json-template-engine": "^0.17.1", + "@rudderstack/json-template-engine": "^0.18.0", "@rudderstack/workflow-engine": "^0.8.13", "@shopify/jest-koa-mocks": "^5.1.1", "ajv": "^8.12.0", @@ -90,6 +90,7 @@ "json-diff": "^1.0.3", "json-size": "^1.0.0", "jsontoxml": "^1.0.1", + "jstoxml": "^5.0.2", "koa": "^2.14.1", "koa-bodyparser": "^4.4.0", "koa2-swagger-ui": "^5.7.0", diff --git a/src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml b/src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml new file mode 100644 index 0000000000..873a9807ce --- /dev/null +++ b/src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml @@ -0,0 +1,67 @@ +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - path: ../../../../v0/destinations/webhook/utils + - name: getHashFromArray + path: ../../../../v0/util + - name: getIntegrationsObj + path: ../../../../v0/util + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + - name: defaultRequestConfig + path: ../../../../v0/util + - name: isEmptyObject + path: ../../../../v0/util + - path: ./utils + +steps: + - name: validateInput + template: | + $.assertConfig(.destination.Config.webhookUrl, "Webhook URL required. Aborting"); + $.assertConfig(!(.destination.Config.auth === "basicAuth" && !(.destination.Config.username)), "Username is required for Basic Authentication. Aborting"); + $.assertConfig(!(.destination.Config.auth === "bearerTokenAuth" && !(.destination.Config.bearerToken)), "Token is required for Bearer Token Authentication. Aborting"); + $.assertConfig(!(.destination.Config.auth === "apiKeyAuth" && !(.destination.Config.apiKeyName)), "API Key Name is required for API Key Authentication. Aborting"); + $.assertConfig(!(.destination.Config.auth === "apiKeyAuth" && !(.destination.Config.apiKeyValue)), "API Key Value is required for API Key Authentication. Aborting"); + + - name: deduceMethod + template: | + $.context.method = .destination.Config.method ?? 'POST'; + + - name: deduceBodyFormat + template: | + $.context.format = .destination.Config.format ?? 'JSON'; + + - name: buildHeaders + template: | + const configAuthHeaders = $.getAuthHeaders(.destination.Config); + const additionalConfigHeaders = $.getCustomMappings(.message, .destination.Config.headers); + $.context.headers = { + ...configAuthHeaders, + ...additionalConfigHeaders + } + + - name: prepareParams + template: | + $.context.params = $.getCustomMappings(.message, .destination.Config.queryParams) + + - name: deduceEndPoint + template: | + $.context.endpoint = $.addPathParams(.message, .destination.Config.webhookUrl); + + - name: prepareBody + template: | + const payload = $.getCustomMappings(.message, .destination.Config.propertiesMapping); + $.context.payload = $.removeUndefinedAndNullValues($.excludeMappedFields(payload, .destination.Config.propertiesMapping)) + $.context.format === "XML" && !$.isEmptyObject($.context.payload) ? $.context.payload = {payload: $.getXMLPayload($.context.payload)}; + + - name: buildResponseForProcessTransformation + template: | + const response = $.defaultRequestConfig(); + $.context.format === "JSON" ? response.body.JSON = $.context.payload: response.body.XML = $.context.payload; + response.endpoint = $.context.endpoint; + response.headers = $.context.headers; + response.method = $.context.method; + response.params = $.context.params ?? {}; + response diff --git a/src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml b/src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml new file mode 100644 index 0000000000..edc31d003d --- /dev/null +++ b/src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml @@ -0,0 +1,60 @@ +bindings: + - name: handleRtTfSingleEventError + path: ../../../../v0/util/index + - path: ./utils + exportAll: true + - name: BatchUtils + path: '@rudderstack/workflow-engine' + +steps: + - name: validateInput + template: | + $.assert(Array.isArray(^) && ^.length > 0, "Invalid event array") + + - name: transform + externalWorkflow: + path: ./procWorkflow.yaml + loopOverInput: true + + - name: successfulEvents + template: | + $.outputs.transform#idx.output.({ + "batchedRequest": ., + "batched": false, + "destination": ^[idx].destination, + "metadata": ^[idx].metadata[], + "statusCode": 200 + })[] + + - name: failedEvents + template: | + $.outputs.transform#idx.error.( + $.handleRtTfSingleEventError(^[idx], .originalError ?? ., {}) + )[] + + - name: bodyFormat + template: | + $.outputs.successfulEvents[0].destination.Config.format ?? "JSON"; + + - name: batchingEnabled + template: | + $.outputs.successfulEvents[0].destination.Config.isBatchingEnabled; + + - name: batchSize + template: | + $.outputs.successfulEvents[0].destination.Config.maxBatchSize; + + - name: batchSuccessfulEvents + description: Batches the successfulEvents + condition: $.outputs.batchingEnabled && $.outputs.bodyFormat === "JSON" + template: | + $.batchSuccessfulEvents($.outputs.successfulEvents, $.outputs.batchSize); + + - name: finalPayloadWithBatching + condition: $.outputs.batchingEnabled && $.outputs.bodyFormat === "JSON" + template: | + [...$.outputs.batchSuccessfulEvents, ...$.outputs.failedEvents] + else: + name: finalPayloadWithoutBatching + template: | + [...$.outputs.successfulEvents, ...$.outputs.failedEvents] diff --git a/src/cdk/v2/destinations/webhook_v2/utils.js b/src/cdk/v2/destinations/webhook_v2/utils.js new file mode 100644 index 0000000000..bf0f2179f1 --- /dev/null +++ b/src/cdk/v2/destinations/webhook_v2/utils.js @@ -0,0 +1,146 @@ +const { toXML } = require('jstoxml'); +const { groupBy } = require('lodash'); +const { createHash } = require('crypto'); +const { ConfigurationError } = require('@rudderstack/integrations-lib'); +const { BatchUtils } = require('@rudderstack/workflow-engine'); +const { base64Convertor, applyCustomMappings, isEmptyObject } = require('../../../../v0/util'); + +const getAuthHeaders = (config) => { + let headers; + switch (config.auth) { + case 'basicAuth': { + const credentials = `${config.username}:${config.password}`; + const encodedCredentials = base64Convertor(credentials); + headers = { + Authorization: `Basic ${encodedCredentials}`, + }; + break; + } + case 'bearerTokenAuth': + headers = { Authorization: `Bearer ${config.bearerToken}` }; + break; + case 'apiKeyAuth': + headers = { [config.apiKeyName]: `${config.apiKeyValue}` }; + break; + default: + headers = {}; + } + return headers; +}; + +const getCustomMappings = (message, mapping) => { + try { + return applyCustomMappings(message, mapping); + } catch (e) { + throw new ConfigurationError(`[Webhook]:: Error in custom mappings: ${e.message}`); + } +}; + +// TODO: write a func to evaluate json path template +const addPathParams = (message, webhookUrl) => webhookUrl; + +const excludeMappedFields = (payload, mapping) => { + const rawPayload = { ...payload }; + if (mapping) { + mapping.forEach(({ from, to }) => { + // continue when from === to + if (from === to) return; + + // Remove the '$.' prefix and split the remaining string by '.' + const keys = from.replace(/^\$\./, '').split('.'); + let current = rawPayload; + + // Traverse to the parent of the key to be removed + keys.slice(0, -1).forEach((key) => { + if (current && current[key]) { + current = current[key]; + } else { + current = null; + } + }); + + if (current) { + // Remove the 'from' field from input payload + delete current[keys[keys.length - 1]]; + } + }); + } + + return rawPayload; +}; + +const getXMLPayload = (payload) => + toXML(payload, { + header: true, + }); + +const getMergedEvents = (batch) => { + const events = []; + batch.forEach((event) => { + if (!isEmptyObject(event.batchedRequest.body.JSON)) { + events.push(event.batchedRequest.body.JSON); + } + }); + return events; +}; + +const mergeMetadata = (batch) => batch.map((event) => event.metadata[0]); + +const createHashKey = (endpoint, headers, params) => { + const hash = createHash('sha256'); + hash.update(endpoint); + hash.update(JSON.stringify(headers)); + hash.update(JSON.stringify(params)); + return hash.digest('hex'); +}; + +const buildBatchedRequest = (batch) => ({ + batchedRequest: { + body: { + JSON: {}, + JSON_ARRAY: { batch: JSON.stringify(getMergedEvents(batch)) }, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: batch[0].batchedRequest.method, + endpoint: batch[0].batchedRequest.endpoint, + headers: batch[0].batchedRequest.headers, + params: batch[0].batchedRequest.params, + files: {}, + }, + metadata: mergeMetadata(batch), + batched: true, + statusCode: 200, + destination: batch[0].destination, +}); + +const batchSuccessfulEvents = (events, batchSize) => { + const response = []; + // group events by endpoint, headers and query params + const groupedEvents = groupBy(events, (event) => { + const { endpoint, headers, params } = event.batchedRequest; + return createHashKey(endpoint, headers, params); + }); + + // batch the each grouped event + Object.keys(groupedEvents).forEach((groupKey) => { + const batches = BatchUtils.chunkArrayBySizeAndLength(groupedEvents[groupKey], { + maxItems: batchSize, + }).items; + batches.forEach((batch) => { + response.push(buildBatchedRequest(batch)); + }); + }); + return response; +}; + +module.exports = { + getAuthHeaders, + getCustomMappings, + addPathParams, + excludeMappedFields, + getXMLPayload, + batchSuccessfulEvents, +}; diff --git a/src/features.json b/src/features.json index 94e36a2416..5249703f8a 100644 --- a/src/features.json +++ b/src/features.json @@ -76,7 +76,8 @@ "WUNDERKIND": true, "CLICKSEND": true, "ZOHO": true, - "CORDIAL": true + "CORDIAL": true, + "WEBHOOK_V2": true }, "regulations": [ "BRAZE", diff --git a/test/integrations/destinations/webhook_v2/common.ts b/test/integrations/destinations/webhook_v2/common.ts new file mode 100644 index 0000000000..c31a7aabad --- /dev/null +++ b/test/integrations/destinations/webhook_v2/common.ts @@ -0,0 +1,321 @@ +import { Destination } from '../../../../src/types'; + +const destType = 'webhook_v2'; +const destTypeInUpperCase = 'WEBHOOK_V2'; +const displayName = 'Webhook V2'; +const destinations: Destination[] = [ + { + Config: { + webhookUrl: 'http://abc.com/contacts', + auth: 'noAuth', + method: 'POST', + format: 'JSON', + isBatchingEnabled: true, + maxBatchSize: '2', + propertiesMapping: [ + { + from: '$.traits.firstName', + to: '$.contacts.first_name', + }, + { + from: '$.traits.email', + to: '$.contacts.email', + }, + { + from: '$.traits.address.pinCode', + to: '$.contacts.address.pin_code', + }, + ], + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, + { + Config: { + webhookUrl: 'http://abc.com/contact/$traits.userId', + auth: 'basicAuth', + username: 'test-user', + password: '', + method: 'GET', + format: 'JSON', + isBatchingEnabled: true, + maxBatchSize: 2, + headers: [ + { + to: '$.h1', + from: "'val1'", + }, + { + to: '$.h2', + from: '2', + }, + { + to: "$.'content-type'", + from: "'application/json'", + }, + { + to: '$.h3', + from: '$.traits.firstName', + }, + ], + queryParams: [ + { + to: '$.q1', + from: "'val1'", + }, + { + to: '$.q2', + from: '$.traits.email', + }, + ], + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, + { + Config: { + webhookUrl: 'http://abc.com/contacts/$.traits.userId/', + auth: 'apiKeyAuth', + apiKeyName: 'x-api-key', + apiKeyValue: 'test-api-key', + method: 'DELETE', + isBatchingEnabled: true, + maxBatchSize: 4, + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, + { + Config: { + webhookUrl: 'http://abc.com/contacts/$.traits.userId/', + auth: 'apiKeyAuth', + apiKeyName: 'x-api-key', + apiKeyValue: 'test-api-key', + method: 'GET', + isBatchingEnabled: true, + maxBatchSize: 4, + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, + { + Config: { + webhookUrl: 'http://abc.com/events', + auth: 'bearerTokenAuth', + bearerToken: 'test-token', + method: 'POST', + format: 'XML', + headers: [ + { + to: '$.h1', + from: "'val1'", + }, + { + to: '$.h2', + from: '$.key1', + }, + { + to: "$.'content-type'", + from: "'application/json'", + }, + ], + propertiesMapping: [ + { + from: '$.event', + to: '$.event', + }, + { + from: '$.properties.currency', + to: '$.currency', + }, + { + from: '$.userId', + to: '$.userId', + }, + { + from: '$.properties.products[*].product_id', + to: '$.properties.items[*].item_id', + }, + { + from: '$.properties.products[*].name', + to: '$.properties.items[*].name', + }, + { + from: '$.properties.products[*].price', + to: '$.properties.items[*].price', + }, + ], + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, + { + Config: { + webhookUrl: 'http://abc.com/events', + auth: 'noAuth', + method: 'POST', + format: 'JSON', + isBatchingEnabled: true, + maxBatchSize: '4', + headers: [ + { + to: "$.'content-type'", + from: "'application/json'", + }, + ], + propertiesMapping: [ + { + from: '$.event', + to: '$.event', + }, + { + from: '$.properties.currency', + to: '$.currency', + }, + { + from: '$.userId', + to: '$.userId', + }, + { + from: '$.properties.products[*].product_id', + to: '$.properties.items[*].item_id', + }, + { + from: '$.properties.products[*].name', + to: '$.properties.items[*].name', + }, + { + from: '$.properties.products[*].price', + to: '$.properties.items[*].price', + }, + ], + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, +]; + +const traits = { + email: 'john.doe@example.com', + firstName: 'John', + lastName: 'Doe', + phone: '1234567890', + address: { + city: 'New York', + country: 'USA', + pinCode: '123456', + }, +}; + +const properties = { + checkout_id: '70324a1f0eaf000000000000', + order_id: '40684e8f0eaf000000000000', + affiliation: 'Vandelay Games', + total: 52.0, + subtotal: 45.0, + revenue: 50.0, + shipping: 4.0, + tax: 3.0, + discount: 5.0, + coupon: 'NEWCUST5', + currency: 'USD', + products: [ + { + product_id: '622c6f5d5cf86a4c77358033', + sku: '8472-998-0112', + name: 'Cones of Dunshire', + price: 40, + position: 1, + category: 'Games', + url: 'https://www.website.com/product/path', + image_url: 'https://www.website.com/product/path.jpg', + }, + { + product_id: '577c6f5d5cf86a4c7735ba03', + sku: '3309-483-2201', + name: 'Five Crowns', + price: 5, + position: 2, + category: 'Games', + }, + ], +}; + +const processorInstrumentationErrorStatTags = { + destType: destTypeInUpperCase, + errorCategory: 'dataValidation', + errorType: 'instrumentation', + feature: 'processor', + implementation: 'cdkV2', + module: 'destination', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', +}; + +const RouterInstrumentationErrorStatTags = { + ...processorInstrumentationErrorStatTags, + feature: 'router', +}; + +export { + destType, + destinations, + processorInstrumentationErrorStatTags, + RouterInstrumentationErrorStatTags, + traits, + properties, +}; diff --git a/test/integrations/destinations/webhook_v2/processor/configuration.ts b/test/integrations/destinations/webhook_v2/processor/configuration.ts new file mode 100644 index 0000000000..7a1c105ed0 --- /dev/null +++ b/test/integrations/destinations/webhook_v2/processor/configuration.ts @@ -0,0 +1,206 @@ +import { ProcessorTestData } from '../../../testTypes'; +import { generateMetadata, transformResultBuilder } from '../../../testUtils'; +import { destType, destinations, properties, traits } from '../common'; + +export const configuration: ProcessorTestData[] = [ + { + id: 'webhook_v2-configuration-test-1', + name: destType, + description: 'Identify call with properties mapping', + scenario: 'Business', + successCriteria: 'Response should be in json format with properties mapping', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: destinations[0], + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint: destinations[0].Config.webhookUrl, + JSON: { + contacts: { + first_name: 'John', + email: 'john.doe@example.com', + address: { + pin_code: '123456', + }, + }, + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'webhook_v2-configuration-test-2', + name: destType, + description: 'Identify call with api key auth, delete method and path params', + scenario: 'Business', + successCriteria: 'Response should contain delete method and api key auth', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: destinations[2], + message: { + type: 'identify', + userId: 'userId123', + anonymousId: 'anonId123', + traits, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'DELETE', + userId: '', + endpoint: 'http://abc.com/contacts/$.traits.userId/', + headers: { + 'x-api-key': 'test-api-key', + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'webhook_v2-configuration-test-3', + name: destType, + description: 'Track call with basic auth, get method, headers and query params mapping', + scenario: 'Business', + successCriteria: 'Response should contain get method, headers and query params mapping', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: destinations[1], + message: { + type: 'track', + userId: 'userId123', + event: 'Order Completed', + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'GET', + userId: '', + endpoint: destinations[1].Config.webhookUrl, + headers: { + Authorization: 'Basic dGVzdC11c2VyOg==', + h1: 'val1', + h2: 2, + 'content-type': 'application/json', + }, + params: { + q1: 'val1', + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, + { + id: 'webhook_v2-configuration-test-4', + name: destType, + description: + 'Track call with bearer token, xml format, post method, additional headers and properties mapping', + scenario: 'Business', + successCriteria: + 'Response should be in xml format with post method, headers and properties mapping', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: destinations[4], + message: { + type: 'track', + userId: 'userId123', + event: 'Order Completed', + properties, + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: transformResultBuilder({ + method: 'POST', + userId: '', + endpoint: destinations[4].Config.webhookUrl, + headers: { + Authorization: 'Bearer test-token', + h1: 'val1', + 'content-type': 'application/json', + }, + XML: { + payload: + 'Order CompletedUSDuserId123622c6f5d5cf86a4c77358033Cones of Dunshire40577c6f5d5cf86a4c7735ba03Five Crowns5', + }, + }), + statusCode: 200, + metadata: generateMetadata(1), + }, + ], + }, + }, + }, +]; diff --git a/test/integrations/destinations/webhook_v2/processor/data.ts b/test/integrations/destinations/webhook_v2/processor/data.ts new file mode 100644 index 0000000000..bb4e7ffa0d --- /dev/null +++ b/test/integrations/destinations/webhook_v2/processor/data.ts @@ -0,0 +1,2 @@ +import { configuration } from './configuration'; +export const data = [...configuration]; diff --git a/test/integrations/destinations/webhook_v2/router/data.ts b/test/integrations/destinations/webhook_v2/router/data.ts new file mode 100644 index 0000000000..44c9f0e6fe --- /dev/null +++ b/test/integrations/destinations/webhook_v2/router/data.ts @@ -0,0 +1,350 @@ +import { generateMetadata } from '../../../testUtils'; +import { + destType, + destinations, + traits, + properties, + RouterInstrumentationErrorStatTags, +} from '../common'; + +const routerRequest1 = { + input: [ + { + message: { + type: 'identify', + userId: 'userId1', + traits, + }, + metadata: generateMetadata(1), + destination: destinations[3], + }, + { + message: { + type: 'identify', + userId: 'userId2', + traits, + }, + metadata: generateMetadata(2), + destination: destinations[3], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits, + }, + metadata: generateMetadata(3), + destination: destinations[3], + }, + ], + destType, +}; + +const routerRequest2 = { + input: [ + { + message: { + type: 'identify', + userId: 'userId1', + traits, + }, + metadata: generateMetadata(1, 'userId1'), + destination: destinations[1], + }, + { + message: { + type: 'identify', + userId: 'userId2', + traits: { ...traits, firstName: 'Alex', lastName: 'T', email: 'alex.t@example.com' }, + }, + metadata: generateMetadata(2, 'userId2'), + destination: destinations[1], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits: { ...traits, phone: '2234567890' }, + }, + metadata: generateMetadata(3, 'userId1'), + destination: destinations[1], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits: { ...traits, phone: '3234567890' }, + }, + metadata: generateMetadata(4, 'userId1'), + destination: destinations[1], + }, + ], + destType, +}; + +const routerRequest3 = { + input: [ + { + message: { + type: 'track', + userId: 'userId1', + event: 'Product Viewed', + context: { traits }, + }, + metadata: generateMetadata(1, 'userId1'), + destination: destinations[5], + }, + { + message: { + type: 'track', + userId: 'userId2', + event: 'Order Completed', + context: { traits }, + properties, + }, + metadata: generateMetadata(2, 'userId2'), + destination: destinations[5], + }, + { + message: { + type: 'track', + userId: 'userId3', + event: 'Product Added', + context: { traits }, + properties, + }, + metadata: generateMetadata(3, 'userId3'), + destination: destinations[5], + }, + ], + destType, +}; + +// TODO: add failure testcases +export const data = [ + { + id: 'webhook_v2-router-test-1', + name: destType, + description: 'Batch multiple GET requests in a single batch with given batch size', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest1, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'GET', + endpoint: 'http://abc.com/contacts/$.traits.userId/', + headers: { + 'x-api-key': 'test-api-key', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { batch: '[]' }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1), generateMetadata(2), generateMetadata(3)], + batched: true, + statusCode: 200, + destination: destinations[3], + }, + ], + }, + }, + }, + }, + { + id: 'webhook_v2-router-test-2', + name: destType, + description: + 'Batch multiple GET requests in multiple batches when number of requests are greater then given batch size', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest2, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'GET', + endpoint: 'http://abc.com/contact/$traits.userId', + headers: { + Authorization: 'Basic dGVzdC11c2VyOg==', + 'content-type': 'application/json', + h1: 'val1', + h2: 2, + h3: 'John', + }, + params: { + q1: 'val1', + q2: 'john.doe@example.com', + }, + body: { + JSON: {}, + JSON_ARRAY: { + batch: '[]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1, 'userId1'), generateMetadata(3, 'userId1')], + batched: true, + statusCode: 200, + destination: destinations[1], + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'GET', + endpoint: 'http://abc.com/contact/$traits.userId', + headers: { + Authorization: 'Basic dGVzdC11c2VyOg==', + 'content-type': 'application/json', + h1: 'val1', + h2: 2, + h3: 'John', + }, + params: { + q1: 'val1', + q2: 'john.doe@example.com', + }, + body: { + JSON: {}, + JSON_ARRAY: { + batch: '[]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(4, 'userId1')], + batched: true, + statusCode: 200, + destination: destinations[1], + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'GET', + endpoint: 'http://abc.com/contact/$traits.userId', + headers: { + Authorization: 'Basic dGVzdC11c2VyOg==', + 'content-type': 'application/json', + h1: 'val1', + h2: 2, + h3: 'Alex', + }, + params: { + q1: 'val1', + q2: 'alex.t@example.com', + }, + body: { + JSON: {}, + JSON_ARRAY: { + batch: '[]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(2, 'userId2')], + batched: true, + statusCode: 200, + destination: destinations[1], + }, + ], + }, + }, + }, + }, + { + id: 'webhook_v2-router-test-3', + name: destType, + description: 'Batch multiple POST requests with properties mappings', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest3, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://abc.com/events', + params: {}, + headers: { + 'content-type': 'application/json', + }, + body: { + JSON: {}, + JSON_ARRAY: { + batch: + '[{"event":"Product Viewed","userId":"userId1","properties":{"items":[]}},{"event":"Order Completed","currency":"USD","userId":"userId2","properties":{"items":[{"item_id":"622c6f5d5cf86a4c77358033","name":"Cones of Dunshire","price":40},{"item_id":"577c6f5d5cf86a4c7735ba03","name":"Five Crowns","price":5}]}},{"event":"Product Added","currency":"USD","userId":"userId3","properties":{"items":[{"item_id":"622c6f5d5cf86a4c77358033","name":"Cones of Dunshire","price":40},{"item_id":"577c6f5d5cf86a4c7735ba03","name":"Five Crowns","price":5}]}}]', + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [ + generateMetadata(1, 'userId1'), + generateMetadata(2, 'userId2'), + generateMetadata(3, 'userId3'), + ], + batched: true, + statusCode: 200, + destination: destinations[5], + }, + ], + }, + }, + }, + }, +]; From f24759aebbeb560f0de9d4920ae2ed0cdc7bfa3f Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:46:23 +0530 Subject: [PATCH 164/201] fix: reddit authorisation failed case handling (#3690) * fix(bugsnag): reddit response coming as a non-string * fix: update error handling logic for unauthorised case - new error response handled - backward compatibility * fix: existing test-cases for error handling - added new test-cases --------- Co-authored-by: Sai Sankeerth --- src/v0/destinations/reddit/networkHandler.js | 20 +++- .../destinations/reddit/dataDelivery/oauth.ts | 102 ++++++++++++++++-- .../destinations/reddit/network.ts | 57 ++++++++++ 3 files changed, 168 insertions(+), 11 deletions(-) diff --git a/src/v0/destinations/reddit/networkHandler.js b/src/v0/destinations/reddit/networkHandler.js index 55087b52ac..e691255a26 100644 --- a/src/v0/destinations/reddit/networkHandler.js +++ b/src/v0/destinations/reddit/networkHandler.js @@ -1,4 +1,5 @@ const { RetryableError } = require('@rudderstack/integrations-lib'); +const isString = require('lodash/isString'); const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util/index'); const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); @@ -9,12 +10,23 @@ const redditRespHandler = (destResponse) => { const { status, response } = destResponse; // to handle the case when authorization-token is invalid - if (status === 401 && response.includes('Authorization Required')) { + if (status === 401) { + let errorMessage = 'Authorization failed'; + let authErrorCategory = ''; + + if (isString(response) && response.includes('Authorization Required')) { + errorMessage = `Request failed due to ${response}`; + authErrorCategory = REFRESH_TOKEN; + } else if (response?.error?.reason === 'UNAUTHORIZED') { + errorMessage = response.error.explanation || errorMessage; + authErrorCategory = REFRESH_TOKEN; + } + throw new RetryableError( - `Request failed due to ${response} 'during reddit response transformation'`, - 500, + `${errorMessage} during reddit response transformation`, + status, destResponse, - REFRESH_TOKEN, + authErrorCategory, ); } }; diff --git a/test/integrations/destinations/reddit/dataDelivery/oauth.ts b/test/integrations/destinations/reddit/dataDelivery/oauth.ts index 90368cd60b..8c0d486a7a 100644 --- a/test/integrations/destinations/reddit/dataDelivery/oauth.ts +++ b/test/integrations/destinations/reddit/dataDelivery/oauth.ts @@ -81,7 +81,7 @@ export const v0oauthScenarios = [ }, output: { response: { - status: 500, + status: 401, body: { output: { authErrorCategory: 'REFRESH_TOKEN', @@ -90,9 +90,53 @@ export const v0oauthScenarios = [ status: 401, }, message: - "Request failed due to Authorization Required 'during reddit response transformation'", + 'Request failed due to Authorization Required during reddit response transformation', statTags: expectedStatTags, - status: 500, + status: 401, + }, + }, + }, + }, + }, + { + id: 'reddit_v0_oauth_scenario_2', + name: 'reddit', + description: '[Proxy v0 API] :: Oauth where error response is an object from destination', + successCriteria: 'Should return 401 with authErrorCategory as REFRESH_TOKEN', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v0', + input: { + request: { + body: generateProxyV0Payload({ + ...commonRequestParameters, + endpoint: 'https://ads-api.reddit.com/api/v2.0/conversions/events/a2_objResp_401', + }), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'REFRESH_TOKEN', + destinationResponse: { + response: { + success: false, + error: { + reason: 'UNAUTHORIZED', + explanation: + 'This server could not verify that you are authorized to access the document you requested.', + }, + }, + status: 401, + }, + message: + 'This server could not verify that you are authorized to access the document you requested. during reddit response transformation', + statTags: expectedStatTags, + status: 401, }, }, }, @@ -124,21 +168,65 @@ export const v1oauthScenarios = [ }, output: { response: { - status: 500, + status: 401, body: { output: { authErrorCategory: 'REFRESH_TOKEN', message: - "Request failed due to Authorization Required 'during reddit response transformation'", + 'Request failed due to Authorization Required during reddit response transformation', response: [ { error: '"Authorization Required"', metadata: generateMetadata(1), - statusCode: 500, + statusCode: 401, + }, + ], + statTags: expectedStatTags, + status: 401, + }, + }, + }, + }, + }, + { + id: 'reddit_v1_oauth_scenario_2', + name: 'reddit', + description: '[Proxy v1 API] :: Oauth where error response is an object from destination', + successCriteria: 'Should return 401 with authErrorCategory as REFRESH_TOKEN', + scenario: 'Oauth', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + ...commonRequestParameters, + endpoint: 'https://ads-api.reddit.com/api/v2.0/conversions/events/a2_objResp_401', + }, + [generateMetadata(1)], + ), + method: 'POST', + }, + }, + output: { + response: { + status: 401, + body: { + output: { + authErrorCategory: 'REFRESH_TOKEN', + message: + 'This server could not verify that you are authorized to access the document you requested. during reddit response transformation', + response: [ + { + error: + '{"success":false,"error":{"reason":"UNAUTHORIZED","explanation":"This server could not verify that you are authorized to access the document you requested."}}', + metadata: generateMetadata(1), + statusCode: 401, }, ], statTags: expectedStatTags, - status: 500, + status: 401, }, }, }, diff --git a/test/integrations/destinations/reddit/network.ts b/test/integrations/destinations/reddit/network.ts index 7c436e8fb8..562c8e95ad 100644 --- a/test/integrations/destinations/reddit/network.ts +++ b/test/integrations/destinations/reddit/network.ts @@ -97,4 +97,61 @@ export const networkCallsData = [ }, httpRes: { data: 'Authorization Required', status: 401, statusText: 'Unauthorized' }, }, + { + httpReq: { + url: 'https://ads-api.reddit.com/api/v2.0/conversions/events/a2_objResp_401', + data: { + events: [ + { + event_at: '2019-10-14T09:03:17.562Z', + event_type: { + tracking_type: 'ViewContent', + }, + user: { + aaid: 'c12d34889302d3c656b5699fa9190b51c50d6f62fce57e13bd56b503d66c487a', + email: 'ac144532d9e4efeab19475d9253a879173ea12a3d2238d1cb8a332a7b3a105f2', + external_id: '7b023241a3132b792a5a33915a5afb3133cbb1e13d72879689bf6504de3b036d', + ip_address: 'e80bd55a3834b7c2a34ade23c7ecb54d2a49838227080f50716151e765a619db', + user_agent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + screen_dimensions: {}, + }, + event_metadata: { + item_count: 3, + products: [ + { + id: '123', + name: 'Monopoly', + category: 'Games', + }, + { + id: '345', + name: 'UNO', + category: 'Games', + }, + ], + }, + }, + ], + }, + params: { destination: 'reddit' }, + headers: { + Authorization: 'Bearer dummyAccessToken', + 'Content-Type': 'application/json', + }, + method: 'POST', + }, + httpRes: { + data: { + success: false, + error: { + reason: 'UNAUTHORIZED', + explanation: + 'This server could not verify that you are authorized to access the document you requested.', + }, + }, + status: 401, + statusText: 'Unauthorized', + }, + }, ]; From 4a1dcbfab30964b94e7cb61f1e8b2e60bad878f6 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 29 Aug 2024 14:19:00 +0000 Subject: [PATCH 165/201] chore(release): 1.76.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dbdea91711..0ec77cc89e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.76.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.76.0...v1.76.1) (2024-08-29) + + +### Bug Fixes + +* reddit authorisation failed case handling ([#3690](https://github.com/rudderlabs/rudder-transformer/issues/3690)) ([f24759a](https://github.com/rudderlabs/rudder-transformer/commit/f24759aebbeb560f0de9d4920ae2ed0cdc7bfa3f)) + ## [1.76.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.75.1...v1.76.0) (2024-08-20) diff --git a/package-lock.json b/package-lock.json index 3e1ab9730f..80e057dcf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.76.0", + "version": "1.76.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.76.0", + "version": "1.76.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 9a0d1faccb..7aefc0e363 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.76.0", + "version": "1.76.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 898f904fb0b1a633094c7a172d3674bd2727be9a Mon Sep 17 00:00:00 2001 From: Sai Sankeerth Date: Fri, 30 Aug 2024 09:44:21 +0530 Subject: [PATCH 166/201] chore: eslint, prettier missed merge conflict fixes --- .eslintignore | 5 ----- .prettierignore | 4 ---- 2 files changed, 9 deletions(-) diff --git a/.eslintignore b/.eslintignore index 95921a4cbe..fba46e4328 100644 --- a/.eslintignore +++ b/.eslintignore @@ -21,13 +21,8 @@ src/v0/destinations/personalize/scripts/ test/integrations/destinations/testTypes.d.ts *.config*.js scripts/skipPrepareScript.js -<<<<<<< HEAD *.yaml *.yml .eslintignore .prettierignore *.json -======= -package-lock.json -package.json ->>>>>>> e21ebd0085aadfe61cb6442da6689e32be33f52f diff --git a/.prettierignore b/.prettierignore index a7d84721bd..ac5f1fc409 100644 --- a/.prettierignore +++ b/.prettierignore @@ -8,9 +8,5 @@ test/**/*.js src/util/lodash-es-core.js src/util/url-search-params.min.js dist -<<<<<<< HEAD .eslintignore .prettierignore -======= -.eslintignore ->>>>>>> e21ebd0085aadfe61cb6442da6689e32be33f52f From c3059746f25677eae739468c3a4b7496aa82f4da Mon Sep 17 00:00:00 2001 From: Dilip Kola Date: Fri, 30 Aug 2024 11:41:35 +0530 Subject: [PATCH 167/201] fix: npm vulnerabilities --- package-lock.json | 11771 +++++++++++++++++++++++++++++--------------- 1 file changed, 7873 insertions(+), 3898 deletions(-) diff --git a/package-lock.json b/package-lock.json index f17b51c774..fe1c37c4ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -520,232 +520,42 @@ } }, "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==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "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==" - }, "node_modules/@aws-crypto/crc32c": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz", - "integrity": "sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dependencies": { - "@aws-crypto/util": "^3.0.0", + "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-crypto/crc32c/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==", - "dependencies": { - "tslib": "^1.11.1" + "tslib": "^2.6.2" } }, - "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==" - }, "node_modules/@aws-crypto/sha1-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz", - "integrity": "sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw==", - "dependencies": { - "@aws-crypto/ie11-detection": "^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/sha1-browser/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "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==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "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-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.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==" - }, - "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==", - "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==" - }, - "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==", - "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==" - }, - "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==", - "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==" - }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.485.0.tgz", - "integrity": "sha512-1SYhvRu/dNqQ5HcIgm7wIpyn1FsthbgG04o6QyVAnfOxmawFt4nqCEtNCwsmlX7o1ZCTYY+qNrozb7XZy+GKSQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-signing": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.616.0.tgz", - "integrity": "sha512-IrlnpVGJKK+aTkNT5q/1UjJULjHRS9eGmfXLXMZmGk3MsyZBAzxPlW8/eT/dxBwBieuLmHpysPGnerduZCwggw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.616.0", - "@aws-sdk/client-sts": "3.616.0", - "@aws-sdk/core": "3.616.0", - "@aws-sdk/credential-provider-node": "3.616.0", - "@aws-sdk/middleware-host-header": "3.616.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.616.0", - "@aws-sdk/middleware-user-agent": "3.616.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.7", - "@smithy/fetch-http-handler": "^3.2.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.4", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.10", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.8", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.10", - "@smithy/util-defaults-mode-node": "^3.0.10", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser": { + "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", @@ -759,42 +569,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/sha256-js": { + "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", @@ -807,7 +582,7 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/supports-web-crypto": { + "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", @@ -815,7 +590,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util": { + "node_modules/@aws-crypto/util": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", @@ -825,79 +600,47 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.616.0.tgz", - "integrity": "sha512-hwW0u1f8U4dSloAe61/eupUiGd5Q13B72BuzGxvRk0cIpYX/2m0KBG8DDl7jW1b2QQ+CflTLpG2XUf2+vRJxGA==", + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.637.0.tgz", + "integrity": "sha512-391mca6yEfXVcSOTLGcxzlT0QCFfvoymLlVHfb//bzl806UUTq12cR2k+AnaCKLj+QSejmA7n6lwZWADm00Fvg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.616.0", - "@aws-sdk/middleware-host-header": "3.616.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.616.0", - "@aws-sdk/middleware-user-agent": "3.616.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", + "@aws-sdk/util-endpoints": "3.637.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.7", - "@smithy/fetch-http-handler": "^3.2.2", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-node": "^3.0.3", "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.4", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.10", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.8", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.10", - "@smithy/util-defaults-mode-node": "^3.0.10", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", @@ -908,132 +651,63 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.616.0.tgz", - "integrity": "sha512-YY1hpYS/G1uRGjQf88dL8VLHkP/IjGxKeXdhy+JnzMdCkAWl3V9j0fEALw40NZe0x79gr6R2KUOUH/IKYQfUmg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.616.0", - "@aws-sdk/credential-provider-node": "3.616.0", - "@aws-sdk/middleware-host-header": "3.616.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.616.0", - "@aws-sdk/middleware-user-agent": "3.616.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.7", - "@smithy/fetch-http-handler": "^3.2.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.4", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.10", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.8", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.10", - "@smithy/util-defaults-mode-node": "^3.0.10", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.616.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sts": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.616.0.tgz", - "integrity": "sha512-FP7i7hS5FpReqnysQP1ukQF1OUWy8lkomaOnbu15H415YUrfCp947SIx6+BItjmx+esKxPkEjh/fbCVzw2D6hQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.616.0", - "@aws-sdk/core": "3.616.0", - "@aws-sdk/credential-provider-node": "3.616.0", - "@aws-sdk/middleware-host-header": "3.616.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.616.0", - "@aws-sdk/middleware-user-agent": "3.616.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.7", - "@smithy/fetch-http-handler": "^3.2.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.4", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.10", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.8", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.10", - "@smithy/util-defaults-mode-node": "^3.0.10", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/core": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.616.0.tgz", - "integrity": "sha512-O/urkh2kECs/IqZIVZxyeyHZ7OR2ZWhLNK7btsVQBQvJKrEspLrk/Fp20Qfg5JDerQfBN83ZbyRXLJOOucdZpw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@smithy/core": "^2.2.7", - "@smithy/protocol-http": "^4.0.4", - "@smithy/signature-v4": "^4.0.0", - "@smithy/smithy-client": "^3.1.8", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", - "fast-xml-parser": "4.2.5", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz", - "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1041,37 +715,23 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.616.0.tgz", - "integrity": "sha512-1rgCkr7XvEMBl7qWCo5BKu3yAxJs71dRaZ55Xnjte/0ZHH6Oc93ZrHzyYy6UH6t0nZrH+FAuw7Yko2YtDDwDeg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.2", - "@smithy/node-http-handler": "^3.1.3", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.8", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.616.0.tgz", - "integrity": "sha512-5gQdMr9cca3xV7FF2SxpxWGH2t6+t4o+XBGiwsHm8muEjf4nUmw7Ij863x25Tjt2viPYV0UStczSb5Sihp7bkA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.609.0", - "@aws-sdk/credential-provider-http": "3.616.0", - "@aws-sdk/credential-provider-process": "3.614.0", - "@aws-sdk/credential-provider-sso": "3.616.0", - "@aws-sdk/credential-provider-web-identity": "3.609.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.1.4", "@smithy/property-provider": "^3.1.3", "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", @@ -1079,26 +739,16 @@ }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.616.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.616.0.tgz", - "integrity": "sha512-Se+u6DAxjDPjKE3vX1X2uxjkWgGq69BTo0uTB0vDUiWwBVgh16s9BsBhSAlKEH1CCbbJHvOg4YdTrzjwzqyClg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.609.0", - "@aws-sdk/credential-provider-http": "3.616.0", - "@aws-sdk/credential-provider-ini": "3.616.0", - "@aws-sdk/credential-provider-process": "3.614.0", - "@aws-sdk/credential-provider-sso": "3.616.0", - "@aws-sdk/credential-provider-web-identity": "3.609.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1106,14 +756,11 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz", - "integrity": "sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1121,16 +768,11 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.616.0.tgz", - "integrity": "sha512-3rsWs9GBi8Z8Gps5ROwqguxtw+J6OIg1vawZMLRNMqqZoBvbOToe9wEnpid8ylU+27+oG8uibJNlNuRyXApUjw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@aws-sdk/client-sso": "3.616.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1138,30 +780,24 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz", - "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.609.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.616.0.tgz", - "integrity": "sha512-mhNfHuGhCDZwYCABebaOvTgOM44UCZZRq2cBpgPZLVKP0ydAv5aFHXv01goexxXHqgHoEGx0uXWxlw0s2EpFDg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1169,12 +805,11 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1182,220 +817,204 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.616.0.tgz", - "integrity": "sha512-LQKAcrZRrR9EGez4fdCIVjdn0Ot2HMN12ChnoMGEU6oIxnQ2aSC7iASFFCV39IYfeMh7iSCPj7Wopqw8rAouzg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.4", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.616.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.616.0.tgz", - "integrity": "sha512-iMcAb4E+Z3vuEcrDsG6T2OBNiqWAquwahP9qepHqfmnmJqHr1mSHtXDYTGBNid31+621sUQmneUQ+fagpGAe4w==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.0.4", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", + "@smithy/querystring-parser": "^3.0.3", "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-endpoints": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz", - "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/core": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.8.tgz", - "integrity": "sha512-1Y0XX0Ucyg0LWTfTVLWpmvSRtFRniykUl3dQ0os1sTd03mKDudR6mVyX+2ak1phwPXx2aEWMAAdW52JNi0mc3A==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.11", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.0.4", - "@smithy/smithy-client": "^3.1.9", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/credential-provider-imds": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz", - "integrity": "sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==", + "node_modules/@aws-sdk/client-personalize": { + "version": "3.642.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.642.0.tgz", + "integrity": "sha512-zhSOXSzGqVS3AfMs2ganoRvQz369oaRHyYZvLMC6kdvX4HlLDz9ARdd+maIs6dag3Ms1yCBQzpfcMIradmXJgA==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.2.tgz", - "integrity": "sha512-3LaWlBZObyGrOOd7e5MlacnAKEwFBmAeiW/TOj2eR9475Vnq30uS2510+tnKbxrGjROfNdOhQqGo5j3sqLT6bA==", - "dependencies": { - "@smithy/protocol-http": "^4.0.4", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, @@ -1410,23 +1029,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-content-length": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.4.tgz", - "integrity": "sha512-wySGje/KfhsnF8YSh9hP16pZcl3C+X6zRsvSfItQGvCyte92LliilU3SD0nR7kTlxnAJwxY8vE/k4Eoezj847Q==", - "dependencies": { - "@smithy/protocol-http": "^4.0.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz", - "integrity": "sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { "@smithy/middleware-serde": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", @@ -1440,25 +1046,6 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-retry": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.11.tgz", - "integrity": "sha512-/TIRWmhwMpv99JCGuMhJPnH7ggk/Lah7s/uNDyr7faF02BxNsyD/fz9Tw7pgCf9tYOKgjimm2Qml1Aq1pbkt6g==", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.0.4", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.9", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", @@ -1498,12 +1085,12 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.3.tgz", - "integrity": "sha512-UiKZm8KHb/JeOPzHZtRUfyaRDO1KPKPpsd7iplhiwVGOeVdkiVJ5bVe7+NhWREMOKomrDIDdSZyglvMothLg0Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.0.4", + "@smithy/protocol-http": "^4.1.0", "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1525,9 +1112,9 @@ } }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.4.tgz", - "integrity": "sha512-fAA2O4EFyNRyYdFLVIv5xMMeRb+3fRKc/Rt2flh5k831vLvUmNFXcydeg7V3UeEhGURJI4c1asmGJBjvmF6j8Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1561,17 +1148,6 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "dependencies": { - "@smithy/types": "^3.3.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", @@ -1584,33 +1160,16 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/signature-v4": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.0.0.tgz", - "integrity": "sha512-ervYjQ+ZvmNG51Ui77IOTPri7nOyo8Kembzt9uwwlmtXJPmFXvslOahbA1blvAVs7G0KlYMiOBog1rAt7RVXxg==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.9.tgz", - "integrity": "sha512-My2RaInZ4gSwJUPMaiLR/Nk82+c4LlvqpXA+n7lonGYgCZq23Tg+/xFhgmiejJ6XPElYJysTPyV90vKyp17+1g==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.0.4", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.1", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { @@ -1651,18 +1210,22 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-browser": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-body-length-node": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { "tslib": "^2.6.2" }, @@ -1670,22 +1233,40 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-config-provider": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { "tslib": "^2.6.2" }, @@ -1693,44 +1274,91 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.11.tgz", - "integrity": "sha512-O3s9DGb3bmRvEKmT8RwvSWK4A9r6svfd+MnJB+UMi9ZcCkAnoRtliulOnGF0qCMkKF9mwk2tkopBBstalPY/vg==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.9", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.11.tgz", - "integrity": "sha512-qd4a9qtyOa/WY14aHHOkMafhh9z8D2QTwlcBoXMTPnEwtcY+xpe1JyFm9vya7VsB8hHsfn3XodEtwqREiu4ygQ==", + "node_modules/@aws-sdk/client-s3": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.637.0.tgz", + "integrity": "sha512-y6UC94fsMvhKbf0dzfnjVP1HePeGjplfcYfilZU1COIJLyTkMcUv4XcT4I407CGIrvgEafONHkiC09ygqUauNA==", "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/middleware-ssec": "3.609.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/core": "^2.4.0", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-blob-browser": "^3.1.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/hash-stream-node": "^3.1.2", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/md5-js": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.9", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1738,10 +1366,22 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { "tslib": "^2.6.2" }, @@ -1749,24 +1389,28 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-retry": { + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-serde": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1774,4459 +1418,8756 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.1.tgz", - "integrity": "sha512-EhRnVvl3AhoHAT2rGQ5o+oSDRM/BUSMPLZZdRJZLcNVUsFAjOs4vHaPdNQivTSzRcFxf5DA4gtO46WWU2zimaw==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.2", - "@smithy/node-http-handler": "^3.1.3", "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.485.0.tgz", - "integrity": "sha512-Vh8FRiXekwu1sSdfhS/wpNzjIljPmIXrUdEapR7EmaIwditR+mTTzNS+7y69YdPQhVEE2u9QxRlo4Eg1e1jD3w==", - "dependencies": { - "@aws-crypto/sha1-browser": "3.0.0", - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-bucket-endpoint": "3.485.0", - "@aws-sdk/middleware-expect-continue": "3.485.0", - "@aws-sdk/middleware-flexible-checksums": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-location-constraint": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-sdk-s3": "3.485.0", - "@aws-sdk/middleware-signing": "3.485.0", - "@aws-sdk/middleware-ssec": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/signature-v4-multi-region": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@aws-sdk/xml-builder": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/eventstream-serde-browser": "^2.0.16", - "@smithy/eventstream-serde-config-resolver": "^2.0.16", - "@smithy/eventstream-serde-node": "^2.0.16", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-blob-browser": "^2.0.17", - "@smithy/hash-node": "^2.0.18", - "@smithy/hash-stream-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/md5-js": "^2.0.18", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-stream": "^2.0.24", - "@smithy/util-utf8": "^2.0.2", - "@smithy/util-waiter": "^2.0.16", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.485.0.tgz", - "integrity": "sha512-apN2bEn0PZs0jD4jAfvwO3dlWqw9YIQJ6TAudM1bd3S5vzWqlBBcLfQpK6taHoQaI+WqgUWXLuOf7gRFbGXKPg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz", - "integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/core": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.485.0.tgz", - "integrity": "sha512-Yvi80DQcbjkYCft471ClE3HuetuNVqntCs6eFOomDcrJaqdOFrXv2kJAxky84MRA/xb7bGlDGAPbTuj1ICputg==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@smithy/core": "^1.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.485.0.tgz", - "integrity": "sha512-XIy5h1AcDiY3V286X7KrLA5HAxLfzLGrUGBPFY+GTJGYetDhlJwFz12q6BOkIfeAhUbT2Umb4ptujX9eqpZJHQ==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.485.0.tgz", - "integrity": "sha512-3XkFgwVU1XOB33dV7t9BKJ/ptdl2iS+0dxE7ecq8aqT2/gsfKmLCae1G17P8WmdD3z0kMDTvnqM2aWgUnSOkmg==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.485.0.tgz", - "integrity": "sha512-2/2Y3Z7cpKf8vbQ+FzoBPxRyb0hGJZB1YrnH7hptVi5gSVe1NiwV5ZtsDnv4cwUfOBqEu97nMXw5IrRO26S0DA==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.485.0.tgz", - "integrity": "sha512-cFYF/Bdw7EnT4viSxYpNIv3IBkri/Yb+JpQXl8uDq7bfVJfAN5qZmK07vRkg08xL6TC4F41wshhMSAucGdTwIw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.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.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.485.0.tgz", - "integrity": "sha512-2DwzO2azkSzngifKDT61W/DL0tSzewuaFHiLJWdfc8Et3mdAQJ9x3KAj8u7XFpjIcGNqk7FiKjN+zeGUuNiEhA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-ini": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.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.8.0", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.485.0.tgz", - "integrity": "sha512-X9qS6ZO/rDKYDgWqD1YmSX7sAUUHax9HbXlgGiTTdtfhZvQh1ZmnH6wiPu5WNliafHZFtZT2W07kgrDLPld/Ug==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.485.0.tgz", - "integrity": "sha512-l0oC8GTrWh+LFQQfSmG1Jai1PX7Mhj9arb/CaS1/tmeZE0hgIXW++tvljYs/Dds4LGXUlaWG+P7BrObf6OyIXA==", - "dependencies": { - "@aws-sdk/client-sso": "3.485.0", - "@aws-sdk/token-providers": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.485.0.tgz", - "integrity": "sha512-WpBFZFE0iXtnibH5POMEKITj/hR0YV5l2n9p8BEvKjdJ63s3Xke1RN20ZdIyKDaRDwj8adnKDgNPEnAKdS4kLw==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.485.0.tgz", - "integrity": "sha512-SpGEmiVr+C9Dtc5tZFfFYXSNxbl1jShLlyZPWERHBn4QwGvdXcgPB96I0yvUuitBKrM0winHsCWH7CR/z24kmg==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.485.0", - "@aws-sdk/client-sso": "3.485.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/credential-provider-cognito-identity": "3.485.0", - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-http": "3.485.0", - "@aws-sdk/credential-provider-ini": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.485.0.tgz", - "integrity": "sha512-d/DppujsMu2zg2K95wS2OZ+x+wY41OeZL0duROKZRzNtPyYzlOiSw00+zSz7/sdmUad1bYIEyDJ46zI/FV6AVg==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/smithy-client": "^2.2.1", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.485.0.tgz", - "integrity": "sha512-DptPuprsx9V1LH91ZvC/7a7B1UnuSAIi1ArJHlHqJL1ISo6sH1oeXP6KRa0tj8biGMDIx0b22wg8EEpFePMy3w==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-arn-parser": "3.465.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.485.0.tgz", - "integrity": "sha512-rOwJJWM1/ydwSiJJ1l/X5h91u2Xzb8/CwOW6ZY+E8iZA0HDCtlJnKNlhHb+NHGtDamd4+1qdGSRtPQevyS58Cg==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.485.0.tgz", - "integrity": "sha512-5+OmVMbEwl1LDdWbaJxoSViw6vuMsdDQgASFUM37aG46q1zWSiPU171IXutEAFZZXN/t0HcOFi0AmNrS0o+dkQ==", + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz", + "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@aws-crypto/crc32c": "3.0.0", - "@aws-sdk/types": "3.485.0", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.485.0.tgz", - "integrity": "sha512-1mAUX9dQNGo2RIKseVj7SI/D5abQJQ/Os8hQ0NyVAyyVYF+Yjx5PphKgfhM5yoBwuwZUl6q71XPYEGNx7be6SA==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.485.0.tgz", - "integrity": "sha512-Mrp4chtYliqCUSVjzLYPcZCPGmhL4QM7o6NhHBdA6omaIGdn4pJqFwN5ELZoWJDZMKyfrKi6s6u97jR9VtEXRg==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.485.0.tgz", - "integrity": "sha512-O8IgJ0LHi5wTs5GlpI7nqmmSSagkVdd1shpGgQWY2h0kMSCII8CJZHBG97dlFFpGTvx5EDlhPNek7rl/6F4dRw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.485.0.tgz", - "integrity": "sha512-ZeVNATGNFcqkWDut3luVszROTUzkU5u+rJpB/xmeMoenlDAjPRiHt/ca3WkI5wAnIJ1VSNGpD2sOFLMCH+EWag==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.485.0.tgz", - "integrity": "sha512-3769c4e3UtvaNU5T6dHxhjGI1kEXymldqiP1PMZMX2jVffwSGhbvyLq0Kl6+9Jr51fj2oXN6Tex+8J9+5dzTgQ==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-arn-parser": "3.465.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.485.0.tgz", - "integrity": "sha512-41xzT2p1sOibhsLkdE5rwPJkNbBtKD8Gp36/ySfu0KE415wfXKacElSVxAaBw39/j7iSWDYqqybeEYbAzk+3GQ==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.485.0.tgz", - "integrity": "sha512-A59WTC0egT8zLnRzB+yWKq2AonugD1DgN4710RG70JY5XUmx5TYdECbUrVeG/zhNIKbBLLFjRcVk2uo4OZcgIA==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.485.0.tgz", - "integrity": "sha512-CddCVOn+OPQ0CcchketIg+WF6v+MDLAf3GOYTR2htUxxIm7HABuRd6R3kvQ5Jny9CV8gMt22G1UZITsFexSJlQ==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.485.0.tgz", - "integrity": "sha512-2FB2EQ0sIE+YgFqGtkE1lDIMIL6nYe6MkOHBwBM7bommadKIrbbr2L22bPZGs3ReTsxiJabjzxbuCAVhrpHmhg==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.485.0.tgz", - "integrity": "sha512-168ipXkbG75l9cKQmsBtx/4+AYjGsBoy724bXosW13t2/l/E3IzJAYUjDROiK0JXVMG85xAnGWbFwZkjxVXzrQ==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.485.0.tgz", - "integrity": "sha512-kOXA1WKIVIFNRqHL8ynVZ3hCKLsgnEmGr2iDR6agDNw5fYIlCO/6N2xR6QdGcLTvUUbwOlz4OvKLUQnWMKAnnA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.485.0.tgz", - "integrity": "sha512-+QW32YQdvZRDOwrAQPo/qCyXoSjgXB6RwJwCwkd8ebJXRXw6tmGKIHaZqYHt/LtBymvnaBgBBADNa4+qFvlOFw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.465.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.465.0.tgz", - "integrity": "sha512-zOJ82vzDJFqBX9yZBlNeHHrul/kpx/DCoxzW5UBbZeb26kfV53QhMSoEmY8/lEbBqlqargJ/sgRC845GFhHNQw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.485.0.tgz", - "integrity": "sha512-dTd642F7nJisApF8YjniqQ6U59CP/DCtar11fXf1nG9YNBCBsNNVw5ZfZb5nSNzaIdy27mQioWTCV18JEj1mxg==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/util-endpoints": "^1.0.8", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.465.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz", - "integrity": "sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", - "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", - "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "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==", - "dependencies": { - "tslib": "^2.3.1" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.485.0.tgz", - "integrity": "sha512-xQexPM6LINOIkf3NLFywplcbApifZRMWFN41TDWYSNgCUa5uC9fntfenw8N/HTx1n+McRCWSAFBTjDqY/2OLCQ==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", - "dev": true, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "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": ">=16.0.0" } }, - "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/generator/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" + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=4" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "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.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@babel/types": "^7.22.5" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@babel/types": "^7.22.15" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@babel/types": "^7.22.5" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@babel/types": "^7.22.5" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dev": true, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sts": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", + "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "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, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "tslib": "^2.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16.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, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=16.0.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=16.0.0" } }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@babel/traverse/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, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=4" + "node": ">=16.0.0" } }, - "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.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/@bugsnag/browser": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.22.3.tgz", - "integrity": "sha512-TWQSdsCqzxEVmaKzbtmqoBLWF58yjXi/ScC+6L5VNgSj+62jkIQuw5Evjs+7kLQX8WCnaG6XLiDmUJmPx6ZUrA==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@bugsnag/core": "^7.19.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@bugsnag/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", - "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "@bugsnag/cuid": "^3.0.0", - "@bugsnag/safe-json-stringify": "^6.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "0.0.2", - "stack-generator": "^2.0.3" + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@bugsnag/cuid": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", - "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" - }, - "node_modules/@bugsnag/js": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.22.3.tgz", - "integrity": "sha512-SAZEElVlmQgZBPLbTdMAyFD2Pp1mP4t3bv+GmDVGSgBi4W6doKQVk0J/K9f5+JGw8fEh9AJHRlyub3XnlGI6Zw==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@bugsnag/browser": "^7.22.3", - "@bugsnag/node": "^7.22.3" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@bugsnag/node": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.22.3.tgz", - "integrity": "sha512-vDXu0mrduonyCjUkTp+zKSh1WHAtA2VjB49xK5s1f/HnTASiJvzUOQBRXrkqaj37sndYHUSMxUCPvLawyc75nA==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@bugsnag/core": "^7.19.0", - "byline": "^5.0.0", - "error-stack-parser": "^2.0.2", - "iserror": "^0.0.2", - "pump": "^3.0.0", - "stack-generator": "^2.0.3" - } - }, - "node_modules/@bugsnag/safe-json-stringify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", - "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.1.90" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz", - "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@commitlint/format": "^17.8.1", - "@commitlint/lint": "^17.8.1", - "@commitlint/load": "^17.8.1", - "@commitlint/read": "^17.8.1", - "@commitlint/types": "^17.8.1", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/config-validator": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz", - "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@commitlint/types": "^17.8.1", - "ajv": "^8.11.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz", - "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==", - "dev": true, - "engines": { - "node": ">=v14" + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/load": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz", - "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@commitlint/config-validator": "^17.8.1", - "@commitlint/execute-rule": "^17.8.1", - "@commitlint/resolve-extends": "^17.8.1", - "@commitlint/types": "^17.8.1", - "@types/node": "20.5.1", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.2.2" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz", - "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@commitlint/config-validator": "^17.8.1", - "@commitlint/types": "^17.8.1", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "chalk": "^4.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true - }, - "node_modules/@commitlint/cli/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==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/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==", - "dev": true, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/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==", - "dev": true + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@commitlint/cli/node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", - "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", - "dev": true, - "engines": { - "node": ">=v14.21.3" + "node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" - } - }, - "node_modules/@commitlint/cli/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==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/cli/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/config-conventional": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz", - "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "conventional-changelog-conventionalcommits": "^6.1.0" - }, - "engines": { - "node": ">=v14" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@commitlint/config-validator": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.4.tgz", - "integrity": "sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@commitlint/types": "^18.4.4", - "ajv": "^8.11.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v18" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz", - "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@commitlint/types": "^17.8.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "chalk": "^4.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/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==", - "dev": true - }, - "node_modules/@commitlint/ensure/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/ensure/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/execute-rule": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", - "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=v18" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/format": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz", - "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@commitlint/types": "^17.8.1", - "chalk": "^4.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/format/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "chalk": "^4.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/format/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/format/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/format/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==", - "dev": true - }, - "node_modules/@commitlint/format/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==", - "dev": true, - "engines": { - "node": ">=8" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "node_modules/@commitlint/format/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz", - "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@commitlint/types": "^17.8.1", - "semver": "7.5.4" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "chalk": "^4.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true - }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.637.0.tgz", + "integrity": "sha512-9qK1mF+EThtv3tsL1C/wb9MpWctJSkzjrLTFj+0Rtk8VYm6DlGepo/I6a2x3SeDmdBfHAFSrKFU39GqWDp1mwQ==", "dependencies": { - "has-flag": "^4.0.0" + "@aws-sdk/client-cognito-identity": "3.637.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz", - "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@commitlint/is-ignored": "^17.8.1", - "@commitlint/parse": "^17.8.1", - "@commitlint/rules": "^17.8.1", - "@commitlint/types": "^17.8.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "chalk": "^4.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "dependencies": { - "color-convert": "^2.0.1" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/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==", - "dev": true - }, - "node_modules/@commitlint/lint/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/lint/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/load": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.4.tgz", - "integrity": "sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@commitlint/config-validator": "^18.4.4", - "@commitlint/execute-rule": "^18.4.4", - "@commitlint/resolve-extends": "^18.4.4", - "@commitlint/types": "^18.4.4", - "chalk": "^4.1.0", - "cosmiconfig": "^8.3.6", - "cosmiconfig-typescript-loader": "^5.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=v18" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/message": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz", - "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==", - "dev": true, - "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz", - "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@commitlint/types": "^17.8.1", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "chalk": "^4.1.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/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==", - "dev": true - }, - "node_modules/@commitlint/parse/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/parse/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz", - "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@commitlint/top-level": "^17.8.1", - "@commitlint/types": "^17.8.1", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "chalk": "^4.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "node_modules/@commitlint/read/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read/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==", - "dev": true - }, - "node_modules/@commitlint/read/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.14" - } - }, - "node_modules/@commitlint/read/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==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/read/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/resolve-extends": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.4.tgz", - "integrity": "sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@commitlint/config-validator": "^18.4.4", - "@commitlint/types": "^18.4.4", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v18" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/rules": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz", - "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@commitlint/ensure": "^17.8.1", - "@commitlint/message": "^17.8.1", - "@commitlint/to-lines": "^17.8.1", - "@commitlint/types": "^17.8.1", - "execa": "^5.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/rules/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "chalk": "^4.1.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/rules/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@commitlint/rules/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/rules/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/rules/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==", - "dev": true - }, - "node_modules/@commitlint/rules/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==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/rules/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==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "has-flag": "^4.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/to-lines": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz", - "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/top-level": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz", - "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "find-up": "^5.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v14" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.4.tgz", - "integrity": "sha512-/FykLtodD8gKs3+VNkAUwofu4LBHankclj+I8fB2jTRvG6PV7k/OUt4P+VbM7ip853qS4F0g7Z6hLNa6JeMcAQ==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "chalk": "^4.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v18" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "has-flag": "^4.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=16.0.0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@datadog/pprof": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.2.0.tgz", - "integrity": "sha512-kOhWHCWB80djnMCr5KNKBAy1Ih/jK/PIj6yqnZwL1Wqni/h6IBPRUMhtIxcYJMRgsZVYrFXUV20AVXTZCzFokw==", - "hasInstallScript": true, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "delay": "^5.0.0", - "node-gyp-build": "<4.0", - "p-limit": "^3.1.0", - "pprof-format": "^2.0.7", - "source-map": "^0.7.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=16.0.0" } }, - "node_modules/@dependents/detective-less": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.2.tgz", - "integrity": "sha512-1YUvQ+e0eeTWAHoN8Uz2x2U37jZs6IGutiIE5LXId7cxfUGhtZjzxE06FdUiuiRrW+UE0vNCdSNPH2lY4dQCOQ==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.1" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" } }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz", - "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==", - "dev": true, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "boxen": "^5.1.2", - "chalk": "^2.4.1", - "commitizen": "^4.2.6", - "cz-conventional-changelog": "^3.3.0", - "inquirer": "^8.2.4", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" + "node": ">=16.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "tslib": "^2.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=16.0.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@aws-sdk/credential-providers": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.637.0.tgz", + "integrity": "sha512-yW1scL3Z7JsrTrmhjyZsB6tsMJ49UCO42BGlNWZAW+kN1vNJ+qbv6XYQJWR4gjpuD2rdmtGcEawcgllE2Bmigw==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.637.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/credential-provider-cognito-identity": "3.637.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "node_modules/@aws-sdk/lib-storage": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.485.0.tgz", + "integrity": "sha512-d/DppujsMu2zg2K95wS2OZ+x+wY41OeZL0duROKZRzNtPyYzlOiSw00+zSz7/sdmUad1bYIEyDJ46zI/FV6AVg==", + "dependencies": { + "@smithy/abort-controller": "^2.0.1", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/smithy-client": "^2.2.1", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.5.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.0.0" } }, - "node_modules/@ewoudenberg/difflib": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz", - "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", "dependencies": { - "heap": ">= 0.2.0" + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10.10.0" + "node": ">=16.0.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=16.0.0" } }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=16.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", "dependencies": { - "ansi-regex": "^6.0.1" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=16.0.0" } }, - "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, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "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" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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, + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "p-locate": "^4.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "p-try": "^2.0.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "p-limit": "^2.2.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "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, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/console/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", + "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/console/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/console/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==", - "dev": true - }, - "node_modules/@jest/console/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/console/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "has-flag": "^4.0.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=16.0.0" } }, - "node_modules/@jest/core/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/core/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", + "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", "dependencies": { - "color-name": "~1.1.4" + "@aws-sdk/core": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/core/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==", - "dev": true - }, - "node_modules/@jest/core/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/core/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "jest-get-type": "^29.6.3" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "color-convert": "^2.0.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters/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==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/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==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/reporters/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform/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==", - "dev": true - }, - "node_modules/@jest/transform/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/transform/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "has-flag": "^4.0.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", + "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/types/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-ssec/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=16.0.0" } }, - "node_modules/@jest/types/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "color-name": "~1.1.4" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jest/types/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==", - "dev": true - }, - "node_modules/@jest/types/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==", - "dev": true, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jest/types/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==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", "dependencies": { - "has-flag": "^4.0.0" + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6.0.0" + "node": ">=16.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dev": true, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", + "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@koa/router": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz", - "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "debug": "^4.3.4", - "http-errors": "^2.0.0", - "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.2.1" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 12" + "node": ">=16.0.0" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "tslib": "^2.6.2" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@mapbox/node-pre-gyp/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==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", "dependencies": { - "semver": "^6.0.0" + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@mapbox/node-pre-gyp/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/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@ndhoule/extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", - "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=16.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">= 8" + "node": ">=16.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 8" + "node": ">=16.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, + "node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=14" + "node": ">=16.0.0" } }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "dependencies": { + "tslib": "^2.6.2" }, - "funding": { - "url": "https://opencollective.com/unts" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", + "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "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.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/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/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "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-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.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.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "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/@bugsnag/browser": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.22.3.tgz", + "integrity": "sha512-TWQSdsCqzxEVmaKzbtmqoBLWF58yjXi/ScC+6L5VNgSj+62jkIQuw5Evjs+7kLQX8WCnaG6XLiDmUJmPx6ZUrA==", + "dependencies": { + "@bugsnag/core": "^7.19.0" + } + }, + "node_modules/@bugsnag/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", + "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/cuid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", + "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" + }, + "node_modules/@bugsnag/js": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.22.3.tgz", + "integrity": "sha512-SAZEElVlmQgZBPLbTdMAyFD2Pp1mP4t3bv+GmDVGSgBi4W6doKQVk0J/K9f5+JGw8fEh9AJHRlyub3XnlGI6Zw==", + "dependencies": { + "@bugsnag/browser": "^7.22.3", + "@bugsnag/node": "^7.22.3" + } + }, + "node_modules/@bugsnag/node": { + "version": "7.22.3", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.22.3.tgz", + "integrity": "sha512-vDXu0mrduonyCjUkTp+zKSh1WHAtA2VjB49xK5s1f/HnTASiJvzUOQBRXrkqaj37sndYHUSMxUCPvLawyc75nA==", + "dependencies": { + "@bugsnag/core": "^7.19.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.2", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" + } + }, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/cli": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz", + "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==", + "dev": true, + "dependencies": { + "@commitlint/format": "^17.8.1", + "@commitlint/lint": "^17.8.1", + "@commitlint/load": "^17.8.1", + "@commitlint/read": "^17.8.1", + "@commitlint/types": "^17.8.1", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/config-validator": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz", + "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.8.1", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz", + "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/load": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz", + "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.8.1", + "@commitlint/execute-rule": "^17.8.1", + "@commitlint/resolve-extends": "^17.8.1", + "@commitlint/types": "^17.8.1", + "@types/node": "20.5.1", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.2.2" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz", + "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==", + "dev": true, + "dependencies": { + "@commitlint/config-validator": "^17.8.1", + "@commitlint/types": "^17.8.1", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/cli/node_modules/@types/node": { + "version": "20.5.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", + "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", + "dev": true + }, + "node_modules/@commitlint/cli/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/cli/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/cli/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==", + "dev": true + }, + "node_modules/@commitlint/cli/node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", + "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", + "dev": true, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" + } + }, + "node_modules/@commitlint/cli/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/cli/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz", + "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==", + "dev": true, + "dependencies": { + "conventional-changelog-conventionalcommits": "^6.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.4.tgz", + "integrity": "sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/types": "^18.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz", + "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/ensure/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/ensure/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/ensure/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==", + "dev": true + }, + "node_modules/@commitlint/ensure/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/ensure/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", + "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz", + "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.8.1", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/format/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/format/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/format/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/format/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==", + "dev": true + }, + "node_modules/@commitlint/format/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/format/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz", + "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.8.1", + "semver": "7.5.4" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/is-ignored/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/is-ignored/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/is-ignored/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==", + "dev": true + }, + "node_modules/@commitlint/is-ignored/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/is-ignored/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/lint": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz", + "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==", + "dev": true, + "dependencies": { + "@commitlint/is-ignored": "^17.8.1", + "@commitlint/parse": "^17.8.1", + "@commitlint/rules": "^17.8.1", + "@commitlint/types": "^17.8.1" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/lint/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/lint/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/lint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/lint/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/lint/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==", + "dev": true + }, + "node_modules/@commitlint/lint/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/lint/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load": { + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.4.tgz", + "integrity": "sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^18.4.4", + "@commitlint/execute-rule": "^18.4.4", + "@commitlint/resolve-extends": "^18.4.4", + "@commitlint/types": "^18.4.4", + "chalk": "^4.1.0", + "cosmiconfig": "^8.3.6", + "cosmiconfig-typescript-loader": "^5.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load/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==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": 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/@commitlint/load/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==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/load/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==", + "dev": true, + "optional": true + }, + "node_modules/@commitlint/load/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==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/load/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==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/message": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz", + "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/parse": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz", + "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==", + "dev": true, + "dependencies": { + "@commitlint/types": "^17.8.1", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/parse/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/parse/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/parse/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/parse/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/parse/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==", + "dev": true + }, + "node_modules/@commitlint/parse/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/parse/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/read": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz", + "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==", + "dev": true, + "dependencies": { + "@commitlint/top-level": "^17.8.1", + "@commitlint/types": "^17.8.1", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/read/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/read/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/read/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/read/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/read/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==", + "dev": true + }, + "node_modules/@commitlint/read/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@commitlint/read/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/read/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.4.tgz", + "integrity": "sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==", + "dev": true, + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^18.4.4", + "@commitlint/types": "^18.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz", + "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==", + "dev": true, + "dependencies": { + "@commitlint/ensure": "^17.8.1", + "@commitlint/message": "^17.8.1", + "@commitlint/to-lines": "^17.8.1", + "@commitlint/types": "^17.8.1", + "execa": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/rules/node_modules/@commitlint/types": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", + "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/rules/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/rules/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@commitlint/rules/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/rules/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==", + "dev": true + }, + "node_modules/@commitlint/rules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/rules/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz", + "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==", + "dev": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/top-level": { + "version": "17.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz", + "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/types": { + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.4.tgz", + "integrity": "sha512-/FykLtodD8gKs3+VNkAUwofu4LBHankclj+I8fB2jTRvG6PV7k/OUt4P+VbM7ip853qS4F0g7Z6hLNa6JeMcAQ==", + "dev": true, + "optional": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types/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==", + "dev": true, + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": 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/@commitlint/types/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==", + "dev": true, + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@commitlint/types/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==", + "dev": true, + "optional": true + }, + "node_modules/@commitlint/types/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==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/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==", + "dev": true, + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@datadog/pprof": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.2.0.tgz", + "integrity": "sha512-kOhWHCWB80djnMCr5KNKBAy1Ih/jK/PIj6yqnZwL1Wqni/h6IBPRUMhtIxcYJMRgsZVYrFXUV20AVXTZCzFokw==", + "hasInstallScript": true, + "dependencies": { + "delay": "^5.0.0", + "node-gyp-build": "<4.0", + "p-limit": "^3.1.0", + "pprof-format": "^2.0.7", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@dependents/detective-less": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.2.tgz", + "integrity": "sha512-1YUvQ+e0eeTWAHoN8Uz2x2U37jZs6IGutiIE5LXId7cxfUGhtZjzxE06FdUiuiRrW+UE0vNCdSNPH2lY4dQCOQ==", + "dev": true, + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz", + "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==", + "dev": true, + "dependencies": { + "boxen": "^5.1.2", + "chalk": "^2.4.1", + "commitizen": "^4.2.6", + "cz-conventional-changelog": "^3.3.0", + "inquirer": "^8.2.4", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ewoudenberg/difflib": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz", + "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==", + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", + "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.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": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/console/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/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==", + "dev": true + }, + "node_modules/@jest/console/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/core/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/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==", + "dev": true + }, + "node_modules/@jest/core/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/reporters/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/transform/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/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==", + "dev": true + }, + "node_modules/@jest/transform/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/@jest/types/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/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==", + "dev": true + }, + "node_modules/@jest/types/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@koa/router": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz", + "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==", + "dependencies": { + "debug": "^4.3.4", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.2.1" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/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/@mapbox/node-pre-gyp/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/@ndhoule/extend": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", + "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@pyroscope/nodejs": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.2.9.tgz", + "integrity": "sha512-pIw4pIqcNZTZxTUuV0OUI18UZEmx9lT2GaT75ny6FKVe2L1gxAwTCf5TKk8VsnUGY66buUkyaTHcTm7fy0BP/Q==", + "dependencies": { + "axios": "^0.28.0", + "debug": "^4.3.3", + "form-data": "^4.0.0", + "pprof": "^4.0.0", + "regenerator-runtime": "^0.13.11", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@pyroscope/nodejs/node_modules/axios": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", + "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@rudderstack/integrations-lib": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@rudderstack/integrations-lib/-/integrations-lib-0.2.10.tgz", + "integrity": "sha512-PVlRIxO9PVYpR+UNm1qQt85wo0wO9oX0PvoC9XqzYO+C0PfRvkMqac8ghA5ytqeCYNfSIye7DtidaII5ZoCQCA==", + "dependencies": { + "axios": "^1.4.0", + "axios-mock-adapter": "^1.22.0", + "crypto": "^1.0.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^17.1.0", + "get-value": "^3.0.1", + "handlebars": "^4.7.8", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "set-value": "^4.1.0", + "sha256": "^0.2.0", + "tslib": "^2.4.0", + "winston": "^3.11.0" + } + }, + "node_modules/@rudderstack/json-template-engine": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.18.0.tgz", + "integrity": "sha512-yArdj5flPrYbH3lq8xLixBGjt74WOv+TY0rrTF8gB7v6hFFBn7IrcsNcLDbN2SoLT604ycgMTMgIYcsAqAWWDg==" + }, + "node_modules/@rudderstack/workflow-engine": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.13.tgz", + "integrity": "sha512-NjT07YbaCZtWPHA2s7t2XbxxB1bVAeLtkCm+NhOg5Cxl4ceos7YZIo1oC4LeCb7QYmK0minxaPAnPhhzGTKNhQ==", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@rudderstack/json-template-engine": "^0.17.1", + "jsonata": "^2.0.5", + "lodash": "^4.17.21", + "object-sizeof": "^2.6.4", + "yaml": "^2.4.3" + } + }, + "node_modules/@rudderstack/workflow-engine/node_modules/@rudderstack/json-template-engine": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", + "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" + }, + "node_modules/@shopify/jest-koa-mocks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@shopify/jest-koa-mocks/-/jest-koa-mocks-5.1.1.tgz", + "integrity": "sha512-H1dRznXIK03ph1l/VDBQ5ef+A9kkEn3ikNfk70zwm9auW15MfHfY9gekE99VecxUSekws7sbFte0i8ltWCS4/g==", + "dependencies": { + "koa": "^2.13.4", + "node-mocks-http": "^1.11.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.16.tgz", + "integrity": "sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "dependencies": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", + "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", + "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", + "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", + "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", + "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", + "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.2", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz", + "integrity": "sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.12", + "@smithy/querystring-builder": "^2.0.16", + "@smithy/types": "^2.8.0", + "@smithy/util-base64": "^2.0.1", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", + "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", + "dependencies": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", + "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.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==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", + "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz", + "integrity": "sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.16", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/shared-ini-file-loader": "^2.2.8", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-middleware": "^2.0.9", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", + "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz", + "integrity": "sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz", + "integrity": "sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz", + "integrity": "sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ==", + "dependencies": { + "@smithy/property-provider": "^2.0.17", + "@smithy/shared-ini-file-loader": "^2.2.8", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz", + "integrity": "sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g==", + "dependencies": { + "@smithy/abort-controller": "^2.0.16", + "@smithy/protocol-http": "^3.0.12", + "@smithy/querystring-builder": "^2.0.16", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.17.tgz", + "integrity": "sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.12.tgz", + "integrity": "sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz", + "integrity": "sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA==", + "dependencies": { + "@smithy/types": "^2.8.0", + "@smithy/util-uri-escape": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz", + "integrity": "sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "dependencies": { + "@smithy/types": "^3.3.0" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz", + "integrity": "sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw==", + "dependencies": { + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } }, - "node_modules/@pyroscope/nodejs": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.2.9.tgz", - "integrity": "sha512-pIw4pIqcNZTZxTUuV0OUI18UZEmx9lT2GaT75ny6FKVe2L1gxAwTCf5TKk8VsnUGY66buUkyaTHcTm7fy0BP/Q==", + "node_modules/@smithy/signature-v4": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", "dependencies": { - "axios": "^0.28.0", - "debug": "^4.3.3", - "form-data": "^4.0.0", - "pprof": "^4.0.0", - "regenerator-runtime": "^0.13.11", - "source-map": "^0.7.3" + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=v18" + "node": ">=16.0.0" } }, - "node_modules/@pyroscope/nodejs/node_modules/axios": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", - "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", + "node_modules/@smithy/signature-v4/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@rudderstack/integrations-lib": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@rudderstack/integrations-lib/-/integrations-lib-0.2.10.tgz", - "integrity": "sha512-PVlRIxO9PVYpR+UNm1qQt85wo0wO9oX0PvoC9XqzYO+C0PfRvkMqac8ghA5ytqeCYNfSIye7DtidaII5ZoCQCA==", + "node_modules/@smithy/signature-v4/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "axios": "^1.4.0", - "axios-mock-adapter": "^1.22.0", - "crypto": "^1.0.1", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.1.0", - "get-value": "^3.0.1", - "handlebars": "^4.7.8", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "tslib": "^2.4.0", - "winston": "^3.11.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.1.tgz", + "integrity": "sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/protocol-http": "^3.0.12", + "@smithy/types": "^2.8.0", + "@smithy/util-stream": "^2.0.24", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", + "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.16.tgz", + "integrity": "sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA==", + "dependencies": { + "@smithy/querystring-parser": "^2.0.16", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.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==", + "dependencies": { + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@rudderstack/json-template-engine": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.18.0.tgz", - "integrity": "sha512-yArdj5flPrYbH3lq8xLixBGjt74WOv+TY0rrTF8gB7v6hFFBn7IrcsNcLDbN2SoLT604ycgMTMgIYcsAqAWWDg==" - }, - "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.13.tgz", - "integrity": "sha512-NjT07YbaCZtWPHA2s7t2XbxxB1bVAeLtkCm+NhOg5Cxl4ceos7YZIo1oC4LeCb7QYmK0minxaPAnPhhzGTKNhQ==", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", + "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.17.1", - "jsonata": "^2.0.5", - "lodash": "^4.17.21", - "object-sizeof": "^2.6.4", - "yaml": "^2.4.3" + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@rudderstack/workflow-engine/node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, - "node_modules/@rudderstack/workflow-engine/node_modules/@rudderstack/json-template-engine": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", - "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" - }, - "node_modules/@shopify/jest-koa-mocks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@shopify/jest-koa-mocks/-/jest-koa-mocks-5.1.1.tgz", - "integrity": "sha512-H1dRznXIK03ph1l/VDBQ5ef+A9kkEn3ikNfk70zwm9auW15MfHfY9gekE99VecxUSekws7sbFte0i8ltWCS4/g==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "koa": "^2.13.4", - "node-mocks-http": "^1.11.0" + "tslib": "^2.6.2" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=16.0.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=4" + "node": ">=16.0.0" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "type-detect": "4.0.8" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/abort-controller": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.16.tgz", - "integrity": "sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz", - "integrity": "sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz", - "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@smithy/util-base64": "^2.0.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/config-resolver": { - "version": "2.0.23", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.23.tgz", - "integrity": "sha512-XakUqgtP2YY8Mi+Nlif5BiqJgWdvfxJafSpOSQeCOMizu+PUhE4fBQSy6xFcR+eInrwVadaABNxoJyGUMn15ew==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/core": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.2.2.tgz", - "integrity": "sha512-uLjrskLT+mWb0emTR5QaiAIxVEU7ndpptDaVDrTwwhD+RjvHhjIiGQ3YL5jKk1a5VSDQUA2RGkXvJ6XKRcz6Dg==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.5.tgz", - "integrity": "sha512-VfvE6Wg1MUWwpTZFBnUD7zxvPhLY8jlHCzu6bCjlIYoWgXCDzZAML76IlZUEf45nib3rjehnFgg0s1rgsuN/bg==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.16.tgz", - "integrity": "sha512-umYh5pdCE9GHgiMAH49zu9wXWZKNHHdKPm/lK22WYISTjqu29SepmpWNmPiBLy/yUu4HFEGJHIFrDWhbDlApaw==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.16.tgz", - "integrity": "sha512-W+BdiN728R57KuZOcG0GczpIOEFf8S5RP/OdVH7T3FMCy8HU2bBU0vB5xZZR5c00VRdoeWrohNv3XlHoZuGRoA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.16.tgz", - "integrity": "sha512-8qrE4nh+Tg6m1SMFK8vlzoK+8bUFTlIhXidmmQfASMninXW3Iu0T0bI4YcIk4nLznHZdybQ0qGydIanvVZxzVg==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.16.tgz", - "integrity": "sha512-NRNQuOa6mQdFSkqzY0IV37swHWx0SEoKxFtUfdZvfv0AVQPlSw4N7E3kcRSCpnHBr1kCuWWirdDlWcjWuD81MA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.16.tgz", - "integrity": "sha512-ZyLnGaYQMLc75j9kKEVMJ3X6bdBE9qWxhZdTXM5RIltuytxJC3FaOhawBxjE+IL1enmWSIohHGZCm/pLwEliQA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz", - "integrity": "sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.17.tgz", - "integrity": "sha512-/mPpv1sRiRDdjO4zZuO8be6eeabmg5AVgKDfnmmqkpBtRyMGSJb968fjRuHt+FRAsIGywgIKJFmUUAYjhsi1oQ==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@smithy/chunked-blob-reader": "^2.0.0", - "@smithy/chunked-blob-reader-native": "^2.0.1", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-node": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.18.tgz", - "integrity": "sha512-gN2JFvAgnZCyDN9rJgcejfpK0uPPJrSortVVVVWsru9whS7eQey6+gj2eM5ln2i6rHNntIXzal1Fm9XOPuoaKA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.18.tgz", - "integrity": "sha512-OuFk+ITpv8CtxGjQcS8GA04faNycu9UMm6YobvQzjeEoXZ0dLF6sRfuzD+3S8RHPKpTyLuXtKG1+GiJycZ5TcA==", + "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.16.tgz", - "integrity": "sha512-apEHakT/kmpNo1VFHP4W/cjfeP9U0x5qvfsLJubgp7UM/gq4qYp0GbqdE7QhsjUaYvEnrftRqs7+YrtWreV0wA==", + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", + "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.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==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", "dependencies": { - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/md5-js": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.18.tgz", - "integrity": "sha512-bHwZ8/m6RbERQdVW5rJ2LzeW8qxfXv6Q/S7Fiudhso4pWRrksqLx3nsGZw7bmqqfN4zLqkxydxSa9+4c7s5zxg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" } }, - "node_modules/@smithy/middleware-content-length": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.18.tgz", - "integrity": "sha512-ZJ9uKPTfxYheTKSKYB+GCvcj+izw9WGzRLhjn8n254q0jWLojUzn7Vw0l4R/Gq7Wdpf/qmk/ptD+6CCXHNVCaw==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz", - "integrity": "sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { - "@smithy/middleware-serde": "^2.0.16", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-retry": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.26.tgz", - "integrity": "sha512-Qzpxo0U5jfNiq9iD38U3e2bheXwvTEX4eue9xruIvEgh+UKq6dKuGqcB66oBDV7TD/mfoJi9Q/VmaiqwWbEp7A==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/protocol-http": "^3.0.12", - "@smithy/service-error-classification": "^2.0.9", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", - "tslib": "^2.5.0", - "uuid": "^8.3.2" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/middleware-retry/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": ">=16.0.0" } }, - "node_modules/@smithy/middleware-serde": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz", - "integrity": "sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/middleware-stack": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz", - "integrity": "sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/node-config-provider": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz", - "integrity": "sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/node-http-handler": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz", - "integrity": "sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@smithy/abort-controller": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.17.tgz", - "integrity": "sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/protocol-http": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.12.tgz", - "integrity": "sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/querystring-builder": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz", - "integrity": "sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/querystring-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz", - "integrity": "sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/service-error-classification": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.9.tgz", - "integrity": "sha512-0K+8GvtwI7VkGmmInPydM2XZyBfIqLIbfR7mDQ+oPiz8mIinuHbV6sxOLdvX1Jv/myk7XTK9orgt3tuEpBu/zg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", "dependencies": { - "@smithy/types": "^2.8.0" + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz", - "integrity": "sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/signature-v4": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.19.tgz", - "integrity": "sha512-nwc3JihdM+kcJjtORv/n7qRHN2Kfh7S2RJI2qr8pz9UcY5TD8rSCRGQ0g81HgyS3jZ5X9U/L4p014P3FonBPhg==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.16", - "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/smithy-client": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.1.tgz", - "integrity": "sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/types": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", - "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/url-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.16.tgz", - "integrity": "sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { - "@smithy/querystring-parser": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-base64": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", - "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz", - "integrity": "sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.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==", + "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.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==", + "node_modules/@smithy/util-endpoints": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-config-provider": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.1.0.tgz", - "integrity": "sha512-S6V0JvvhQgFSGLcJeT1CBsaTR03MM8qTuxMH9WPCCddlSo2W0V5jIHimHtIQALMLEDPGQ0ROSRr/dU0O+mxiQg==", + "node_modules/@smithy/util-endpoints/node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", "dependencies": { - "tslib": "^2.5.0" + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.24.tgz", - "integrity": "sha512-TsP5mBuLgO2C21+laNG2nHYZEyUdkbGURv2tHvSuQQxLz952MegX95uwdxOY2jR2H4GoKuVRfdJq7w4eIjGYeg==", + "node_modules/@smithy/util-endpoints/node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.32", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.32.tgz", - "integrity": "sha512-d0S33dXA2cq1NyorVMroMrEtqKMr3MlyLITcfTBf9pXiigYiPMOtbSI7czHIfDbuVuM89Cg0urAgpt73QV9mPQ==", + "node_modules/@smithy/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", "dependencies": { - "@smithy/config-resolver": "^2.0.23", - "@smithy/credential-provider-imds": "^2.1.5", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/property-provider": "^2.0.17", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-endpoints": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.8.tgz", - "integrity": "sha512-l8zVuyZZ61IzZBYp5NWvsAhbaAjYkt0xg9R4xUASkg5SEeTT2meHOJwJHctKMFUXe4QZbn9fR2MaBYjP2119+w==", + "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-hex-encoding": { @@ -6253,16 +10194,27 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.9.tgz", - "integrity": "sha512-46BFWe9RqB6g7f4mxm3W3HlqknqQQmWHKlhoqSFZuGNuiDU5KqmpebMbvC3tjTlUkqn4xa2Z7s3Hwb0HNs5scw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", "dependencies": { - "@smithy/service-error-classification": "^2.0.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@smithy/util-stream": { @@ -6307,16 +10259,39 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.16.tgz", - "integrity": "sha512-5i4YONHQ6HoUWDd+X0frpxTXxSXgJhUFl+z0iMy/zpUmVeCQY2or3Vss6DzHKKMMQL4pmVHpQm9WayHDorFdZg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", + "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", "dependencies": { - "@smithy/abort-controller": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^3.1.1", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter/node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/@tsconfig/node10": { @@ -7250,9 +11225,9 @@ "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" }, "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -11360,17 +15335,17 @@ "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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], "dependencies": { @@ -19521,9 +23496,9 @@ "dev": true }, "node_modules/requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", + "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, "bin": { "r_js": "bin/r.js", From 26926c40fcbf4c146a37ac16c2cc7280e110a6e6 Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:22:55 +0530 Subject: [PATCH 168/201] fix: klaviyo jobs order (#3686) * fix: klaviyo jobs order * chore: update src/v0/destinations/klaviyo/transform.js --- src/v0/destinations/klaviyo/transform.js | 30 +++++++++++--- src/v0/destinations/klaviyo/transformV2.js | 22 +---------- .../destinations/klaviyo/router/data.ts | 39 ++++++++++++++++++- 3 files changed, 64 insertions(+), 27 deletions(-) diff --git a/src/v0/destinations/klaviyo/transform.js b/src/v0/destinations/klaviyo/transform.js index d5047a4220..d73dbca600 100644 --- a/src/v0/destinations/klaviyo/transform.js +++ b/src/v0/destinations/klaviyo/transform.js @@ -13,7 +13,7 @@ const { eventNameMapping, jsonNameMapping, } = require('./config'); -const { processRouterDestV2, processV2 } = require('./transformV2'); +const { processRouter: processRouterV2, processV2 } = require('./transformV2'); const { createCustomerProperties, subscribeUserToList, @@ -35,6 +35,7 @@ const { adduserIdFromExternalId, getSuccessRespEvents, handleRtTfSingleEventError, + groupEventsByType, flattenJson, isNewStatusCodesAccepted, } = require('../../util'); @@ -333,11 +334,11 @@ const getEventChunks = (event, subscribeRespList, nonSubscribeRespList) => { } }; -const processRouterDest = async (inputs, reqMetadata) => { +const processRouter = async (inputs, reqMetadata) => { const { destination } = inputs[0]; // This is used to switch to latest API version if (destination.Config?.apiVersion === 'v2') { - return processRouterDestV2(inputs, reqMetadata); + return processRouterV2(inputs, reqMetadata); } let batchResponseList = []; const batchErrorRespList = []; @@ -403,7 +404,26 @@ const processRouterDest = async (inputs, reqMetadata) => { batchResponseList = [...batchedSubscribeResponseList, ...nonSubscribeSuccessList]; - return [...batchResponseList, ...batchErrorRespList]; + return { successEvents: batchResponseList, errorEvents: batchErrorRespList }; +}; +const processRouterDest = async (inputs, reqMetadata) => { + /** + We are doing this to maintain the order of events not only fo transformation but for delivery as well + Job Id: 1 2 3 4 5 6 + Input : ['user1 track1', 'user1 identify 1', 'user1 track 2', 'user2 identify 1', 'user2 track 1', 'user1 track 3'] + Output after batching : [['user1 track1'],['user1 identify 1', 'user2 identify 1'], [ 'user1 track 2', 'user2 track 1', 'user1 track 3']] + Output after transformation: [1, [2,4], [3,5,6]] + */ + const inputsGroupedByType = groupEventsByType(inputs); + const respList = []; + const errList = []; + await Promise.all( + inputsGroupedByType.map(async (typedEventList) => { + const { successEvents, errorEvents } = await processRouter(typedEventList, reqMetadata); + respList.push(...successEvents); + errList.push(...errorEvents); + }), + ); + return [...respList, ...errList]; }; - module.exports = { process, processRouterDest }; diff --git a/src/v0/destinations/klaviyo/transformV2.js b/src/v0/destinations/klaviyo/transformV2.js index 6d04cb8644..bcb028bcea 100644 --- a/src/v0/destinations/klaviyo/transformV2.js +++ b/src/v0/destinations/klaviyo/transformV2.js @@ -22,7 +22,6 @@ const { handleRtTfSingleEventError, addExternalIdToTraits, adduserIdFromExternalId, - groupEventsByType, flattenJson, isDefinedAndNotNull, } = require('../../util'); @@ -242,23 +241,4 @@ const processRouter = (inputs, reqMetadata) => { return { successEvents: batchResponseList, errorEvents: batchErrorRespList }; }; -const processRouterDestV2 = (inputs, reqMetadata) => { - /** - We are doing this to maintain the order of events not only fo transformation but for delivery as well - Job Id: 1 2 3 4 5 6 - Input : ['user1 track1', 'user1 identify 1', 'user1 track 2', 'user2 identify 1', 'user2 track 1', 'user1 track 3'] - Output after batching : [['user1 track1'],['user1 identify 1', 'user2 identify 1'], [ 'user1 track 2', 'user2 track 1', 'user1 track 3']] - Output after transformation: [1, [2,4], [3,5,6]] - */ - const inputsGroupedByType = groupEventsByType(inputs); - const respList = []; - const errList = []; - inputsGroupedByType.forEach((typedEventList) => { - const { successEvents, errorEvents } = processRouter(typedEventList, reqMetadata); - respList.push(...successEvents); - errList.push(...errorEvents); - }); - return [...respList, ...errList]; -}; - -module.exports = { processV2, processRouterDestV2 }; +module.exports = { processV2, processRouter }; diff --git a/test/integrations/destinations/klaviyo/router/data.ts b/test/integrations/destinations/klaviyo/router/data.ts index 8e8c507f48..1b3f7f39ad 100644 --- a/test/integrations/destinations/klaviyo/router/data.ts +++ b/test/integrations/destinations/klaviyo/router/data.ts @@ -63,6 +63,43 @@ export const data: RouterTestData[] = [ list_id: 'XUepkK', subscriptions: [ { email: 'test@rudderstack.com', phone_number: '+12 345 678 900' }, + ], + }, + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [generateMetadata(3)], + batched: true, + statusCode: 200, + destination, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://a.klaviyo.com/api/profile-subscription-bulk-create-jobs', + headers: { + Authorization: 'Klaviyo-API-Key dummyPrivateApiKey', + 'Content-Type': 'application/json', + Accept: 'application/json', + revision: '2023-02-22', + }, + params: {}, + body: { + JSON: { + data: { + type: 'profile-subscription-bulk-create-job', + attributes: { + list_id: 'XUepkK', + subscriptions: [ { email: 'test@rudderstack.com', phone_number: '+12 345 578 900', @@ -120,7 +157,7 @@ export const data: RouterTestData[] = [ files: {}, }, ], - metadata: [generateMetadata(3), generateMetadata(2)], + metadata: [generateMetadata(2)], batched: true, statusCode: 200, destination, From b1d0d08b91273fd3b8fa2e87381c5ae090e1cb21 Mon Sep 17 00:00:00 2001 From: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:51:36 +0530 Subject: [PATCH 169/201] feat: include source attribute for identify messages for koala (#3667) * Include source attribute for identify messages (#3603) Add source attribute for compatibility purposes Co-authored-by: Sudip Paul <67197965+ItsSudip@users.noreply.github.com> * to pass the commit test --------- Co-authored-by: Gustavo Warmling Teixeira --- src/cdk/v2/destinations/koala/procWorkflow.yaml | 3 ++- test/integrations/destinations/koala/processor/data.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cdk/v2/destinations/koala/procWorkflow.yaml b/src/cdk/v2/destinations/koala/procWorkflow.yaml index 9ec0202b13..dc245f61c4 100644 --- a/src/cdk/v2/destinations/koala/procWorkflow.yaml +++ b/src/cdk/v2/destinations/koala/procWorkflow.yaml @@ -29,7 +29,8 @@ steps: identifies: [{ type: $.context.messageType, sent_at: .message.().({{{{$.getGenericPaths("timestamp")}}}}), - traits: koTraits + traits: koTraits, + source: "rudderstack-cloud" }] }; diff --git a/test/integrations/destinations/koala/processor/data.ts b/test/integrations/destinations/koala/processor/data.ts index b866353066..ec1fcd3477 100644 --- a/test/integrations/destinations/koala/processor/data.ts +++ b/test/integrations/destinations/koala/processor/data.ts @@ -159,6 +159,7 @@ export const data = [ { type: 'identify', sent_at: '2024-01-23T08:35:17.342Z', + source: 'rudderstack-cloud', traits: { FirstName: 'John', LastName: 'Doe', From f8cd6bda158654501555554ac0d284af8ba058fd Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Mon, 2 Sep 2024 11:32:09 +0530 Subject: [PATCH 170/201] feat: add support for headers to source transformation flows (#3683) * feat: add support for headers to source transformation flows * chore: add types for source trasform event --- src/controllers/source.ts | 1 + .../__tests__/nativeIntegration.test.ts | 13 +++++----- .../__tests__/postTransformation.test.ts | 26 ++++++++++++++----- src/services/source/nativeIntegration.ts | 10 ++++--- src/services/source/postTransformation.ts | 20 ++++++++++---- src/types/index.ts | 7 +++++ src/v0/util/index.js | 4 +-- .../data_scenarios/source/v1/successful.json | 3 ++- test/apitests/service.api.test.ts | 8 +++--- test/integrations/sources/pipedream/data.ts | 7 ++++- test/integrations/sources/segment/data.ts | 4 +++ 11 files changed, 74 insertions(+), 29 deletions(-) diff --git a/src/controllers/source.ts b/src/controllers/source.ts index bc4b77bd3d..230636f193 100644 --- a/src/controllers/source.ts +++ b/src/controllers/source.ts @@ -18,6 +18,7 @@ export class SourceController { version, events, ); + const resplist = await integrationService.sourceTransformRoutine( input, source, diff --git a/src/services/source/__tests__/nativeIntegration.test.ts b/src/services/source/__tests__/nativeIntegration.test.ts index a2a5af041e..2ef8129cdc 100644 --- a/src/services/source/__tests__/nativeIntegration.test.ts +++ b/src/services/source/__tests__/nativeIntegration.test.ts @@ -8,22 +8,23 @@ afterEach(() => { jest.clearAllMocks(); }); +const headers = { + 'x-rudderstack-source': 'test', +}; + describe('NativeIntegration Source Service', () => { test('sourceTransformRoutine - success', async () => { const sourceType = '__rudder_test__'; const version = 'v0'; const requestMetadata = {}; - const event = { message: { a: 'b' } }; + const event = { message: { a: 'b' }, headers }; const events = [event, event]; - const tevent = { anonymousId: 'test' } as RudderMessage; + const tevent = { anonymousId: 'test', context: { headers } } as RudderMessage; const tresp = { output: { batch: [tevent] }, statusCode: 200 } as SourceTransformationResponse; - const tresponse = [ - { output: { batch: [{ anonymousId: 'test' }] }, statusCode: 200 }, - { output: { batch: [{ anonymousId: 'test' }] }, statusCode: 200 }, - ]; + const tresponse = [tresp, tresp]; FetchHandler.getSourceHandler = jest.fn().mockImplementationOnce((d, v) => { expect(d).toEqual(sourceType); diff --git a/src/services/source/__tests__/postTransformation.test.ts b/src/services/source/__tests__/postTransformation.test.ts index e5efbe8194..ea8b463bf9 100644 --- a/src/services/source/__tests__/postTransformation.test.ts +++ b/src/services/source/__tests__/postTransformation.test.ts @@ -5,6 +5,10 @@ import { } from '../../../types/index'; import { SourcePostTransformationService } from '../../source/postTransformation'; +const headers = { + 'x-rudderstack-source': 'test', +}; + describe('Source PostTransformation Service', () => { test('should handleFailureEventsSource', async () => { const e = new Error('test error'); @@ -26,24 +30,32 @@ describe('Source PostTransformation Service', () => { output: { batch: [{ anonymousId: 'test' }] }, } as SourceTransformationResponse; - const result = SourcePostTransformationService.handleSuccessEventsSource(event); + const postProcessedEvents = { + outputToSource: {}, + output: { batch: [{ anonymousId: 'test', context: { headers } }] }, + } as SourceTransformationResponse; - expect(result).toEqual(event); + const result = SourcePostTransformationService.handleSuccessEventsSource(event, { headers }); + + expect(result).toEqual(postProcessedEvents); }); test('should return the events as batch in SourceTransformationResponse if it is an array', () => { + const headers = { + 'x-rudderstack-source': 'test', + }; const events = [{ anonymousId: 'test' }, { anonymousId: 'test' }] as RudderMessage[]; + const postProcessedEvents = events.map((event) => ({ ...event, context: { headers } })); + const result = SourcePostTransformationService.handleSuccessEventsSource(events, { headers }); - const result = SourcePostTransformationService.handleSuccessEventsSource(events); - - expect(result).toEqual({ output: { batch: events } }); + expect(result).toEqual({ output: { batch: postProcessedEvents } }); }); test('should return the event as batch in SourceTransformationResponse if it is a single object', () => { const event = { anonymousId: 'test' } as RudderMessage; - const result = SourcePostTransformationService.handleSuccessEventsSource(event); + const result = SourcePostTransformationService.handleSuccessEventsSource(event, { headers }); - expect(result).toEqual({ output: { batch: [event] } }); + expect(result).toEqual({ output: { batch: [{ ...event, context: { headers } }] } }); }); }); diff --git a/src/services/source/nativeIntegration.ts b/src/services/source/nativeIntegration.ts index a4f26d068a..5c89de7b92 100644 --- a/src/services/source/nativeIntegration.ts +++ b/src/services/source/nativeIntegration.ts @@ -4,6 +4,7 @@ import { ErrorDetailer, MetaTransferObject, RudderMessage, + SourceTransformationEvent, SourceTransformationResponse, } from '../../types/index'; import stats from '../../util/stats'; @@ -27,7 +28,7 @@ export class NativeIntegrationSourceService implements SourceService { } public async sourceTransformRoutine( - sourceEvents: NonNullable[], + sourceEvents: NonNullable[], sourceType: string, version: string, // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -38,9 +39,12 @@ export class NativeIntegrationSourceService implements SourceService { const respList: SourceTransformationResponse[] = await Promise.all( sourceEvents.map(async (sourceEvent) => { try { + const newSourceEvent = sourceEvent; + const { headers } = newSourceEvent; + delete newSourceEvent.headers; const respEvents: RudderMessage | RudderMessage[] | SourceTransformationResponse = - await sourceHandler.process(sourceEvent); - return SourcePostTransformationService.handleSuccessEventsSource(respEvents); + await sourceHandler.process(newSourceEvent); + return SourcePostTransformationService.handleSuccessEventsSource(respEvents, { headers }); } catch (error: FixMe) { stats.increment('source_transform_errors', { source: sourceType, diff --git a/src/services/source/postTransformation.ts b/src/services/source/postTransformation.ts index 20c815171b..c62f0ed713 100644 --- a/src/services/source/postTransformation.ts +++ b/src/services/source/postTransformation.ts @@ -1,4 +1,5 @@ import { MetaTransferObject, RudderMessage, SourceTransformationResponse } from '../../types/index'; +import { CommonUtils } from '../../util/common'; import { CatchErr } from '../../util/types'; import { generateErrorObject } from '../../v0/util'; import { ErrorReportingService } from '../errorReporting'; @@ -20,16 +21,25 @@ export class SourcePostTransformationService { public static handleSuccessEventsSource( events: RudderMessage | RudderMessage[] | SourceTransformationResponse, + context: { headers?: Record }, ): SourceTransformationResponse { // We send response back to the source // through outputToSource. This is not sent to gateway // We will not return array for events not meant for gateway - if (Object.prototype.hasOwnProperty.call(events, 'outputToSource')) { - return events as SourceTransformationResponse; + let sourceTransformationResponse = events as SourceTransformationResponse; + if (!Object.prototype.hasOwnProperty.call(events, 'outputToSource')) { + const eventsBatch = CommonUtils.toArray(events); + sourceTransformationResponse = { + output: { batch: eventsBatch }, + } as SourceTransformationResponse; } - if (Array.isArray(events)) { - return { output: { batch: events } } as SourceTransformationResponse; + + if (sourceTransformationResponse.output) { + sourceTransformationResponse.output.batch.forEach((event) => { + const newEvent = event as RudderMessage; + newEvent.context = { ...event.context, ...context }; + }); } - return { output: { batch: [events] } } as SourceTransformationResponse; + return sourceTransformationResponse; } } diff --git a/src/types/index.ts b/src/types/index.ts index 150758363e..7aa6bd8ebf 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -185,6 +185,12 @@ type RouterTransformationResponse = { statTags?: object; }; +type SourceTransformationEvent = { + headers?: Record; + query_params?: Record; + [key: string]: any; +}; + type SourceTransformationOutput = { batch: RudderMessage[]; }; @@ -360,6 +366,7 @@ export { RouterTransformationRequestData, RouterTransformationResponse, RudderMessage, + SourceTransformationEvent, SourceTransformationResponse, UserDeletionRequest, UserDeletionResponse, diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 7e9b4f0c3e..db84fb0627 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -1168,7 +1168,7 @@ const getDestinationExternalIDInfoForRetl = (message, destination) => { if (externalIdArray) { externalIdArray.forEach((extIdObj) => { const { type, id } = extIdObj; - if (type && type.includes(`${destination}-`)) { + if (type?.includes(`${destination}-`)) { destinationExternalId = id; objectType = type.replace(`${destination}-`, ''); identifierType = extIdObj.identifierType; @@ -1195,7 +1195,7 @@ const getDestinationExternalIDObjectForRetl = (message, destination) => { // some stops the execution when the element is found externalIdArray.some((extIdObj) => { const { type } = extIdObj; - if (type && type.includes(`${destination}-`)) { + if (type?.includes(`${destination}-`)) { obj = extIdObj; return true; } diff --git a/test/apitests/data_scenarios/source/v1/successful.json b/test/apitests/data_scenarios/source/v1/successful.json index c42d723800..bb93e72fcd 100644 --- a/test/apitests/data_scenarios/source/v1/successful.json +++ b/test/apitests/data_scenarios/source/v1/successful.json @@ -29,7 +29,8 @@ "fulfillment_id": "1234567890", "status": "pending" } - } + }, + "context": {} } ] } diff --git a/test/apitests/service.api.test.ts b/test/apitests/service.api.test.ts index b4ed8d3b09..30d2c568a6 100644 --- a/test/apitests/service.api.test.ts +++ b/test/apitests/service.api.test.ts @@ -359,8 +359,8 @@ describe('Api tests with a mock source/destination', () => { .send(getData()); const expected = [ - { output: { batch: [{ event: 'clicked', type: 'track' }] } }, - { output: { batch: [{ event: 'clicked', type: 'track' }] } }, + { output: { batch: [{ event: 'clicked', type: 'track', context: {} }] } }, + { output: { batch: [{ event: 'clicked', type: 'track', context: {} }] } }, ]; expect(response.status).toEqual(200); @@ -398,8 +398,8 @@ describe('Api tests with a mock source/destination', () => { .send(getData()); const expected = [ - { output: { batch: [{ event: 'clicked', type: 'track' }] } }, - { output: { batch: [{ event: 'clicked', type: 'track' }] } }, + { output: { batch: [{ event: 'clicked', type: 'track', context: {} }] } }, + { output: { batch: [{ event: 'clicked', type: 'track', context: {} }] } }, ]; expect(response.status).toEqual(200); diff --git a/test/integrations/sources/pipedream/data.ts b/test/integrations/sources/pipedream/data.ts index 4be5621f0c..a4b5c33e0d 100644 --- a/test/integrations/sources/pipedream/data.ts +++ b/test/integrations/sources/pipedream/data.ts @@ -199,6 +199,7 @@ export const data = [ { userId: '1', originalTimestamp: '2020-09-28T19:53:31.900Z', + context: {}, traits: { firstName: 'John', lastName: 'doe', @@ -336,7 +337,11 @@ export const data = [ status: 200, body: [ { - output: { batch: [{ type: 'alias', previousId: 'name@surname.com', userId: '12345' }] }, + output: { + batch: [ + { type: 'alias', previousId: 'name@surname.com', userId: '12345', context: {} }, + ], + }, }, ], }, diff --git a/test/integrations/sources/segment/data.ts b/test/integrations/sources/segment/data.ts index 8c66abd252..780a65c119 100644 --- a/test/integrations/sources/segment/data.ts +++ b/test/integrations/sources/segment/data.ts @@ -124,6 +124,7 @@ export const data: SrcTestCaseData[] = [ elapsedTime: null, session_id: '**************_***************', }, + context: {}, hostname: '************.us.auth0.com', user_id: 'auth0|************************', user_name: 'example@test.com', @@ -145,6 +146,7 @@ export const data: SrcTestCaseData[] = [ { date: '2020-07-10T07:43:09.620Z', type: 'seacft', + context: {}, description: '', connection_id: '', client_id: '********************************', @@ -176,6 +178,7 @@ export const data: SrcTestCaseData[] = [ client_id: '********************************', client_name: 'My App', ip: '47.15.6.58', + context: {}, user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', details: { prompts: [], @@ -207,6 +210,7 @@ export const data: SrcTestCaseData[] = [ client_id: '********************************', client_name: 'My App', ip: '47.15.6.58', + context: {}, user_agent: 'Chrome Mobile 69.0.3497 / Android 0.0.0', details: { prompts: [], From c024eeeff49d9dc9b37fedf3f0dd4843ba2625cf Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 2 Sep 2024 06:09:11 +0000 Subject: [PATCH 171/201] chore(release): 1.77.0 --- CHANGELOG.md | 20 ++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ec77cc89e..bc517256bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,26 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.77.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.76.1...v1.77.0) (2024-09-02) + + +### Features + +* add support for customerio source email subscribed event ([#3679](https://github.com/rudderlabs/rudder-transformer/issues/3679)) ([4cb2799](https://github.com/rudderlabs/rudder-transformer/commit/4cb27998f2c1e2a2a7b535666a54621fd1d43ef0)) +* add support for headers to source transformation flows ([#3683](https://github.com/rudderlabs/rudder-transformer/issues/3683)) ([f8cd6bd](https://github.com/rudderlabs/rudder-transformer/commit/f8cd6bda158654501555554ac0d284af8ba058fd)) +* include source attribute for identify messages for koala ([#3667](https://github.com/rudderlabs/rudder-transformer/issues/3667)) ([b1d0d08](https://github.com/rudderlabs/rudder-transformer/commit/b1d0d08b91273fd3b8fa2e87381c5ae090e1cb21)), closes [#3603](https://github.com/rudderlabs/rudder-transformer/issues/3603) +* webhook v2 ([#3651](https://github.com/rudderlabs/rudder-transformer/issues/3651)) ([e21ebd0](https://github.com/rudderlabs/rudder-transformer/commit/e21ebd0085aadfe61cb6442da6689e32be33f52f)) + + +### Bug Fixes + +* adding a new condition for retrying the function creation in python transformation ([#3684](https://github.com/rudderlabs/rudder-transformer/issues/3684)) ([9fb463e](https://github.com/rudderlabs/rudder-transformer/commit/9fb463e7661c225077b11a0196b3190c15741058)) +* handle trade desk null, undefined fields ([#3661](https://github.com/rudderlabs/rudder-transformer/issues/3661)) ([2d8b315](https://github.com/rudderlabs/rudder-transformer/commit/2d8b315a5f2e681bc256128032e4ee066f9177fc)) +* klaviyo jobs order ([#3686](https://github.com/rudderlabs/rudder-transformer/issues/3686)) ([26926c4](https://github.com/rudderlabs/rudder-transformer/commit/26926c40fcbf4c146a37ac16c2cc7280e110a6e6)) +* login using docker creds on the node to allow to pull the desired image ([#3682](https://github.com/rudderlabs/rudder-transformer/issues/3682)) ([fc6bcf7](https://github.com/rudderlabs/rudder-transformer/commit/fc6bcf7eda690d82cfe2d381753948058efbcd3d)) +* npm vulnerabilities ([c305974](https://github.com/rudderlabs/rudder-transformer/commit/c3059746f25677eae739468c3a4b7496aa82f4da)) +* npm vulnerabilities ([#3695](https://github.com/rudderlabs/rudder-transformer/issues/3695)) ([494df08](https://github.com/rudderlabs/rudder-transformer/commit/494df08bc992632ebc405c88a3f23ed5e1262553)) + ### [1.76.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.76.0...v1.76.1) (2024-08-29) diff --git a/package-lock.json b/package-lock.json index fe1c37c4ca..489739879b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.76.1", + "version": "1.77.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.76.1", + "version": "1.77.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index af9ef6b4f4..f51501ff91 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.76.1", + "version": "1.77.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 31d57e22f7a5e8c36949169af037949dd75fe81a Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Tue, 3 Sep 2024 00:21:29 +0530 Subject: [PATCH 172/201] chore: handle other error use-cases in reddit (#3692) * chore: add logger for reddit in case of non 401 status * chore: handle other error use-cases in reddit * chore: fix test for reddit * chore: add test --------- Co-authored-by: Sai Sankeerth --- src/v0/destinations/reddit/networkHandler.js | 15 ++++- .../reddit/dataDelivery/business.ts | 58 ++++++++++++++++++- .../destinations/reddit/network.ts | 56 ++++++++++++++++++ 3 files changed, 124 insertions(+), 5 deletions(-) diff --git a/src/v0/destinations/reddit/networkHandler.js b/src/v0/destinations/reddit/networkHandler.js index e691255a26..7c9b32eaa4 100644 --- a/src/v0/destinations/reddit/networkHandler.js +++ b/src/v0/destinations/reddit/networkHandler.js @@ -1,10 +1,13 @@ -const { RetryableError } = require('@rudderstack/integrations-lib'); +const { RetryableError, TAG_NAMES, NetworkError } = require('@rudderstack/integrations-lib'); const isString = require('lodash/isString'); const { prepareProxyRequest, proxyRequest } = require('../../../adapters/network'); const { isHttpStatusSuccess } = require('../../util/index'); const { REFRESH_TOKEN } = require('../../../adapters/networkhandler/authConstants'); -const { processAxiosResponse } = require('../../../adapters/utils/networkUtils'); +const { + processAxiosResponse, + getDynamicErrorType, +} = require('../../../adapters/utils/networkUtils'); const redditRespHandler = (destResponse) => { const { status, response } = destResponse; @@ -29,6 +32,14 @@ const redditRespHandler = (destResponse) => { authErrorCategory, ); } + throw new NetworkError( + `${JSON.stringify(response)} during reddit response transformation`, + status, + { + [TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(status), + }, + destResponse, + ); }; const responseHandler = (responseParams) => { const { destinationResponse } = responseParams; diff --git a/test/integrations/destinations/reddit/dataDelivery/business.ts b/test/integrations/destinations/reddit/dataDelivery/business.ts index 2c4714ef13..b48004a2ed 100644 --- a/test/integrations/destinations/reddit/dataDelivery/business.ts +++ b/test/integrations/destinations/reddit/dataDelivery/business.ts @@ -103,7 +103,7 @@ export const testScenariosForV1API = [ body: generateProxyV1Payload( { ...commonRequestParameters, - endpoint: 'https://dfareporting.googleapis.com/test_url_for_valid_request', + endpoint: 'https://ads-api.reddit.com/api/v2.0/conversions/events/a2_fsddXXXfsfd', }, [generateMetadata(1)], ), @@ -119,10 +119,62 @@ export const testScenariosForV1API = [ response: [ { metadata: generateMetadata(1), - statusCode: 500, + statusCode: 200, }, ], - status: 500, + status: 200, + }, + }, + }, + }, + }, + { + id: 'reddit_v1_scenario_2', + name: 'reddit', + description: + '[Proxy v1 API] :: Test for a valid request with a failed 403 response from the destination', + scenario: 'Business', + feature: 'dataDelivery', + module: 'destination', + version: 'v1', + input: { + request: { + body: generateProxyV1Payload( + { + ...commonRequestParameters, + endpoint: 'https://ads-api.reddit.com/api/v2.0/conversions/events/403_event', + }, + [generateMetadata(1)], + ), + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: { + message: + '{"success":false,"error":{"reason":"UNAUTHORIZED","explanation":"JSON error unexpected type number on field events event_metadata value"}} during reddit response transformation', + response: [ + { + metadata: generateMetadata(1), + statusCode: 403, + error: + '{"success":false,"error":{"reason":"UNAUTHORIZED","explanation":"JSON error unexpected type number on field events event_metadata value"}}', + }, + ], + statTags: { + destType: 'REDDIT', + destinationId: 'default-destinationId', + errorCategory: 'network', + errorType: 'aborted', + feature: 'dataDelivery', + implementation: 'native', + module: 'destination', + workspaceId: 'default-workspaceId', + }, + status: 403, }, }, }, diff --git a/test/integrations/destinations/reddit/network.ts b/test/integrations/destinations/reddit/network.ts index 562c8e95ad..80c18c00a0 100644 --- a/test/integrations/destinations/reddit/network.ts +++ b/test/integrations/destinations/reddit/network.ts @@ -154,4 +154,60 @@ export const networkCallsData = [ statusText: 'Unauthorized', }, }, + { + httpReq: { + url: 'https://ads-api.reddit.com/api/v2.0/conversions/events/403_event', + data: { + events: [ + { + event_at: '2019-10-14T09:03:17.562Z', + event_type: { + tracking_type: 'Purchase', + }, + user: { + aaid: 'c12d34889302d3c656b5699fa9190b51c50d6f62fce57e13bd56b503d66c487a', + email: 'ac144532d9e4efeab19475d9253a879173ea12a3d2238d1cb8a332a7b3a105f2', + external_id: '7b023241a3132b792a5a33915a5afb3133cbb1e13d72879689bf6504de3b036d', + ip_address: 'e80bd55a3834b7c2a34ade23c7ecb54d2a49838227080f50716151e765a619db', + user_agent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + screen_dimensions: {}, + }, + event_metadata: { + item_count: 3, + products: [ + { + id: '123', + name: 'Monopoly', + category: 'Games', + }, + { + id: '345', + name: 'UNO', + category: 'Games', + }, + ], + }, + }, + ], + }, + params: { destination: 'reddit' }, + headers: { + Authorization: 'Bearer dummyAccessToken', + 'Content-Type': 'application/json', + }, + method: 'POST', + }, + httpRes: { + data: { + success: false, + error: { + reason: 'UNAUTHORIZED', + explanation: 'JSON error unexpected type number on field events event_metadata value', + }, + }, + status: 403, + statusText: 'Unauthorized', + }, + }, ]; From b2f56540148066a40770e1506faadb4f3f5a296b Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Tue, 3 Sep 2024 10:41:36 +0530 Subject: [PATCH 173/201] feat: add util for applying json string template (#3699) --- src/v0/util/index.js | 6 ++++++ src/v0/util/index.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/v0/util/index.js b/src/v0/util/index.js index db84fb0627..e1fe8ee942 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -2268,6 +2268,11 @@ const validateEventAndLowerCaseConversion = (event, isMandatory, convertToLowerC const applyCustomMappings = (message, mappings) => JsonTemplateEngine.createAsSync(mappings, { defaultPathType: PathType.JSON }).evaluate(message); +const applyJSONStringTemplate = (message, template) => + JsonTemplateEngine.createAsSync(template.replace(/{{/g, '${').replace(/}}/g, '}'), { + defaultPathType: PathType.JSON, + }).evaluate(message); + /** * Gets url path omitting the hostname & protocol * @@ -2293,6 +2298,7 @@ module.exports = { addExternalIdToTraits, adduserIdFromExternalId, applyCustomMappings, + applyJSONStringTemplate, base64Convertor, batchMultiplexedEvents, checkEmptyStringInarray, diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js index 31ea490b25..a8d13ab873 100644 --- a/src/v0/util/index.test.js +++ b/src/v0/util/index.test.js @@ -9,6 +9,7 @@ const { combineBatchRequestsWithSameJobIds, validateEventAndLowerCaseConversion, } = require('./index'); +const exp = require('constants'); // Names of the utility functions to test const functionNames = [ @@ -691,6 +692,29 @@ describe('extractCustomFields', () => { }); }); +describe('applyJSONStringTemplate', () => { + it('should apply JSON string template to the payload', () => { + const payload = { + domain: 'abc', + }; + const template = '`https://{{$.domain}}.com`'; + + const result = utilities.applyJSONStringTemplate(payload, template); + expect(result).toEqual('https://abc.com'); + }); + + it('should apply JSON string template to the payload multiple times', () => { + const payload = { + domain: 'abc', + subdomain: 'def', + }; + const template = '`https://{{$.subdomain}}.{{$.domain}}.com`'; + + const result = utilities.applyJSONStringTemplate(payload, template); + expect(result).toEqual('https://def.abc.com'); + }); +}); + describe('get relative path from url', () => { test('valid url', () => { expect(utilities.getRelativePathFromURL('https://google.com/a/b/c')).toEqual('/a/b/c'); From 441fb57a537592cc1cc45dc8f31fa8be98e18320 Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Tue, 3 Sep 2024 12:02:15 +0530 Subject: [PATCH 174/201] fix: error messages in gaec (#3702) --- src/cdk/v2/destinations/webhook_v2/utils.js | 2 +- .../google_adwords_enhanced_conversions/networkHandler.js | 4 +--- .../dataDelivery/business.ts | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/cdk/v2/destinations/webhook_v2/utils.js b/src/cdk/v2/destinations/webhook_v2/utils.js index bf0f2179f1..8e04b59ec0 100644 --- a/src/cdk/v2/destinations/webhook_v2/utils.js +++ b/src/cdk/v2/destinations/webhook_v2/utils.js @@ -52,7 +52,7 @@ const excludeMappedFields = (payload, mapping) => { // Traverse to the parent of the key to be removed keys.slice(0, -1).forEach((key) => { - if (current && current[key]) { + if (current?.[key]) { current = current[key]; } else { current = null; diff --git a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js index d91c79e186..a2795a1671 100644 --- a/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js +++ b/src/v0/destinations/google_adwords_enhanced_conversions/networkHandler.js @@ -127,9 +127,7 @@ const responseHandler = (responseParams) => { // Ref - https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto if (partialFailureError && partialFailureError.code !== 0) { throw new NetworkError( - `[Google Adwords Enhanced Conversions]:: partialFailureError - ${JSON.stringify( - partialFailureError, - )}`, + JSON.stringify(partialFailureError), 400, { [tags.TAG_NAMES.ERROR_TYPE]: getDynamicErrorType(400), diff --git a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts index a5bbaa05c5..d318066e7d 100644 --- a/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts +++ b/test/integrations/destinations/google_adwords_enhanced_conversions/dataDelivery/business.ts @@ -176,7 +176,7 @@ export const testScenariosForV0API = [ 'Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]', }, message: - '[Google Adwords Enhanced Conversions]:: partialFailureError - {"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', + '{"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', statTags: expectedStatTags, status: 400, }, @@ -262,11 +262,11 @@ export const testScenariosForV1API: ProxyV1TestData[] = [ body: { output: { message: - '[Google Adwords Enhanced Conversions]:: partialFailureError - {"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', + '{"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', response: [ { error: - '[Google Adwords Enhanced Conversions]:: partialFailureError - {"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', + '{"code":3,"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again., at conversion_adjustments[0]","details":[{"@type":"type.googleapis.com/google.ads.googleads.v15.errors.GoogleAdsFailure","errors":[{"errorCode":{"conversionAdjustmentUploadError":"CONVERSION_ALREADY_ENHANCED"},"message":"Conversion already has enhancements with the same Order ID and conversion action. Make sure your data is correctly configured and try again.","location":{"fieldPathElements":[{"fieldName":"conversion_adjustments","index":0}]}}]}]}', metadata: generateMetadata(1), statusCode: 400, }, From 675ecf4f615ac32fd15385b6065bf09f4ce6a4c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:14:20 +0530 Subject: [PATCH 175/201] chore(deps): bump slackapi/slack-github-action from 1.25.0 to 1.27.0 (#3698) Bumps [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action) from 1.25.0 to 1.27.0. - [Release notes](https://github.com/slackapi/slack-github-action/releases) - [Commits](https://github.com/slackapi/slack-github-action/compare/v1.25.0...v1.27.0) --- updated-dependencies: - dependency-name: slackapi/slack-github-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- .github/workflows/publish-new-release.yml | 2 +- .github/workflows/slack-notify.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-new-release.yml b/.github/workflows/publish-new-release.yml index 9897190575..ee9f28e235 100644 --- a/.github/workflows/publish-new-release.yml +++ b/.github/workflows/publish-new-release.yml @@ -89,7 +89,7 @@ jobs: - name: Notify Slack Channel id: slack - uses: slackapi/slack-github-action@v1.25.0 + uses: slackapi/slack-github-action@v1.27.0 continue-on-error: true env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} diff --git a/.github/workflows/slack-notify.yml b/.github/workflows/slack-notify.yml index bb5cac82f1..1c5dbdbc06 100644 --- a/.github/workflows/slack-notify.yml +++ b/.github/workflows/slack-notify.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@v4.1.1 - name: notify - uses: slackapi/slack-github-action@v1.25.0 + uses: slackapi/slack-github-action@v1.27.0 continue-on-error: true env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} From 59e5f5f0952e9c19ff0f723b7ec0b597bcea1f86 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Tue, 3 Sep 2024 13:23:36 +0530 Subject: [PATCH 176/201] [Snyk] Upgrade @aws-sdk/lib-storage from 3.485.0 to 3.600.0 (#3565) fix: upgrade @aws-sdk/lib-storage from 3.485.0 to 3.600.0 Snyk has created this PR to upgrade @aws-sdk/lib-storage from 3.485.0 to 3.600.0. See this package in npm: @aws-sdk/lib-storage See this project in Snyk: https://app.snyk.io/org/sandeep-L8FvsjCG7mBBqonjSmN48c/project/4b0f037e-0dab-4719-aeee-b46d2ae82119?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Sai Sankeerth --- package-lock.json | 15088 +++++++++++++------------------------------- package.json | 2 +- 2 files changed, 4319 insertions(+), 10771 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe1c37c4ca..1ef33ae074 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", - "@aws-sdk/lib-storage": "^3.474.0", + "@aws-sdk/lib-storage": "^3.600.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", @@ -122,91 +122,24 @@ "typescript": "^5.0.4" } }, - "../jsonpath": { - "name": "rs-jsonpath", - "version": "1.1.2", - "extraneous": true, - "license": "MIT", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - }, - "devDependencies": { - "grunt": "0.4.5", - "grunt-browserify": "3.8.0", - "grunt-cli": "0.1.13", - "grunt-contrib-uglify": "0.9.1", - "jison": "0.4.13", - "jscs": "1.10.0", - "jshint": "2.6.0", - "mocha": "2.1.0" - } - }, - "../rudder-integrations-lib": { - "name": "@rudderstack/integrations-lib", - "version": "0.2.9", - "extraneous": true, - "license": "MIT", - "dependencies": { - "axios": "^1.4.0", - "axios-mock-adapter": "^1.22.0", - "crypto": "^1.0.1", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.1.0", - "get-value": "^3.0.1", - "handlebars": "^4.7.8", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "tslib": "^2.4.0", - "winston": "^3.11.0" - }, - "devDependencies": { - "@commitlint/config-conventional": "^18.5.0", - "@types/get-value": "^3.0.3", - "@types/jest": "^29.5.4", - "@types/lodash": "^4.14.195", - "@types/node": "^20.3.3", - "@types/set-value": "^4.0.1", - "@types/sha256": "^0.2.0", - "@typescript-eslint/eslint-plugin": "^6.20.0", - "@typescript-eslint/parser": "^6.20.0", - "commitlint": "^18.6.0", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", - "husky": "^8.0.0", - "jest": "^29.4.3", - "pre-commit": "^1.2.2", - "prettier": "^2.8.4", - "ts-jest": "^29.0.5", - "ts-node": "^10.9.1", - "typescript": "^5.1.6" - } - }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@amplitude/ua-parser-js": { "version": "0.7.24", - "resolved": "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz", - "integrity": "sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -217,9 +150,8 @@ }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz", - "integrity": "sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==", "dev": true, + "license": "MIT", "dependencies": { "@jsdevtools/ono": "^7.1.3", "call-me-maybe": "^1.0.1", @@ -228,18 +160,16 @@ }, "node_modules/@apidevtools/json-schema-ref-parser/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, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@apidevtools/json-schema-ref-parser/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, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -250,19 +180,16 @@ }, "node_modules/@apidevtools/openapi-schemas": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", - "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/@apidevtools/swagger-cli": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.4.tgz", - "integrity": "sha512-hdDT3B6GLVovCsRZYDi3+wMcB1HfetTU20l2DC8zD3iFRNMC6QNAZG5fo/6PYeHWBEv7ri4MvnlKodhNB0nt7g==", - "deprecated": "This package has been abandoned. Please switch to using the actively maintained @redocly/cli", "dev": true, + "license": "MIT", "dependencies": { "@apidevtools/swagger-parser": "^10.0.1", "chalk": "^4.1.0", @@ -278,9 +205,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -293,27 +219,24 @@ }, "node_modules/@apidevtools/swagger-cli/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, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@apidevtools/swagger-cli/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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@apidevtools/swagger-cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -327,9 +250,8 @@ }, "node_modules/@apidevtools/swagger-cli/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -338,9 +260,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -350,15 +271,13 @@ }, "node_modules/@apidevtools/swagger-cli/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -369,18 +288,16 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@apidevtools/swagger-cli/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, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -391,9 +308,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -403,9 +319,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -418,9 +333,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -430,9 +344,8 @@ }, "node_modules/@apidevtools/swagger-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -442,9 +355,8 @@ }, "node_modules/@apidevtools/swagger-cli/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -456,15 +368,13 @@ }, "node_modules/@apidevtools/swagger-cli/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@apidevtools/swagger-cli/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -484,9 +394,8 @@ }, "node_modules/@apidevtools/swagger-cli/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -497,15 +406,13 @@ }, "node_modules/@apidevtools/swagger-methods": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@apidevtools/swagger-parser": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz", - "integrity": "sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==", "dev": true, + "license": "MIT", "dependencies": { "@apidevtools/json-schema-ref-parser": "9.0.6", "@apidevtools/openapi-schemas": "^2.1.0", @@ -521,8 +428,7 @@ }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -534,8 +440,7 @@ }, "node_modules/@aws-crypto/crc32c": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -544,8 +449,7 @@ }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -557,8 +461,7 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -571,8 +474,7 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -584,16 +486,14 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" } }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -602,8 +502,7 @@ }, "node_modules/@aws-sdk/client-cognito-identity": { "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.637.0.tgz", - "integrity": "sha512-391mca6yEfXVcSOTLGcxzlT0QCFfvoymLlVHfb//bzl806UUTq12cR2k+AnaCKLj+QSejmA7n6lwZWADm00Fvg==", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", @@ -651,290 +550,373 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@aws-sdk/client-personalize": { + "version": "3.642.0", + "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@aws-sdk/client-s3": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/middleware-ssec": "3.609.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-blob-browser": "^3.1.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/hash-stream-node": "^3.1.2", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/md5-js": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": { + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -943,15 +925,13 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize": { - "version": "3.642.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize/-/client-personalize-3.642.0.tgz", - "integrity": "sha512-zhSOXSzGqVS3AfMs2ganoRvQz369oaRHyYZvLMC6kdvX4HlLDz9ARdd+maIs6dag3Ms1yCBQzpfcMIradmXJgA==", + "node_modules/@aws-sdk/client-sts": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", "@aws-sdk/core": "3.635.0", "@aws-sdk/credential-provider-node": "3.637.0", "@aws-sdk/middleware-host-header": "3.620.0", @@ -994,63 +974,64 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@aws-sdk/core": { + "version": "3.635.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", + "@smithy/core": "^2.4.0", "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/client-cognito-identity": "3.637.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1058,11 +1039,12 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1070,40 +1052,61 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1111,11 +1114,13 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1123,36 +1128,56 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@aws-sdk/credential-providers": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/client-cognito-identity": "3.637.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", + "@aws-sdk/credential-provider-cognito-identity": "3.637.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1160,60 +1185,85 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@aws-sdk/lib-storage": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.637.0.tgz", + "integrity": "sha512-HiNGOP4a1QrCWwO1joKw4mCp19nLXoF9K52PislBaYDI35IlHC3DP6MeOg5zmElwtL1GtEHFBy5olfPWPsLyLg==", "dependencies": { + "@smithy/abort-controller": "^3.1.1", "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.637.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.620.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.620.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.620.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-base64": { + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -1222,22 +1272,23 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-hex-encoding": { + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1245,172 +1296,117 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", + "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.637.0.tgz", - "integrity": "sha512-y6UC94fsMvhKbf0dzfnjVP1HePeGjplfcYfilZU1COIJLyTkMcUv4XcT4I407CGIrvgEafONHkiC09ygqUauNA==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.635.0", + "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-bucket-endpoint": "3.620.0", - "@aws-sdk/middleware-expect-continue": "3.620.0", - "@aws-sdk/middleware-flexible-checksums": "3.620.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-location-constraint": "3.609.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.635.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@aws-sdk/xml-builder": "3.609.0", - "@smithy/config-resolver": "^3.0.5", + "@aws-sdk/util-arn-parser": "3.568.0", "@smithy/core": "^2.4.0", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-blob-browser": "^3.1.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/hash-stream-node": "^3.1.2", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-config-provider": "^3.0.0", "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", "@smithy/util-stream": "^3.1.3", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1418,25 +1414,29 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.635.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1444,25 +1444,26 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@aws-sdk/types": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -1471,5917 +1472,712 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-endpoints": "^2.0.5", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@aws-sdk/xml-builder": { + "version": "3.609.0", + "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" + "node_modules/@babel/generator/node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=16.0.0" + "node": ">=4" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "@babel/types": "^7.22.15" }, "engines": { - "node": ">=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", - "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz", - "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", - "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", - "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", - "dependencies": { - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.637.0.tgz", - "integrity": "sha512-9qK1mF+EThtv3tsL1C/wb9MpWctJSkzjrLTFj+0Rtk8VYm6DlGepo/I6a2x3SeDmdBfHAFSrKFU39GqWDp1mwQ==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.637.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", - "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", - "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", - "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.637.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", - "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", - "dependencies": { - "@aws-sdk/client-sso": "3.637.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.637.0.tgz", - "integrity": "sha512-yW1scL3Z7JsrTrmhjyZsB6tsMJ49UCO42BGlNWZAW+kN1vNJ+qbv6XYQJWR4gjpuD2rdmtGcEawcgllE2Bmigw==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.637.0", - "@aws-sdk/client-sso": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", - "@aws-sdk/credential-provider-cognito-identity": "3.637.0", - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.637.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.485.0.tgz", - "integrity": "sha512-d/DppujsMu2zg2K95wS2OZ+x+wY41OeZL0duROKZRzNtPyYzlOiSw00+zSz7/sdmUad1bYIEyDJ46zI/FV6AVg==", - "dependencies": { - "@smithy/abort-controller": "^2.0.1", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/smithy-client": "^2.2.1", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", - "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", - "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", - "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", - "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", - "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", - "dependencies": { - "@aws-sdk/core": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", - "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", - "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", - "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" - } - }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", - "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", - "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", - "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "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.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/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/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", - "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "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-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.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.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/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/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "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/@bugsnag/browser": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.22.3.tgz", - "integrity": "sha512-TWQSdsCqzxEVmaKzbtmqoBLWF58yjXi/ScC+6L5VNgSj+62jkIQuw5Evjs+7kLQX8WCnaG6XLiDmUJmPx6ZUrA==", - "dependencies": { - "@bugsnag/core": "^7.19.0" - } - }, - "node_modules/@bugsnag/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.19.0.tgz", - "integrity": "sha512-2KGwdaLD9PhR7Wk7xPi3jGuGsKTatc/28U4TOZIDU3CgC2QhGjubwiXSECel5gwxhZ3jACKcMKSV2ovHhv1NrA==", - "dependencies": { - "@bugsnag/cuid": "^3.0.0", - "@bugsnag/safe-json-stringify": "^6.0.0", - "error-stack-parser": "^2.0.3", - "iserror": "0.0.2", - "stack-generator": "^2.0.3" - } - }, - "node_modules/@bugsnag/cuid": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.2.tgz", - "integrity": "sha512-cIwzC93r3PQ/INeuwtZwkZIG2K8WWN0rRLZQhu+mr48Ay+i6sEki4GYfTsflse7hZ1BeDWrNb/Q9vgY3B31xHQ==" - }, - "node_modules/@bugsnag/js": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.22.3.tgz", - "integrity": "sha512-SAZEElVlmQgZBPLbTdMAyFD2Pp1mP4t3bv+GmDVGSgBi4W6doKQVk0J/K9f5+JGw8fEh9AJHRlyub3XnlGI6Zw==", - "dependencies": { - "@bugsnag/browser": "^7.22.3", - "@bugsnag/node": "^7.22.3" - } - }, - "node_modules/@bugsnag/node": { - "version": "7.22.3", - "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.22.3.tgz", - "integrity": "sha512-vDXu0mrduonyCjUkTp+zKSh1WHAtA2VjB49xK5s1f/HnTASiJvzUOQBRXrkqaj37sndYHUSMxUCPvLawyc75nA==", - "dependencies": { - "@bugsnag/core": "^7.19.0", - "byline": "^5.0.0", - "error-stack-parser": "^2.0.2", - "iserror": "^0.0.2", - "pump": "^3.0.0", - "stack-generator": "^2.0.3" - } - }, - "node_modules/@bugsnag/safe-json-stringify": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", - "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@commitlint/cli": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz", - "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==", - "dev": true, - "dependencies": { - "@commitlint/format": "^17.8.1", - "@commitlint/lint": "^17.8.1", - "@commitlint/load": "^17.8.1", - "@commitlint/read": "^17.8.1", - "@commitlint/types": "^17.8.1", - "execa": "^5.0.0", - "lodash.isfunction": "^3.0.9", - "resolve-from": "5.0.0", - "resolve-global": "1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@commitlint/config-validator": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz", - "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.8.1", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz", - "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@commitlint/load": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz", - "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==", - "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.8.1", - "@commitlint/execute-rule": "^17.8.1", - "@commitlint/resolve-extends": "^17.8.1", - "@commitlint/types": "^17.8.1", - "@types/node": "20.5.1", - "chalk": "^4.1.0", - "cosmiconfig": "^8.0.0", - "cosmiconfig-typescript-loader": "^4.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0", - "ts-node": "^10.8.1", - "typescript": "^4.6.4 || ^5.2.2" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz", - "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==", - "dev": true, - "dependencies": { - "@commitlint/config-validator": "^17.8.1", - "@commitlint/types": "^17.8.1", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/cli/node_modules/@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true - }, - "node_modules/@commitlint/cli/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/cli/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/cli/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==", - "dev": true - }, - "node_modules/@commitlint/cli/node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz", - "integrity": "sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==", - "dev": true, - "engines": { - "node": ">=v14.21.3" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" - } - }, - "node_modules/@commitlint/cli/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/cli/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/config-conventional": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz", - "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==", - "dev": true, - "dependencies": { - "conventional-changelog-conventionalcommits": "^6.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/config-validator": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.4.tgz", - "integrity": "sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==", - "dev": true, - "optional": true, - "dependencies": { - "@commitlint/types": "^18.4.4", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/ensure": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz", - "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.8.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/ensure/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/ensure/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/ensure/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/ensure/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==", - "dev": true - }, - "node_modules/@commitlint/ensure/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/ensure/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/execute-rule": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", - "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/format": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz", - "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.8.1", - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/format/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/format/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/format/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/format/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==", - "dev": true - }, - "node_modules/@commitlint/format/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/format/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/is-ignored": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz", - "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.8.1", - "semver": "7.5.4" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/is-ignored/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/is-ignored/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true - }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/is-ignored/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/lint": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz", - "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==", - "dev": true, - "dependencies": { - "@commitlint/is-ignored": "^17.8.1", - "@commitlint/parse": "^17.8.1", - "@commitlint/rules": "^17.8.1", - "@commitlint/types": "^17.8.1" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/lint/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/lint/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/lint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/lint/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/lint/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==", - "dev": true - }, - "node_modules/@commitlint/lint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/lint/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/load": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.4.tgz", - "integrity": "sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==", - "dev": true, - "optional": true, - "dependencies": { - "@commitlint/config-validator": "^18.4.4", - "@commitlint/execute-rule": "^18.4.4", - "@commitlint/resolve-extends": "^18.4.4", - "@commitlint/types": "^18.4.4", - "chalk": "^4.1.0", - "cosmiconfig": "^8.3.6", - "cosmiconfig-typescript-loader": "^5.0.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/load/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": 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/@commitlint/load/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==", - "dev": true, - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/load/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==", - "dev": true, - "optional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/message": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz", - "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz", - "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==", - "dev": true, - "dependencies": { - "@commitlint/types": "^17.8.1", - "conventional-changelog-angular": "^6.0.0", - "conventional-commits-parser": "^4.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/parse/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/parse/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/parse/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/parse/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==", - "dev": true - }, - "node_modules/@commitlint/parse/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/parse/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/read": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz", - "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==", - "dev": true, - "dependencies": { - "@commitlint/top-level": "^17.8.1", - "@commitlint/types": "^17.8.1", - "fs-extra": "^11.0.0", - "git-raw-commits": "^2.0.11", - "minimist": "^1.2.6" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/read/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/read/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/read/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/read/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==", - "dev": true - }, - "node_modules/@commitlint/read/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@commitlint/read/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/read/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/resolve-extends": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.4.tgz", - "integrity": "sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==", - "dev": true, - "optional": true, - "dependencies": { - "@commitlint/config-validator": "^18.4.4", - "@commitlint/types": "^18.4.4", - "import-fresh": "^3.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0", - "resolve-global": "^1.0.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/rules": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz", - "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==", - "dev": true, - "dependencies": { - "@commitlint/ensure": "^17.8.1", - "@commitlint/message": "^17.8.1", - "@commitlint/to-lines": "^17.8.1", - "@commitlint/types": "^17.8.1", - "execa": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/rules/node_modules/@commitlint/types": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/rules/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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/rules/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/@commitlint/rules/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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/rules/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==", - "dev": true - }, - "node_modules/@commitlint/rules/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/rules/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/to-lines": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz", - "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==", - "dev": true, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/top-level": { - "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz", - "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=v14" - } - }, - "node_modules/@commitlint/types": { - "version": "18.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.4.tgz", - "integrity": "sha512-/FykLtodD8gKs3+VNkAUwofu4LBHankclj+I8fB2jTRvG6PV7k/OUt4P+VbM7ip853qS4F0g7Z6hLNa6JeMcAQ==", - "dev": true, - "optional": true, - "dependencies": { - "chalk": "^4.1.0" - }, - "engines": { - "node": ">=v18" - } - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@commitlint/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "optional": 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/@commitlint/types/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==", - "dev": true, - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@commitlint/types/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==", - "dev": true, - "optional": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@datadog/pprof": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-3.2.0.tgz", - "integrity": "sha512-kOhWHCWB80djnMCr5KNKBAy1Ih/jK/PIj6yqnZwL1Wqni/h6IBPRUMhtIxcYJMRgsZVYrFXUV20AVXTZCzFokw==", - "hasInstallScript": true, - "dependencies": { - "delay": "^5.0.0", - "node-gyp-build": "<4.0", - "p-limit": "^3.1.0", - "pprof-format": "^2.0.7", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@dependents/detective-less": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-3.0.2.tgz", - "integrity": "sha512-1YUvQ+e0eeTWAHoN8Uz2x2U37jZs6IGutiIE5LXId7cxfUGhtZjzxE06FdUiuiRrW+UE0vNCdSNPH2lY4dQCOQ==", - "dev": true, - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^5.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@digitalroute/cz-conventional-changelog-for-jira/-/cz-conventional-changelog-for-jira-8.0.1.tgz", - "integrity": "sha512-I7uNQ2R5LnDYVhQ01sfNvaxqe1PutXyDl8Kltj4L8uDa1LTYqQgWWp3yEj3XYDNjhUjsAheHW0lsmF1oiAjWVg==", - "dev": true, - "dependencies": { - "boxen": "^5.1.2", - "chalk": "^2.4.1", - "commitizen": "^4.2.6", - "cz-conventional-changelog": "^3.3.0", - "inquirer": "^8.2.4", - "lodash.map": "^4.5.1", - "longest": "^2.0.1", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" - }, - "engines": { - "node": ">= 10" - }, - "optionalDependencies": { - "@commitlint/load": ">6.1.1" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ewoudenberg/difflib": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@ewoudenberg/difflib/-/difflib-0.1.0.tgz", - "integrity": "sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==", - "dependencies": { - "heap": ">= 0.2.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==" - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", - "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=6.9.0" } }, - "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==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", "dev": true, + "license": "MIT", "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" + "@babel/types": "^7.22.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/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": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/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==", + "node_modules/@babel/helpers": { + "version": "7.23.8", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "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": ">=6.9.0" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.9.0" } }, - "node_modules/@jest/console/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==", + "node_modules/@babel/parser": { + "version": "7.23.6", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.0.0" } }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/console/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==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/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==", - "dev": true - }, - "node_modules/@jest/console/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==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/console/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==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core/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==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core/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==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core/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==", - "dev": true - }, - "node_modules/@jest/core/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==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/core/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==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", "dev": true, + "license": "MIT", "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "node_modules/@babel/template": { + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@jest/reporters/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==", + "node_modules/@babel/traverse": { + "version": "7.23.7", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6.9.0" } }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@bugsnag/browser": { + "version": "7.22.3", + "license": "MIT", + "dependencies": { + "@bugsnag/core": "^7.19.0" + } + }, + "node_modules/@bugsnag/core": { + "version": "7.19.0", + "license": "MIT", + "dependencies": { + "@bugsnag/cuid": "^3.0.0", + "@bugsnag/safe-json-stringify": "^6.0.0", + "error-stack-parser": "^2.0.3", + "iserror": "0.0.2", + "stack-generator": "^2.0.3" } }, - "node_modules/@jest/reporters/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==", - "dev": true, + "node_modules/@bugsnag/cuid": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@bugsnag/js": { + "version": "7.22.3", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@bugsnag/browser": "^7.22.3", + "@bugsnag/node": "^7.22.3" } }, - "node_modules/@jest/reporters/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==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, + "node_modules/@bugsnag/node": { + "version": "7.22.3", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@bugsnag/core": "^7.19.0", + "byline": "^5.0.0", + "error-stack-parser": "^2.0.2", + "iserror": "^0.0.2", + "pump": "^3.0.0", + "stack-generator": "^2.0.3" } }, - "node_modules/@jest/reporters/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==", - "dev": true, + "node_modules/@bugsnag/safe-json-stringify": { + "version": "6.0.0", + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.1.90" } }, - "node_modules/@jest/reporters/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==", + "node_modules/@commitlint/cli": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@commitlint/format": "^17.8.1", + "@commitlint/lint": "^17.8.1", + "@commitlint/load": "^17.8.1", + "@commitlint/read": "^17.8.1", + "@commitlint/types": "^17.8.1", + "execa": "^5.0.0", + "lodash.isfunction": "^3.0.9", + "resolve-from": "5.0.0", + "resolve-global": "1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=v14" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@commitlint/cli/node_modules/@commitlint/config-validator": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@commitlint/types": "^17.8.1", + "ajv": "^8.11.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/@commitlint/cli/node_modules/@commitlint/execute-rule": { + "version": "17.8.1", "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "node_modules/@commitlint/cli/node_modules/@commitlint/load": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@commitlint/config-validator": "^17.8.1", + "@commitlint/execute-rule": "^17.8.1", + "@commitlint/resolve-extends": "^17.8.1", + "@commitlint/types": "^17.8.1", + "@types/node": "20.5.1", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.2.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "node_modules/@commitlint/cli/node_modules/@commitlint/resolve-extends": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "@commitlint/config-validator": "^17.8.1", + "@commitlint/types": "^17.8.1", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@commitlint/cli/node_modules/@commitlint/types": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "chalk": "^4.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { + "node_modules/@commitlint/cli/node_modules/@types/node": { + "version": "20.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7392,11 +2188,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/chalk": { + "node_modules/@commitlint/cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7408,11 +2203,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/color-convert": { + "node_modules/@commitlint/cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7420,26 +2214,37 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/transform/node_modules/color-name": { + "node_modules/@commitlint/cli/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==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@jest/transform/node_modules/has-flag": { + "node_modules/@commitlint/cli/node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" + } + }, + "node_modules/@commitlint/cli/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/supports-color": { + "node_modules/@commitlint/cli/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7447,28 +2252,61 @@ "node": ">=8" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@commitlint/config-conventional": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "conventional-changelog-conventionalcommits": "^6.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=v14" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@commitlint/config-validator": { + "version": "18.4.4", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@commitlint/types": "^18.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "17.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^17.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/ensure/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7479,11 +2317,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { + "node_modules/@commitlint/ensure/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7495,11 +2332,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/color-convert": { + "node_modules/@commitlint/ensure/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7507,26 +2343,23 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { + "node_modules/@commitlint/ensure/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==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@jest/types/node_modules/has-flag": { + "node_modules/@commitlint/ensure/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/types/node_modules/supports-color": { + "node_modules/@commitlint/ensure/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7534,1980 +2367,2059 @@ "node": ">=8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@commitlint/execute-rule": { + "version": "18.4.4", "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=6.0.0" + "node": ">=v18" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "node_modules/@commitlint/format": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "node_modules/@koa/router": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz", - "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==", - "dependencies": { - "debug": "^4.3.4", - "http-errors": "^2.0.0", - "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.2.1" + "@commitlint/types": "^17.8.1", + "chalk": "^4.1.0" }, "engines": { - "node": ">= 12" + "node": ">=v14" } }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "node_modules/@commitlint/format/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "chalk": "^4.1.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": ">=v14" } }, - "node_modules/@mapbox/node-pre-gyp/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==", + "node_modules/@commitlint/format/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/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" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@ndhoule/extend": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@ndhoule/extend/-/extend-2.0.0.tgz", - "integrity": "sha512-xb77tVVGDGwjy25a6RmBiiBQ9uvxhkG0OEpVkQ74oNFsy9u+4PGp5BIIblmJZmJBMgXiKxZtkr4GcmHCNVubBQ==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@commitlint/format/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@commitlint/format/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@commitlint/format/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } + "license": "MIT" }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "node_modules/@commitlint/format/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "node": ">=8" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@pyroscope/nodejs": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pyroscope/nodejs/-/nodejs-0.2.9.tgz", - "integrity": "sha512-pIw4pIqcNZTZxTUuV0OUI18UZEmx9lT2GaT75ny6FKVe2L1gxAwTCf5TKk8VsnUGY66buUkyaTHcTm7fy0BP/Q==", + "node_modules/@commitlint/format/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "axios": "^0.28.0", - "debug": "^4.3.3", - "form-data": "^4.0.0", - "pprof": "^4.0.0", - "regenerator-runtime": "^0.13.11", - "source-map": "^0.7.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=v18" + "node": ">=8" } }, - "node_modules/@pyroscope/nodejs/node_modules/axios": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.1.tgz", - "integrity": "sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ==", + "node_modules/@commitlint/is-ignored": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@commitlint/types": "^17.8.1", + "semver": "7.5.4" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@rudderstack/integrations-lib": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@rudderstack/integrations-lib/-/integrations-lib-0.2.10.tgz", - "integrity": "sha512-PVlRIxO9PVYpR+UNm1qQt85wo0wO9oX0PvoC9XqzYO+C0PfRvkMqac8ghA5ytqeCYNfSIye7DtidaII5ZoCQCA==", + "node_modules/@commitlint/is-ignored/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "axios": "^1.4.0", - "axios-mock-adapter": "^1.22.0", - "crypto": "^1.0.1", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-config-airbnb-typescript": "^17.1.0", - "get-value": "^3.0.1", - "handlebars": "^4.7.8", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "moment-timezone": "^0.5.43", - "set-value": "^4.1.0", - "sha256": "^0.2.0", - "tslib": "^2.4.0", - "winston": "^3.11.0" + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@rudderstack/json-template-engine": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.18.0.tgz", - "integrity": "sha512-yArdj5flPrYbH3lq8xLixBGjt74WOv+TY0rrTF8gB7v6hFFBn7IrcsNcLDbN2SoLT604ycgMTMgIYcsAqAWWDg==" - }, - "node_modules/@rudderstack/workflow-engine": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@rudderstack/workflow-engine/-/workflow-engine-0.8.13.tgz", - "integrity": "sha512-NjT07YbaCZtWPHA2s7t2XbxxB1bVAeLtkCm+NhOg5Cxl4ceos7YZIo1oC4LeCb7QYmK0minxaPAnPhhzGTKNhQ==", + "node_modules/@commitlint/is-ignored/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@rudderstack/json-template-engine": "^0.17.1", - "jsonata": "^2.0.5", - "lodash": "^4.17.21", - "object-sizeof": "^2.6.4", - "yaml": "^2.4.3" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@rudderstack/workflow-engine/node_modules/@rudderstack/json-template-engine": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@rudderstack/json-template-engine/-/json-template-engine-0.17.1.tgz", - "integrity": "sha512-i8kSHSwkZenx2TX0rZtUcrxpebSrYSMQruW2YnxfoBk4ElAW6jGCopOPQlZ1+mqyv4J5h2mcdQyP/UzLGxvfDw==" + "node_modules/@commitlint/is-ignored/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@shopify/jest-koa-mocks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@shopify/jest-koa-mocks/-/jest-koa-mocks-5.1.1.tgz", - "integrity": "sha512-H1dRznXIK03ph1l/VDBQ5ef+A9kkEn3ikNfk70zwm9auW15MfHfY9gekE99VecxUSekws7sbFte0i8ltWCS4/g==", + "node_modules/@commitlint/is-ignored/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "koa": "^2.13.4", - "node-mocks-http": "^1.11.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@commitlint/is-ignored/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "node_modules/@commitlint/is-ignored/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "node_modules/@commitlint/is-ignored/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@commitlint/lint": { + "version": "17.8.1", "dev": true, + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^3.0.0" + "@commitlint/is-ignored": "^17.8.1", + "@commitlint/parse": "^17.8.1", + "@commitlint/rules": "^17.8.1", + "@commitlint/types": "^17.8.1" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@smithy/abort-controller": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.16.tgz", - "integrity": "sha512-4foO7738k8kM9flMHu3VLabqu7nPgvIj8TB909S0CnKx0YZz/dcDH3pZ/4JHdatfxlZdKF1JWOYCw9+v3HVVsw==", + "node_modules/@commitlint/lint/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "chalk": "^4.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "node_modules/@commitlint/lint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "node_modules/@commitlint/lint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@commitlint/lint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/lint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/lint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@commitlint/lint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/chunked-blob-reader-native/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@commitlint/load": { + "version": "18.4.4", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "@commitlint/config-validator": "^18.4.4", + "@commitlint/execute-rule": "^18.4.4", + "@commitlint/resolve-extends": "^18.4.4", + "@commitlint/types": "^18.4.4", + "chalk": "^4.1.0", + "cosmiconfig": "^8.3.6", + "cosmiconfig-typescript-loader": "^5.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v18" } }, - "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "node_modules/@commitlint/load/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@commitlint/load/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@commitlint/load/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/load/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@commitlint/load/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@commitlint/load/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + } + }, + "node_modules/@commitlint/message": { + "version": "17.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v14" } }, - "node_modules/@smithy/config-resolver/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@commitlint/parse": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@commitlint/types": "^17.8.1", + "conventional-changelog-angular": "^6.0.0", + "conventional-commits-parser": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", - "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", + "node_modules/@commitlint/parse/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "chalk": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@commitlint/parse/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@commitlint/parse/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@commitlint/parse/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/core/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/parse/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/parse/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@commitlint/parse/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@commitlint/read": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@commitlint/top-level": "^17.8.1", + "@commitlint/types": "^17.8.1", + "fs-extra": "^11.0.0", + "git-raw-commits": "^2.0.11", + "minimist": "^1.2.6" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@commitlint/read/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "chalk": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@commitlint/read/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@commitlint/read/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@commitlint/read/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/core/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@commitlint/read/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/read/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.14" } }, - "node_modules/@smithy/core/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/read/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@commitlint/read/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@commitlint/resolve-extends": { + "version": "18.4.4", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" + "@commitlint/config-validator": "^18.4.4", + "@commitlint/types": "^18.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v18" } }, - "node_modules/@smithy/core/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@commitlint/rules": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@commitlint/ensure": "^17.8.1", + "@commitlint/message": "^17.8.1", + "@commitlint/to-lines": "^17.8.1", + "@commitlint/types": "^17.8.1", + "execa": "^5.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@commitlint/rules/node_modules/@commitlint/types": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "node_modules/@commitlint/rules/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@commitlint/rules/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "node_modules/@commitlint/rules/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/rules/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@commitlint/rules/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@commitlint/rules/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@commitlint/to-lines": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/core/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@commitlint/top-level": { + "version": "17.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "find-up": "^5.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v14" } }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "node_modules/@commitlint/types": { + "version": "18.4.4", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "tslib": "^2.6.2" + "chalk": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=v18" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@commitlint/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@commitlint/types/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@commitlint/types/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@commitlint/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@commitlint/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@commitlint/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" } }, - "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", - "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "license": "MIT", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" } }, - "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@datadog/pprof": { + "version": "3.2.0", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.6.2" + "delay": "^5.0.0", + "node-gyp-build": "<4.0", + "p-limit": "^3.1.0", + "pprof-format": "^2.0.7", + "source-map": "^0.7.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" } }, - "node_modules/@smithy/eventstream-codec/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "node_modules/@dependents/detective-less": { + "version": "3.0.2", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^5.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" } }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", - "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", + "node_modules/@digitalroute/cz-conventional-changelog-for-jira": { + "version": "8.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "boxen": "^5.1.2", + "chalk": "^2.4.1", + "commitizen": "^4.2.6", + "cz-conventional-changelog": "^3.3.0", + "inquirer": "^8.2.4", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "right-pad": "^1.0.1", + "word-wrap": "^1.0.3" }, "engines": { - "node": ">=16.0.0" + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" } }, - "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", - "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", - "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@ewoudenberg/difflib": { + "version": "0.1.0", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "heap": ">= 0.2.0" } }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", - "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.2", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=16.0.0" + "node": ">=10.10.0" } }, - "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "license": "Apache-2.0", "engines": { - "node": ">=16.0.0" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@smithy/fetch-http-handler": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.2.tgz", - "integrity": "sha512-O9R/OlnAOTsnysuSDjt0v2q6DcSvCz5cCFC/CFAWWcLyBwJDeFyGTCTszgpQTb19+Fi8uRwZE5/3ziAQBFeDMQ==", - "dependencies": { - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", - "tslib": "^2.5.0" + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", - "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@smithy/hash-blob-browser/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "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": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=6" } }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", - "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/hash-stream-node/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=16.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@smithy/hash-stream-node/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "p-try": "^2.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@jest/console": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.5.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/md5-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", - "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/md5-js/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/md5-js/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/md5-js/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/md5-js/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@jest/core": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/middleware-content-length/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/middleware-endpoint": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.3.0.tgz", - "integrity": "sha512-VsOAG2YQ8ykjSmKO+CIXdJBIWFo6AAvG6Iw95BakBTqk66/4BI7XyqLevoNSq/lZ6NgZv24sLmrcIN+fLDWBCg==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.16", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" - }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", - "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@jest/environment": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@jest/expect": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" + "jest-get-type": "^29.6.3" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@jest/globals": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@jest/reporters": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=16.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@jest/source-map": { + "version": "29.6.3", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "node_modules/@jest/test-result": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "node_modules/@jest/transform": { + "version": "29.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": ">=16.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-retry/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" } }, - "node_modules/@smithy/middleware-serde": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.16.tgz", - "integrity": "sha512-5EAd4t30pcc4M8TSSGq7q/x5IKrxfXR5+SrU4bgxNy7RPHQo2PSWBUco9C+D9Tfqp/JZvprRpK42dnupZafk2g==", + "node_modules/@jest/types": { + "version": "29.6.3", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@smithy/middleware-stack": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.10.tgz", - "integrity": "sha512-I2rbxctNq9FAPPEcuA1ntZxkTKOPQFy7YBPOaD/MLg1zCvzv21CoNxR0py6J8ZVC35l4qE4nhxB0f7TF5/+Ldw==", + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@smithy/node-config-provider": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.9.tgz", - "integrity": "sha512-tUyW/9xrRy+s7RXkmQhgYkAPMpTIF8izK4orhHjNFEKR3QZiOCbWB546Y8iB/Fpbm3O9+q0Af9rpywLKJOwtaQ==", + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/property-provider": "^2.0.17", - "@smithy/shared-ini-file-loader": "^2.2.8", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@smithy/node-http-handler": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.2.tgz", - "integrity": "sha512-XO58TO/Eul/IBQKFKaaBtXJi0ItEQQCT+NI4IiKHCY/4KtqaUT6y/wC1EvDqlA9cP7Dyjdj7FdPs4DyynH3u7g==", + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/abort-controller": "^2.0.16", - "@smithy/protocol-http": "^3.0.12", - "@smithy/querystring-builder": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14.0.0" + "node": ">=7.0.0" } }, - "node_modules/@smithy/property-provider": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.17.tgz", - "integrity": "sha512-+VkeZbVu7qtQ2DjI48Qwaf9fPOr3gZIwxQpuLJgRRSkWsdSvmaTCxI3gzRFKePB63Ts9r4yjn4HkxSCSkdWmcQ==", - "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/@smithy/protocol-http": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.12.tgz", - "integrity": "sha512-Xz4iaqLiaBfbQpB9Hgi3VcZYbP7xRDXYhd8XWChh4v94uw7qwmvlxdU5yxzfm6ACJM66phHrTbS5TVvj5uQ72w==", + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/@smithy/querystring-builder": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.16.tgz", - "integrity": "sha512-Q/GsJT0C0mijXMRs7YhZLLCP5FcuC4797lYjKQkME5CZohnLC4bEhylAd2QcD3gbMKNjCw8+T2I27WKiV/wToA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "dev": true, + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "@smithy/util-uri-escape": "^2.0.0", - "tslib": "^2.5.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">=14.0.0" + "node": ">=6.0.0" } }, - "node_modules/@smithy/querystring-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.16.tgz", - "integrity": "sha512-c4ueAuL6BDYKWpkubjrQthZKoC3L5kql5O++ovekNxiexRXTlLIVlCR4q3KziOktLIw66EU9SQljPXd/oN6Okg==", - "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=6.0.0" } }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "dependencies": { - "@smithy/types": "^3.3.0" - }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=6.0.0" } }, - "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.8.tgz", - "integrity": "sha512-E62byatbwSWrtq9RJ7xN40tqrRKDGrEL4EluyNpaIDvfvet06a/QC58oHw2FgVaEgkj0tXZPjZaKrhPfpoU0qw==", + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@koa/router": { + "version": "12.0.1", + "license": "MIT", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "debug": "^4.3.4", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "methods": "^1.1.2", + "path-to-regexp": "^6.2.1" }, "engines": { - "node": ">=14.0.0" + "node": ">= 12" } }, - "node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "license": "BSD-3-Clause", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" }, - "engines": { - "node": ">=16.0.0" + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "semver": "^6.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@ndhoule/extend": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=16.0.0" + "node": ">= 8" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">= 8" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=16.0.0" + "node": ">= 8" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": ">=16.0.0" + "node": ">=14" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "dependencies": { - "tslib": "^2.6.2" - }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "license": "BSD-3-Clause", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@smithy/smithy-client": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.1.tgz", - "integrity": "sha512-SpD7FLK92XV2fon2hMotaNDa2w5VAy5/uVjP9WFmjGSgWM8pTPVkHcDl1yFs5Z8LYbij0FSz+DbCBK6i+uXXUA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "license": "BSD-3-Clause" }, - "node_modules/@smithy/types": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.8.0.tgz", - "integrity": "sha512-h9sz24cFgt/W1Re22OlhQKmUZkNh244ApgRsUDYinqF8R+QgcsBIX344u2j61TPshsTz3CvL6HYU1DnQdsSrHA==", + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "license": "BSD-3-Clause" + }, + "node_modules/@pyroscope/nodejs": { + "version": "0.2.9", + "license": "Apache-2.0", "dependencies": { - "tslib": "^2.5.0" + "axios": "^0.28.0", + "debug": "^4.3.3", + "form-data": "^4.0.0", + "pprof": "^4.0.0", + "regenerator-runtime": "^0.13.11", + "source-map": "^0.7.3" }, "engines": { - "node": ">=14.0.0" + "node": ">=v18" } }, - "node_modules/@smithy/url-parser": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.16.tgz", - "integrity": "sha512-Wfz5WqAoRT91TjRy1JeLR0fXtkIXHGsMbgzKFTx7E68SrZ55TB8xoG+vm11Ru4gheFTMXjAjwAxv1jQdC+pAQA==", + "node_modules/@pyroscope/nodejs/node_modules/axios": { + "version": "0.28.1", + "license": "MIT", "dependencies": { - "@smithy/querystring-parser": "^2.0.16", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@smithy/util-base64": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", - "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", + "node_modules/@rudderstack/integrations-lib": { + "version": "0.2.10", + "license": "MIT", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" + "axios": "^1.4.0", + "axios-mock-adapter": "^1.22.0", + "crypto": "^1.0.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-airbnb-typescript": "^17.1.0", + "get-value": "^3.0.1", + "handlebars": "^4.7.8", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "moment-timezone": "^0.5.43", + "set-value": "^4.1.0", + "sha256": "^0.2.0", + "tslib": "^2.4.0", + "winston": "^3.11.0" } }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "node_modules/@rudderstack/json-template-engine": { + "version": "0.18.0", + "license": "MIT" + }, + "node_modules/@rudderstack/workflow-engine": { + "version": "0.8.13", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@aws-crypto/sha256-js": "^5.2.0", + "@rudderstack/json-template-engine": "^0.17.1", + "jsonata": "^2.0.5", + "lodash": "^4.17.21", + "object-sizeof": "^2.6.4", + "yaml": "^2.4.3" } }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "node_modules/@rudderstack/workflow-engine/node_modules/@rudderstack/json-template-engine": { + "version": "0.17.1", + "license": "MIT" + }, + "node_modules/@shopify/jest-koa-mocks": { + "version": "5.1.1", + "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "koa": "^2.13.4", + "node-mocks-http": "^1.11.0" }, "engines": { - "node": ">=16.0.0" + "node": "^14.17.0 || >=16.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==", - "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" - }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=4" } }, - "node_modules/@smithy/util-config-provider": { + "node_modules/@sinonjs/commons": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" + "type-detect": "4.0.8" } }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", - "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/abort-controller": { + "node_modules/@smithy/abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", @@ -9519,39 +4431,28 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@smithy/chunked-blob-reader": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/is-array-buffer": { + "node_modules/@smithy/chunked-blob-reader-native": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "node_modules/@smithy/config-resolver": { + "version": "3.0.5", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/util-config-provider": "^3.0.0", "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, @@ -9559,76 +4460,86 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "node_modules/@smithy/core": { + "version": "2.4.0", + "license": "Apache-2.0", "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "node_modules/@smithy/core/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@smithy/core/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "node_modules/@smithy/core/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.0", + "license": "Apache-2.0", "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "node_modules/@smithy/eventstream-codec": { + "version": "3.1.2", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.6", + "license": "Apache-2.0", "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -9636,24 +4547,22 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/querystring-builder": { + "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.5", + "license": "Apache-2.0", "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -9661,11 +4570,11 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.5", + "license": "Apache-2.0", "dependencies": { + "@smithy/eventstream-codec": "^3.1.2", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -9673,60 +4582,54 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.2", + "license": "Apache-2.0", "dependencies": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/url-parser": { + "node_modules/@smithy/hash-node": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-base64": { + "node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-buffer-from": { + "node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -9735,62 +4638,53 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-hex-encoding": { + "node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@smithy/hash-stream-node": { + "version": "3.1.2", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-uri-escape": { + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/util-utf8": { + "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -9799,59 +4693,78 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", - "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.3", + "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.5.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "node_modules/@smithy/md5-js": { + "version": "3.0.3", + "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/md5-js/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "node_modules/@smithy/md5-js/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/is-array-buffer": { + "node_modules/@smithy/md5-js/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.5", + "license": "Apache-2.0", "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-endpoint": { + "node_modules/@smithy/middleware-endpoint": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", @@ -9868,7 +4781,25 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-serde": { + "node_modules/@smithy/middleware-retry": { + "version": "3.0.15", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", @@ -9880,7 +4811,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/middleware-stack": { + "node_modules/@smithy/middleware-stack": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", @@ -9892,7 +4823,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/node-config-provider": { + "node_modules/@smithy/node-config-provider": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", @@ -9906,7 +4837,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/node-http-handler": { + "node_modules/@smithy/node-http-handler": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", @@ -9921,7 +4852,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/property-provider": { + "node_modules/@smithy/property-provider": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", @@ -9933,7 +4864,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/protocol-http": { + "node_modules/@smithy/protocol-http": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", @@ -9945,7 +4876,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/querystring-builder": { + "node_modules/@smithy/querystring-builder": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", @@ -9958,7 +4889,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/querystring-parser": { + "node_modules/@smithy/querystring-parser": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", @@ -9970,7 +4901,17 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/shared-ini-file-loader": { + "node_modules/@smithy/service-error-classification": { + "version": "3.0.3", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", @@ -9982,7 +4923,56 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/smithy-client": { + "node_modules/@smithy/signature-v4": { + "version": "4.1.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", @@ -9998,7 +4988,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { + "node_modules/@smithy/types": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", @@ -10009,7 +4999,7 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/url-parser": { + "node_modules/@smithy/url-parser": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", @@ -10019,7 +5009,7 @@ "tslib": "^2.6.2" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-base64": { + "node_modules/@smithy/util-base64": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", @@ -10032,7 +5022,18 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-buffer-from": { + "node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", @@ -10044,51 +5045,49 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-hex-encoding": { + "node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "node_modules/@smithy/util-buffer-from": { + "version": "2.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" + "@smithy/is-array-buffer": "^2.0.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-uri-escape": { + "node_modules/@smithy/util-config-provider": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -10096,22 +5095,39 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.15", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.15", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/types": "^3.3.0", @@ -10121,24 +5137,21 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -10147,11 +5160,11 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "node_modules/@smithy/util-retry": { + "version": "3.0.3", + "license": "Apache-2.0", "dependencies": { + "@smithy/service-error-classification": "^3.0.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -10159,97 +5172,73 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.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==", - "dependencies": { - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.9.tgz", - "integrity": "sha512-PnCnBJ07noMX1lMDTEefmxSlusWJUiLfrme++MfK5TD0xz8NYmakgoXy5zkF/16zKGmiwOeKAztWT/Vjk1KRIQ==", + "node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-retry/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@smithy/util-stream": { - "version": "2.0.24", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.24.tgz", - "integrity": "sha512-hRpbcRrOxDriMVmbya+Mv77VZVupxRAsfxVDKS54XuiURhdiwCUXJP0X1iJhHinuUf6n8pBF0MkG9C8VooMnWw==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/types": "^2.8.0", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.2", - "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==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@smithy/util-utf8": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", - "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", + "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -10260,8 +5249,7 @@ }, "node_modules/@smithy/util-waiter": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", + "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.1", "@smithy/types": "^3.3.0", @@ -10271,66 +5259,37 @@ "node": ">=16.0.0" } }, - "node_modules/@smithy/util-waiter/node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/accepts": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -10341,18 +5300,16 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -10360,17 +5317,15 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -10378,21 +5333,18 @@ }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/content-disposition": { "version": "0.5.8", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.8.tgz", - "integrity": "sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==" + "license": "MIT" }, "node_modules/@types/cookies": { "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.10.tgz", - "integrity": "sha512-hmUCjAk2fwZVPPkkPBcI7jGLIR5mg4OVoNMBwU6aVsMm/iNPY7z9/R+x2fSwLt/ZXoGua6C5Zy2k5xOo9jUyhQ==", + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/express": "*", @@ -10402,8 +5354,7 @@ }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -10413,8 +5364,7 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -10424,62 +5374,53 @@ }, "node_modules/@types/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-IyNhGHu71jH1jCXTHmafuoAAdsbBON3kDh7u/UUhLmjYgN5TYB54e1R8ckTCiIevl2UuZaCsi9XRxineY5yUjw==", - "deprecated": "This is a stub types definition. fast-json-stable-stringify provides its own type definitions, so you do not need this installed.", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "*" } }, "node_modules/@types/graceful-fs": { "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/http-assert": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.5.tgz", - "integrity": "sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==" + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { "version": "29.5.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", - "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -10487,29 +5428,24 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "license": "MIT" }, "node_modules/@types/jsonpath": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.4.tgz", - "integrity": "sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keygrip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.6.tgz", - "integrity": "sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==" + "license": "MIT" }, "node_modules/@types/koa": { "version": "2.13.12", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.12.tgz", - "integrity": "sha512-vAo1KuDSYWFDB4Cs80CHvfmzSQWeUb909aQib0C0aFx4sw0K9UZFz2m5jaEP+b3X1+yr904iQiruS0hXi31jbw==", + "license": "MIT", "dependencies": { "@types/accepts": "*", "@types/content-disposition": "*", @@ -10523,70 +5459,59 @@ }, "node_modules/@types/koa-bodyparser": { "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@types/koa-bodyparser/-/koa-bodyparser-4.3.12.tgz", - "integrity": "sha512-hKMmRMVP889gPIdLZmmtou/BijaU1tHPyMNmcK7FAHAdATnRcGQQy78EqTTxLH1D4FTsrxIzklAQCso9oGoebQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/koa-compose": { "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.8.tgz", - "integrity": "sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==", + "license": "MIT", "dependencies": { "@types/koa": "*" } }, "node_modules/@types/lodash": { "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.10.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", - "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "license": "MIT" }, "node_modules/@types/semver": { "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==" + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -10594,8 +5519,7 @@ }, "node_modules/@types/serve-static": { "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -10604,34 +5528,29 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/triple-beam": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -10663,8 +5582,7 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -10689,8 +5607,7 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" @@ -10705,8 +5622,7 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "5.62.0", "@typescript-eslint/utils": "5.62.0", @@ -10731,8 +5647,7 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -10743,8 +5658,7 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", @@ -10769,8 +5683,7 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -10794,8 +5707,7 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" @@ -10810,18 +5722,15 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + "license": "ISC" }, "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "license": "ISC" }, "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==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -10832,8 +5741,7 @@ }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -10843,31 +5751,27 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/add-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -10877,8 +5781,7 @@ }, "node_modules/ajv": { "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -10892,8 +5795,7 @@ }, "node_modules/ajv-draft-04": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "license": "MIT", "peerDependencies": { "ajv": "^8.5.0" }, @@ -10905,8 +5807,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -10921,18 +5822,16 @@ }, "node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.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, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -10945,9 +5844,8 @@ }, "node_modules/ansi-escapes/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, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10957,16 +5855,14 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=8" } }, "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==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -10976,15 +5872,13 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -10995,19 +5889,16 @@ }, "node_modules/app-module-path": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -11018,8 +5909,7 @@ }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11031,19 +5921,16 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -11054,23 +5941,20 @@ }, "node_modules/array-find-index": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11087,16 +5971,14 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11113,8 +5995,7 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11130,8 +6011,7 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -11147,8 +6027,7 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", @@ -11167,51 +6046,44 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ast-module-types": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-4.0.0.tgz", - "integrity": "sha512-Kd0o8r6CDazJGCRzs8Ivpn0xj19oNKrULhoJFzhGjRsLpekF2zyZs9Ukz+JvZhWD6smszfepakTFhAaYpsI12g==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0" } }, "node_modules/async": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11221,13 +6093,11 @@ }, "node_modules/await-handler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/await-handler/-/await-handler-1.1.2.tgz", - "integrity": "sha512-dihteGhwbJpT89kVbacWiyKeAZr+En0YGK6pAKQJLR0En9ZxSH2H4TTvfG4bBjzFq9gDAma4y9BrpDns6j5UiQ==" + "license": "MIT" }, "node_modules/axios": { "version": "1.7.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", - "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -11236,8 +6106,7 @@ }, "node_modules/axios-mock-adapter": { "version": "1.22.0", - "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz", - "integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "is-buffer": "^2.0.5" @@ -11248,9 +6117,8 @@ }, "node_modules/babel-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -11269,9 +6137,8 @@ }, "node_modules/babel-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11284,9 +6151,8 @@ }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11300,9 +6166,8 @@ }, "node_modules/babel-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11312,24 +6177,21 @@ }, "node_modules/babel-jest/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/babel-jest/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/babel-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11339,9 +6201,8 @@ }, "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, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -11355,9 +6216,8 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -11371,18 +6231,16 @@ }, "node_modules/babel-plugin-istanbul/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -11395,9 +6253,8 @@ }, "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, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -11418,9 +6275,8 @@ }, "node_modules/babel-preset-jest": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -11434,13 +6290,10 @@ }, "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==" + "license": "MIT" }, "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", @@ -11454,13 +6307,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/benchmark-suite": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/benchmark-suite/-/benchmark-suite-0.1.8.tgz", - "integrity": "sha512-UDfWBQfeq/lXcsjuGAanOrX6AhP6HQSsutGS7CfStcbE1loLge7aQr5DT6n8r/4bUoiK+5RYwnogNu5UuTBMNg==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.7", "expose-gc": "^1.0.0", @@ -11474,22 +6327,19 @@ }, "node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bintrees": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -11498,9 +6348,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11512,20 +6361,17 @@ }, "node_modules/boolean": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", - "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==" + "license": "MIT" }, "node_modules/boxen": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -11545,9 +6391,8 @@ }, "node_modules/boxen/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11560,9 +6405,8 @@ }, "node_modules/boxen/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11576,9 +6420,8 @@ }, "node_modules/boxen/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11588,24 +6431,21 @@ }, "node_modules/boxen/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/boxen/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/boxen/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11615,8 +6455,7 @@ }, "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==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11624,8 +6463,7 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -11635,8 +6473,6 @@ }, "node_modules/browserslist": { "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -11652,6 +6488,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001565", "electron-to-chromium": "^1.4.601", @@ -11667,9 +6504,8 @@ }, "node_modules/bs-logger": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -11679,17 +6515,15 @@ }, "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, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/btoa": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "license": "(MIT OR Apache-2.0)", "bin": { "btoa": "bin/btoa.js" }, @@ -11699,8 +6533,7 @@ }, "node_modules/buffer": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "license": "MIT", "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -11708,15 +6541,13 @@ }, "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 + "dev": true, + "license": "MIT" }, "node_modules/builtin-modules": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -11726,24 +6557,21 @@ }, "node_modules/byline": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cache-content-type": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "license": "MIT", "dependencies": { "mime-types": "^2.1.18", "ylru": "^1.2.0" @@ -11754,9 +6582,8 @@ }, "node_modules/cacheable-request": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "1.0.2", "get-stream": "3.0.0", @@ -11769,50 +6596,44 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/cacheable-request/node_modules/json-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cacheable-request/node_modules/keyv": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.0" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/cachedir": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/call-bind": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "get-intrinsic": "^1.2.1", @@ -11824,23 +6645,20 @@ }, "node_modules/call-me-maybe": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11850,9 +6668,8 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -11867,17 +6684,14 @@ }, "node_modules/camelcase-keys/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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001576", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", - "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -11892,12 +6706,12 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "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==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -11909,48 +6723,41 @@ }, "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, + "license": "MIT", "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 + "dev": true, + "license": "MIT" }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/check-more-types": { "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -11958,21 +6765,20 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cjs-module-lexer": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/clean-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -11982,9 +6788,8 @@ }, "node_modules/cli-boxes": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -11994,9 +6799,8 @@ }, "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, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -12006,9 +6810,8 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -12018,9 +6821,8 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^5.0.0" @@ -12034,9 +6836,8 @@ }, "node_modules/cli-truncate/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12046,15 +6847,13 @@ }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -12069,9 +6868,8 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12084,18 +6882,16 @@ }, "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, + "license": "ISC", "engines": { "node": ">= 10" } }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -12107,33 +6903,29 @@ }, "node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/clone-response": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" } }, "node_modules/cluster-key-slot": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", - "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", "engines": { "node": ">=0.10.0" } }, "node_modules/co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -12141,8 +6933,7 @@ }, "node_modules/co-body": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", - "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "license": "MIT", "dependencies": { "inflation": "^2.0.0", "qs": "^6.5.2", @@ -12152,14 +6943,12 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -12167,21 +6956,18 @@ }, "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==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -12189,30 +6975,26 @@ }, "node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colors": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/colorspace": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -12220,8 +7002,7 @@ }, "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==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -12231,18 +7012,16 @@ }, "node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/commitizen": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", - "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", "dev": true, + "license": "MIT", "dependencies": { "cachedir": "2.3.0", "cz-conventional-changelog": "3.3.0", @@ -12270,9 +7049,8 @@ }, "node_modules/commitizen/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12285,9 +7063,8 @@ }, "node_modules/commitizen/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12301,9 +7078,8 @@ }, "node_modules/commitizen/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12313,15 +7089,13 @@ }, "node_modules/commitizen/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commitizen/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12339,18 +7113,16 @@ }, "node_modules/commitizen/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/commitizen/node_modules/inquirer": { "version": "8.2.5", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", - "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -12374,9 +7146,8 @@ }, "node_modules/commitizen/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12386,9 +7157,8 @@ }, "node_modules/commitlint": { "version": "17.8.1", - "resolved": "https://registry.npmjs.org/commitlint/-/commitlint-17.8.1.tgz", - "integrity": "sha512-X+VPJwZsQDeGj/DG1NsxhZEl+oMHKNC+1myZ/zauNDoo+7OuLHfTOUU1C1a4CjKW4b6T7NuoFcYfK0kRCjCtbA==", "dev": true, + "license": "MIT", "dependencies": { "@commitlint/cli": "^17.8.1", "@commitlint/types": "^17.8.1" @@ -12402,9 +7172,8 @@ }, "node_modules/commitlint/node_modules/@commitlint/types": { "version": "17.8.1", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz", - "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0" }, @@ -12414,9 +7183,8 @@ }, "node_modules/commitlint/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12429,9 +7197,8 @@ }, "node_modules/commitlint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12445,9 +7212,8 @@ }, "node_modules/commitlint/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12457,24 +7223,21 @@ }, "node_modules/commitlint/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commitlint/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/commitlint/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12484,15 +7247,13 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -12500,8 +7261,6 @@ }, "node_modules/component-each": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/component-each/-/component-each-0.2.6.tgz", - "integrity": "sha512-IOXG+HZmbgaBS8Rqy+tAMrwsPdEY1BWcPcp0xI2ZOzKQhHvSVGrL7iCnoDU37TEKOCfaf4ywsR6GwAr0JivPjg==", "dependencies": { "component-type": "1.0.0", "to-function": "2.0.6" @@ -12509,36 +7268,29 @@ }, "node_modules/component-emitter": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/component-props": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-props/-/component-props-1.1.1.tgz", - "integrity": "sha512-69pIRJs9fCCHRqCz3390YF2LV1Lu6iEMZ5zuVqqUn+G20V9BNXlMs0cWawWeW9g4Ynmg29JmkG6R7/lUJoGd1Q==" + "version": "1.1.1" }, "node_modules/component-type": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.0.0.tgz", - "integrity": "sha512-qzUg4SGDH6KFYlcklmeZwucbtosh/XGwuIffqXAhC1dZyjO7Xu1UuaxwKRY29EncuBj/DH+h6Zot3AdZS6xdFw==" + "version": "1.0.0" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -12548,9 +7300,8 @@ }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12562,18 +7313,15 @@ }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + "license": "MIT" }, "node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "license": "ISC" }, "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==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -12583,17 +7331,15 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/conventional-changelog": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-2.0.3.tgz", - "integrity": "sha512-4bcII9cJHSKb2qi9e8qGF6aJHLf/AB0dokhyR+X6QILTMl77s4l163vK+reXhajvfOYbbHQvsrWybr5+PKZwNA==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^1.6.6", "conventional-changelog-atom": "^2.0.0", @@ -12613,9 +7359,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz", - "integrity": "sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -12625,9 +7370,8 @@ }, "node_modules/conventional-changelog-atom": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", - "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12637,9 +7381,8 @@ }, "node_modules/conventional-changelog-codemirror": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", - "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12649,15 +7392,13 @@ }, "node_modules/conventional-changelog-config-spec": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz", - "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/conventional-changelog-conventionalcommits": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz", - "integrity": "sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -12667,9 +7408,8 @@ }, "node_modules/conventional-changelog-core": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", - "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-writer": "^4.0.6", "conventional-commits-parser": "^3.0.3", @@ -12691,18 +7431,16 @@ }, "node_modules/conventional-changelog-core/node_modules/camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-core/node_modules/camelcase-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^4.1.0", "map-obj": "^2.0.0", @@ -12714,9 +7452,8 @@ }, "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -12734,9 +7471,8 @@ }, "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -12748,18 +7484,16 @@ }, "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/conventional-changelog-core/node_modules/dargs": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha512-jyweV/k0rbv2WK4r9KLayuBrSh2Py0tNmV7LBoSMH4hMQyrG8OPyIOWB2VEx4DJKXWmK4lopYMVvORlDt2S8Aw==", "dev": true, + "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -12769,9 +7503,8 @@ }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^4.0.1", "lodash.template": "^4.0.2", @@ -12788,9 +7521,8 @@ }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits/node_modules/meow": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -12808,18 +7540,16 @@ }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits/node_modules/split2": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "dev": true, + "license": "ISC", "dependencies": { "through2": "^2.0.2" } }, "node_modules/conventional-changelog-core/node_modules/git-raw-commits/node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -12827,27 +7557,24 @@ }, "node_modules/conventional-changelog-core/node_modules/indent-string": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-core/node_modules/map-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-core/node_modules/minimist-options": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" @@ -12858,18 +7585,16 @@ }, "node_modules/conventional-changelog-core/node_modules/quick-lru": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-core/node_modules/redent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^3.0.0", "strip-indent": "^2.0.0" @@ -12880,18 +7605,16 @@ }, "node_modules/conventional-changelog-core/node_modules/strip-indent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/conventional-changelog-core/node_modules/through2": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -12899,9 +7622,8 @@ }, "node_modules/conventional-changelog-ember": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", - "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12911,9 +7633,8 @@ }, "node_modules/conventional-changelog-eslint": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", - "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12923,9 +7644,8 @@ }, "node_modules/conventional-changelog-express": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", - "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12935,27 +7655,24 @@ }, "node_modules/conventional-changelog-jquery": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha512-wbz5vVcvu/SPZTDFB21fF/xo5zFq6NQR42jhtUfOrrP1N/ZjNshhGb3expCGqHYdnUHzPevHeUafsVrdxVD5Og==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.4.1" } }, "node_modules/conventional-changelog-jscs": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha512-V8sey4tE0nJUlWGi2PZKDMfawYLf/+F165xhhDjcIoTEJDxssVV5PMVzTQzjS6U/dEX85fWkur+bs6imOqkIng==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.4.1" } }, "node_modules/conventional-changelog-jshint": { "version": "2.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", - "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -12966,18 +7683,16 @@ }, "node_modules/conventional-changelog-preset-loader": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/conventional-changelog-writer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", "dev": true, + "license": "MIT", "dependencies": { "compare-func": "^2.0.0", "conventional-commits-filter": "^2.0.7", @@ -12999,9 +7714,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13013,27 +7727,24 @@ }, "node_modules/conventional-changelog-writer/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/conventional-changelog-writer/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/conventional-changelog/node_modules/compare-func": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.4.tgz", - "integrity": "sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^3.0.0" @@ -13041,9 +7752,8 @@ }, "node_modules/conventional-changelog/node_modules/conventional-changelog-angular": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", - "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^1.3.1", "q": "^1.5.1" @@ -13051,15 +7761,13 @@ }, "node_modules/conventional-commit-types": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", - "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-commits-filter": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -13070,9 +7778,8 @@ }, "node_modules/conventional-commits-parser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.3.5", @@ -13088,9 +7795,8 @@ }, "node_modules/conventional-github-releaser": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/conventional-github-releaser/-/conventional-github-releaser-3.1.5.tgz", - "integrity": "sha512-VhPKbdN92b2ygnQLkuwHIfUaPAVrVfJVuQdxbmmVPkN927LDP98HthLWFVShh4pxqLK0nE66v78RERGJVeCzbg==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog": "^2.0.0", "dateformat": "^3.0.0", @@ -13114,27 +7820,24 @@ }, "node_modules/conventional-github-releaser/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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/conventional-github-releaser/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/conventional-github-releaser/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -13145,9 +7848,8 @@ }, "node_modules/conventional-github-releaser/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -13157,9 +7859,8 @@ }, "node_modules/conventional-github-releaser/node_modules/meow": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -13182,9 +7883,8 @@ }, "node_modules/conventional-github-releaser/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -13197,9 +7897,8 @@ }, "node_modules/conventional-github-releaser/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -13209,9 +7908,8 @@ }, "node_modules/conventional-github-releaser/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -13224,9 +7922,8 @@ }, "node_modules/conventional-github-releaser/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -13241,36 +7938,32 @@ }, "node_modules/conventional-github-releaser/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/conventional-github-releaser/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/conventional-github-releaser/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/conventional-github-releaser/node_modules/type-fest": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13280,9 +7973,8 @@ }, "node_modules/conventional-github-releaser/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -13293,9 +7985,8 @@ }, "node_modules/conventional-recommended-bump": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.3.4", @@ -13315,9 +8006,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -13335,9 +8025,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/git-semver-tags": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" @@ -13351,9 +8040,8 @@ }, "node_modules/conventional-recommended-bump/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13365,48 +8053,39 @@ }, "node_modules/conventional-recommended-bump/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/conventional-recommended-bump/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/convert-hex": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", - "integrity": "sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A==" + "version": "0.1.0" }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/convert-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz", - "integrity": "sha512-1KX9ESmtl8xpT2LN2tFnKSbV4NiarbVi8DVb39ZriijvtTklyrT+4dT1wsGMHKD3CJUjXgvJzstm9qL9ICojGA==" + "version": "0.1.0" }, "node_modules/cookiejar": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cookies": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "license": "MIT", "dependencies": { "depd": "~2.0.0", "keygrip": "~1.1.0" @@ -13417,20 +8096,17 @@ }, "node_modules/copy-to": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", - "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==" + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -13454,9 +8130,8 @@ }, "node_modules/cosmiconfig-typescript-loader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.0.0.tgz", - "integrity": "sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "jiti": "^1.19.1" @@ -13472,9 +8147,8 @@ }, "node_modules/create-jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -13493,9 +8167,8 @@ }, "node_modules/create-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13508,9 +8181,8 @@ }, "node_modules/create-jest/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13524,9 +8196,8 @@ }, "node_modules/create-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13536,24 +8207,21 @@ }, "node_modules/create-jest/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-jest/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/create-jest/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13563,14 +8231,12 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -13582,28 +8248,23 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/crypto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", - "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + "license": "ISC" }, "node_modules/crypto-js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + "license": "MIT" }, "node_modules/currently-unhandled": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, + "license": "MIT", "dependencies": { "array-find-index": "^1.0.1" }, @@ -13613,9 +8274,8 @@ }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", - "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.4.1", "commitizen": "^4.0.3", @@ -13633,26 +8293,23 @@ }, "node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -13667,18 +8324,16 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -13692,27 +8347,24 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/decompress-response": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -13722,42 +8374,36 @@ }, "node_modules/dedent": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deep-equal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" + "license": "MIT" }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "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==" + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -13767,16 +8413,14 @@ }, "node_modules/defaults/node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/define-data-property": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.1", "gopd": "^1.0.1", @@ -13788,8 +8432,7 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -13804,8 +8447,7 @@ }, "node_modules/delay": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -13815,38 +8457,33 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "license": "MIT" }, "node_modules/denque": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", - "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", "engines": { "node": ">=0.10" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-tree": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-9.0.0.tgz", - "integrity": "sha512-osYHZJ1fBSon3lNLw70amAXsQ+RGzXsPvk9HbBgTLbp/bQBmpH5mOmsUvqXU+YEWVU0ZLewsmzOET/8jWswjDQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.20.3", "debug": "^4.3.1", @@ -13863,24 +8500,21 @@ }, "node_modules/dependency-tree/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dependency-tree/node_modules/detective-stylus": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-3.0.0.tgz", - "integrity": "sha512-1xYTzbrduExqMYmte7Qk99IRA3Aa6oV7PYzd+3yDcQXkmENvyGF/arripri6lxRDdNYEb4fZFuHtNRAXbz3iAA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/dependency-tree/node_modules/module-definition": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-4.1.0.tgz", - "integrity": "sha512-rHXi/DpMcD2qcKbPCTklDbX9lBKJrUSl971TW5l6nMpqKCIlzJqmQ8cfEF5M923h2OOLHPDVlh5pJxNyV+AJlw==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^4.0.0", "node-source-walk": "^5.0.1" @@ -13894,9 +8528,8 @@ }, "node_modules/dependency-tree/node_modules/precinct": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-9.2.1.tgz", - "integrity": "sha512-uzKHaTyiVejWW7VJtHInb9KBUq9yl9ojxXGujhjhDmPon2wgZPBKQIKR+6csGqSlUeGXAA4MEFnU6DesxZib+A==", "dev": true, + "license": "MIT", "dependencies": { "@dependents/detective-less": "^3.0.1", "commander": "^9.5.0", @@ -13920,18 +8553,16 @@ }, "node_modules/dependency-tree/node_modules/precinct/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/dependency-tree/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13942,8 +8573,7 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -13951,44 +8581,39 @@ }, "node_modules/detect-file": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-libc": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", "engines": { "node": ">=8" } }, "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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detective-amd": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-4.2.0.tgz", - "integrity": "sha512-RbuEJHz78A8nW7CklkqTzd8lDCN42En53dgEIsya0DilpkwslamSZDasLg8dJyxbw46OxhSQeY+C2btdSkCvQQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^4.0.0", "escodegen": "^2.0.0", @@ -14004,9 +8629,8 @@ }, "node_modules/detective-cjs": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-4.1.0.tgz", - "integrity": "sha512-QxzMwt5MfPLwS7mG30zvnmOvHLx5vyVvjsAV6gQOyuMoBR5G1DhS1eJZ4P10AlH+HSnk93mTcrg3l39+24XCtg==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^4.0.0", "node-source-walk": "^5.0.1" @@ -14017,9 +8641,8 @@ }, "node_modules/detective-es6": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-3.0.1.tgz", - "integrity": "sha512-evPeYIEdK1jK3Oji5p0hX4sPV/1vK+o4ihcWZkMQE6voypSW/cIBiynOLxQk5KOOQbdP8oOAsYqouMTYO5l1sw==", "dev": true, + "license": "MIT", "dependencies": { "node-source-walk": "^5.0.0" }, @@ -14029,9 +8652,8 @@ }, "node_modules/detective-less": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", - "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "gonzales-pe": "^4.2.3", @@ -14043,9 +8665,8 @@ }, "node_modules/detective-less/node_modules/node-source-walk": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.0.0" }, @@ -14055,9 +8676,8 @@ }, "node_modules/detective-postcss": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-6.1.3.tgz", - "integrity": "sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==", "dev": true, + "license": "MIT", "dependencies": { "is-url": "^1.2.4", "postcss": "^8.4.23", @@ -14069,9 +8689,8 @@ }, "node_modules/detective-sass": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-4.1.3.tgz", - "integrity": "sha512-xGRbwGaGte57gvEqM8B9GDiURY3El/H49vA6g9wFkxq9zalmTlTAuqWu+BsH0iwonGPruLt55tZZDEZqPc6lag==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^5.0.1" @@ -14082,9 +8701,8 @@ }, "node_modules/detective-scss": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-3.1.1.tgz", - "integrity": "sha512-FWkfru1jZBhUeuBsOeGKXKAVDrzYFSQFK2o2tuG/nCCFQ0U/EcXC157MNAcR5mmj+mCeneZzlkBOFJTesDjrww==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^5.0.1" @@ -14095,18 +8713,16 @@ }, "node_modules/detective-stylus": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-2.0.1.tgz", - "integrity": "sha512-/Tvs1pWLg8eYwwV6kZQY5IslGaYqc/GACxjcaGudiNtN5nKCH6o2WnJK3j0gA3huCnoQcbv8X7oz/c1lnvE3zQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/detective-typescript": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-9.1.1.tgz", - "integrity": "sha512-Uc1yVutTF0RRm1YJ3g//i1Cn2vx1kwHj15cnzQP6ff5koNzQ0idc1zAC73ryaWEulA0ElRXFTq6wOqe8vUQ3MA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "^5.55.0", "ast-module-types": "^4.0.0", @@ -14119,9 +8735,8 @@ }, "node_modules/detective-typescript/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14132,9 +8747,8 @@ }, "node_modules/dezalgo": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, + "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -14142,26 +8756,23 @@ }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -14171,8 +8782,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -14182,9 +8792,8 @@ }, "node_modules/dot-prop": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", - "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^1.0.0" }, @@ -14194,8 +8803,7 @@ }, "node_modules/dotenv": { "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -14205,9 +8813,8 @@ }, "node_modules/dotgitignore": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz", - "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==", "dev": true, + "license": "ISC", "dependencies": { "find-up": "^3.0.0", "minimatch": "^3.0.4" @@ -14218,9 +8825,8 @@ }, "node_modules/dotgitignore/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -14230,9 +8836,8 @@ }, "node_modules/dotgitignore/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -14243,9 +8848,8 @@ }, "node_modules/dotgitignore/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -14258,9 +8862,8 @@ }, "node_modules/dotgitignore/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -14270,17 +8873,14 @@ }, "node_modules/dotgitignore/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/dreamopt": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz", - "integrity": "sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==", "dependencies": { "wordwrap": ">=0.0.2" }, @@ -14290,32 +8890,27 @@ }, "node_modules/duplexer3": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.4.625", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.625.tgz", - "integrity": "sha512-DENMhh3MFgaPDoXWrVIqSPInQoLImywfCwrSmVl3cf9QHzoZSiutHwGaB/Ql3VkqcQV30rzgdM+BjKqBAJxo5Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/emittery": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14325,43 +8920,37 @@ }, "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==" + "license": "MIT" }, "node_modules/empty-dir": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/empty-dir/-/empty-dir-1.0.0.tgz", - "integrity": "sha512-97qcDM6mUA1jAeX6cktw7akc5awIGA+VIkA5MygKOKA+c2Vseo/xwKN0JNJTUhZUtPwZboKVD2p1xu+sV/F4xA==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/enabled": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "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==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -14372,9 +8961,8 @@ }, "node_modules/entities": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.0.tgz", - "integrity": "sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -14384,24 +8972,21 @@ }, "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==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "arraybuffer.prototype.slice": "^1.0.2", @@ -14452,8 +9037,7 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -14465,16 +9049,14 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -14489,36 +9071,31 @@ }, "node_modules/es6-promise": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" + "license": "MIT" }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "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": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "license": "MIT" }, "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -14537,18 +9114,16 @@ }, "node_modules/escodegen/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, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/escodegen/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, + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -14556,8 +9131,7 @@ }, "node_modules/eslint": { "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14610,8 +9184,7 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "license": "MIT", "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", @@ -14628,16 +9201,14 @@ }, "node_modules/eslint-config-airbnb-base/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-config-airbnb-typescript": { "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.1.0.tgz", - "integrity": "sha512-GPxI5URre6dDpJ0CtcthSZVBAfI+Uw7un5OYNVxP2EYi3H81Jw701yFP7AU+/vCE7xBtFmjge7kfhhk4+RAiig==", + "license": "MIT", "dependencies": { "eslint-config-airbnb-base": "^15.0.0" }, @@ -14650,9 +9221,8 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -14662,8 +9232,7 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -14672,16 +9241,14 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -14696,16 +9263,14 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "license": "MIT", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -14734,16 +9299,14 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -14753,17 +9316,15 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-json": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21", "vscode-json-languageservice": "^4.1.6" @@ -14774,9 +9335,8 @@ }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.8.6" @@ -14804,9 +9364,8 @@ }, "node_modules/eslint-plugin-sonarjs": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.19.0.tgz", - "integrity": "sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==", "dev": true, + "license": "LGPL-3.0", "engines": { "node": ">=14" }, @@ -14816,9 +9375,8 @@ }, "node_modules/eslint-plugin-unicorn": { "version": "46.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-46.0.1.tgz", - "integrity": "sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.19.1", "@eslint-community/eslint-utils": "^4.1.2", @@ -14849,9 +9407,8 @@ }, "node_modules/eslint-plugin-unicorn/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -14862,9 +9419,8 @@ }, "node_modules/eslint-plugin-unicorn/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -14874,9 +9430,8 @@ }, "node_modules/eslint-plugin-unicorn/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -14889,9 +9444,8 @@ }, "node_modules/eslint-plugin-unicorn/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -14901,9 +9455,8 @@ }, "node_modules/eslint-plugin-unicorn/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -14916,9 +9469,8 @@ }, "node_modules/eslint-plugin-unicorn/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -14933,26 +9485,23 @@ }, "node_modules/eslint-plugin-unicorn/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/eslint-plugin-unicorn/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -14963,8 +9512,7 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -14974,8 +9522,7 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14989,8 +9536,7 @@ }, "node_modules/eslint/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==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15003,8 +9549,7 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15018,8 +9563,7 @@ }, "node_modules/eslint/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==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15029,13 +9573,11 @@ }, "node_modules/eslint/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==" + "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -15045,8 +9587,7 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -15060,29 +9601,25 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint/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==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "license": "MIT" }, "node_modules/eslint/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==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15092,8 +9629,7 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -15108,8 +9644,7 @@ }, "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==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -15120,8 +9655,7 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -15131,16 +9665,14 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -15150,47 +9682,41 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "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==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "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, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -15211,8 +9737,6 @@ }, "node_modules/exit": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -15220,9 +9744,8 @@ }, "node_modules/expand-tilde": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, + "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -15232,9 +9755,8 @@ }, "node_modules/expect": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -15248,18 +9770,16 @@ }, "node_modules/expose-gc": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/expose-gc/-/expose-gc-1.0.0.tgz", - "integrity": "sha512-ecOHrdm+zyOCGIwX18/1RHkUWgxDqGGRiGhaNC+42jReTtudbm2ID/DMa/wpaHwqy5YQHPZvsDqRM2F2iZ0uVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "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, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -15271,19 +9791,16 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -15297,8 +9814,7 @@ }, "node_modules/fast-glob/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==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -15308,19 +9824,16 @@ }, "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==" + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "license": "MIT" }, "node_modules/fast-printf": { "version": "1.6.9", - "resolved": "https://registry.npmjs.org/fast-printf/-/fast-printf-1.6.9.tgz", - "integrity": "sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "boolean": "^3.1.4" }, @@ -15330,14 +9843,11 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -15348,6 +9858,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -15357,31 +9868,27 @@ }, "node_modules/fastq": { "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fecha": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -15394,8 +9901,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -15405,14 +9911,12 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "license": "MIT" }, "node_modules/filing-cabinet": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.3.1.tgz", - "integrity": "sha512-renEK4Hh6DUl9Vl22Y3cxBq1yh8oNvbAdXnhih0wVpmea+uyKjC9K4QeRjUaybIiIewdzfum+Fg15ZqJ/GyCaA==", "dev": true, + "license": "MIT", "dependencies": { "app-module-path": "^2.2.0", "commander": "^2.20.3", @@ -15437,15 +9941,13 @@ }, "node_modules/filing-cabinet/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/filing-cabinet/node_modules/typescript": { "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15456,8 +9958,7 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -15467,9 +9968,8 @@ }, "node_modules/find-node-modules": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", - "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", "dev": true, + "license": "MIT", "dependencies": { "findup-sync": "^4.0.0", "merge": "^2.1.1" @@ -15477,14 +9977,12 @@ }, "node_modules/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15498,17 +9996,15 @@ }, "node_modules/findit2": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==", + "license": "MIT", "engines": { "node": ">=0.8.22" } }, "node_modules/findup-sync": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", @@ -15521,16 +10017,14 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -15542,31 +10036,26 @@ }, "node_modules/flatted": { "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "license": "ISC" }, "node_modules/flatten": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fn.name": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + "license": "MIT" }, "node_modules/follow-redirects": { "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -15578,17 +10067,15 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -15602,9 +10089,8 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -15614,8 +10100,7 @@ }, "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==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -15627,9 +10112,8 @@ }, "node_modules/formidable": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", "dev": true, + "license": "MIT", "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^1.0.0", @@ -15642,17 +10126,15 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -15660,9 +10142,8 @@ }, "node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -15675,8 +10156,7 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -15686,8 +10166,7 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -15697,20 +10176,16 @@ }, "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -15721,16 +10196,14 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -15746,16 +10219,14 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gauge": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -15773,18 +10244,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-amd-module-type": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-4.1.0.tgz", - "integrity": "sha512-0e/eK6vTGCnSfQ6eYs3wtH05KotJYIP7ZIZEueP/KlA+0dIAEs8bYFvOd/U56w1vfjhJqBagUxVMyy9Tr/cViQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^4.0.0", "node-source-walk": "^5.0.1" @@ -15795,17 +10264,15 @@ }, "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, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2", "has-proto": "^1.0.1", @@ -15818,24 +10285,21 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-pkg-repo": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha512-xPCyvcEOxCJDxhBfXDNH+zA7mIRGb2aY1gIUJWsZkpJbp1BLHl+/Sycg26Dv+ZbZAJkO61tzbBtqHUi30NGBvg==", "dev": true, + "license": "MIT", "dependencies": { "hosted-git-info": "^2.1.4", "meow": "^3.3.0", @@ -15849,18 +10313,16 @@ }, "node_modules/get-pkg-repo/node_modules/camelcase": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/get-pkg-repo/node_modules/camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" @@ -15871,9 +10333,8 @@ }, "node_modules/get-pkg-repo/node_modules/find-up": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, + "license": "MIT", "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -15884,9 +10345,8 @@ }, "node_modules/get-pkg-repo/node_modules/indent-string": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "dev": true, + "license": "MIT", "dependencies": { "repeating": "^2.0.0" }, @@ -15896,9 +10356,8 @@ }, "node_modules/get-pkg-repo/node_modules/load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -15912,18 +10371,16 @@ }, "node_modules/get-pkg-repo/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/get-pkg-repo/node_modules/meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^2.0.0", "decamelize": "^1.1.2", @@ -15942,9 +10399,8 @@ }, "node_modules/get-pkg-repo/node_modules/parse-json": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -15954,9 +10410,8 @@ }, "node_modules/get-pkg-repo/node_modules/path-exists": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, + "license": "MIT", "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -15966,9 +10421,8 @@ }, "node_modules/get-pkg-repo/node_modules/path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -15980,9 +10434,8 @@ }, "node_modules/get-pkg-repo/node_modules/read-pkg": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -15994,9 +10447,8 @@ }, "node_modules/get-pkg-repo/node_modules/read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -16007,9 +10459,8 @@ }, "node_modules/get-pkg-repo/node_modules/redent": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^2.1.0", "strip-indent": "^1.0.1" @@ -16020,9 +10471,8 @@ }, "node_modules/get-pkg-repo/node_modules/strip-bom": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, + "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -16032,9 +10482,8 @@ }, "node_modules/get-pkg-repo/node_modules/strip-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, + "license": "MIT", "dependencies": { "get-stdin": "^4.0.1" }, @@ -16047,18 +10496,16 @@ }, "node_modules/get-stdin": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16068,8 +10515,7 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -16083,8 +10529,7 @@ }, "node_modules/get-value": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-3.0.1.tgz", - "integrity": "sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -16094,9 +10539,8 @@ }, "node_modules/gh-got": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-7.1.0.tgz", - "integrity": "sha512-KeWkkhresa7sbpzQLYzITMgez5rMigUsijhmSAHcLDORIMUbdlkdoZyaN1wQvIjmUZnyb/wkAPaXb4MQKX0mdQ==", "dev": true, + "license": "MIT", "dependencies": { "got": "^8.0.0", "is-plain-obj": "^1.1.0" @@ -16107,9 +10551,8 @@ }, "node_modules/git-raw-commits": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", @@ -16126,9 +10569,8 @@ }, "node_modules/git-raw-commits/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16140,18 +10582,16 @@ }, "node_modules/git-raw-commits/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/git-remote-origin-url": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -16162,9 +10602,8 @@ }, "node_modules/git-semver-tags": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", - "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^4.0.0", "semver": "^6.0.0" @@ -16178,18 +10617,16 @@ }, "node_modules/git-semver-tags/node_modules/camelcase": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/git-semver-tags/node_modules/camelcase-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^4.1.0", "map-obj": "^2.0.0", @@ -16201,27 +10638,24 @@ }, "node_modules/git-semver-tags/node_modules/indent-string": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/git-semver-tags/node_modules/map-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/git-semver-tags/node_modules/meow": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-keys": "^4.0.0", "decamelize-keys": "^1.0.0", @@ -16239,9 +10673,8 @@ }, "node_modules/git-semver-tags/node_modules/minimist-options": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0" @@ -16252,18 +10685,16 @@ }, "node_modules/git-semver-tags/node_modules/quick-lru": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/git-semver-tags/node_modules/redent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^3.0.0", "strip-indent": "^2.0.0" @@ -16274,36 +10705,32 @@ }, "node_modules/git-semver-tags/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/git-semver-tags/node_modules/strip-indent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/gitconfiglocal": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } }, "node_modules/glob": { "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -16323,8 +10750,7 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16334,18 +10760,16 @@ }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -16358,9 +10782,8 @@ }, "node_modules/global-dirs": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4" }, @@ -16370,9 +10793,8 @@ }, "node_modules/global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -16384,9 +10806,8 @@ }, "node_modules/global-prefix": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -16400,9 +10821,8 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -16412,8 +10832,7 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -16426,8 +10845,7 @@ }, "node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -16440,8 +10858,7 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -16459,9 +10876,8 @@ }, "node_modules/gonzales-pe": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -16474,8 +10890,7 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -16485,9 +10900,8 @@ }, "node_modules/got": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^0.7.0", "cacheable-request": "^2.1.1", @@ -16513,43 +10927,37 @@ }, "node_modules/got/node_modules/get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/got/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "license": "MIT" }, "node_modules/growly": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -16568,41 +10976,36 @@ }, "node_modules/handlebars/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==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2" }, @@ -16612,8 +11015,7 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16623,17 +11025,15 @@ }, "node_modules/has-symbol-support-x": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16643,9 +11043,8 @@ }, "node_modules/has-to-string-tag-x": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbol-support-x": "^1.4.1" }, @@ -16655,8 +11054,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -16669,13 +11067,11 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "license": "ISC" }, "node_modules/has-value": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-2.0.2.tgz", - "integrity": "sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==", + "license": "MIT", "dependencies": { "get-value": "^3.0.0", "has-values": "^2.0.1" @@ -16686,8 +11082,7 @@ }, "node_modules/has-values": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-2.0.1.tgz", - "integrity": "sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==", + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -16697,8 +11092,7 @@ }, "node_modules/hasown": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -16708,23 +11102,20 @@ }, "node_modules/heap": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + "license": "MIT" }, "node_modules/hexoid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/homedir-polyfill": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, + "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -16734,19 +11125,16 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "license": "ISC" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/http-assert": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "license": "MIT", "dependencies": { "deep-equal": "~1.0.1", "http-errors": "~1.8.0" @@ -16757,16 +11145,14 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-assert/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==", + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -16780,22 +11166,19 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -16809,8 +11192,7 @@ }, "node_modules/http-graceful-shutdown": { "version": "3.1.13", - "resolved": "https://registry.npmjs.org/http-graceful-shutdown/-/http-graceful-shutdown-3.1.13.tgz", - "integrity": "sha512-Ci5LRufQ8AtrQ1U26AevS8QoMXDOhnAHCJI3eZu1com7mZGHxREmw3dNj85ftpQokQCvak8nI2pnFS8zyM1M+Q==", + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -16820,9 +11202,8 @@ }, "node_modules/http-terminator": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/http-terminator/-/http-terminator-3.2.0.tgz", - "integrity": "sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "delay": "^5.0.0", "p-wait-for": "^3.2.0", @@ -16835,9 +11216,8 @@ }, "node_modules/http-terminator/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -16847,8 +11227,7 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -16859,27 +11238,24 @@ }, "node_modules/human-format": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/human-format/-/human-format-1.2.0.tgz", - "integrity": "sha512-GIjOefWusTiXEPezbuI59uc1G2SNMpym6w1wNfoWAG6QrTsWueuauR5We0xHHuzoJKIYTwwNtTEy0ahyji5KXw==", "dev": true, + "license": "ISC", "engines": { "node": ">=4" } }, "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, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/husky": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.1.tgz", - "integrity": "sha512-fCqlqLXcBnXa/TJXmT93/A36tJsjdJkibQ1MuIiFyCCYUlpYpIaj2mv1w+3KR6Rzu1IC3slFTje5f6DUp2A2rg==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.js" }, @@ -16892,8 +11268,7 @@ }, "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==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -16903,8 +11278,6 @@ }, "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", @@ -16918,20 +11291,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -16945,17 +11317,15 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } }, "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, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -16972,39 +11342,34 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/inflation": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", - "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -17012,20 +11377,17 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -17049,9 +11411,8 @@ }, "node_modules/inquirer/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17064,9 +11425,8 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17080,9 +11440,8 @@ }, "node_modules/inquirer/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17092,24 +11451,21 @@ }, "node_modules/inquirer/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/inquirer/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inquirer/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17119,9 +11475,8 @@ }, "node_modules/inquirer/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -17133,8 +11488,7 @@ }, "node_modules/internal-slot": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "hasown": "^2.0.0", @@ -17146,9 +11500,8 @@ }, "node_modules/into-stream": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "dev": true, + "license": "MIT", "dependencies": { "from2": "^2.1.1", "p-is-promise": "^1.1.0" @@ -17159,8 +11512,7 @@ }, "node_modules/ioredis": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "license": "MIT", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -17182,24 +11534,21 @@ }, "node_modules/ip-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -17211,13 +11560,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "license": "MIT" }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -17227,8 +11574,7 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -17242,8 +11588,6 @@ }, "node_modules/is-buffer": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "funding": [ { "type": "github", @@ -17258,15 +11602,15 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -17279,8 +11623,7 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17290,8 +11633,7 @@ }, "node_modules/is-core-module": { "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -17301,8 +11643,7 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -17315,9 +11656,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -17330,17 +11670,15 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finite": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" }, @@ -17350,9 +11688,8 @@ }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -17362,17 +11699,15 @@ }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -17385,8 +11720,7 @@ }, "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==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -17396,17 +11730,15 @@ }, "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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-ip": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "license": "MIT", "dependencies": { "ip-regex": "^4.0.0" }, @@ -17416,8 +11748,7 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17427,16 +11758,14 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -17449,43 +11778,38 @@ }, "node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-object": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -17495,16 +11819,14 @@ }, "node_modules/is-primitive": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -17518,32 +11840,28 @@ }, "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-relative-path": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", - "integrity": "sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-retry-allowed": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -17553,8 +11871,7 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -17564,8 +11881,7 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -17578,8 +11894,7 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -17592,9 +11907,8 @@ }, "node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -17604,8 +11918,7 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -17618,9 +11931,8 @@ }, "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, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17630,15 +11942,13 @@ }, "node_modules/is-url": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-url-superb": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz", - "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17648,14 +11958,12 @@ }, "node_modules/is-utf8": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -17665,18 +11973,16 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -17686,51 +11992,44 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/iserror": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", - "integrity": "sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==" + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isolated-vm": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.5.0.tgz", - "integrity": "sha512-Kse0m5t+B9wZQVeTDqzPoX1SIFNTNfyaUxhnCuFgpXL1+5GYJ9GUAN3mpD+ainixGmUXgeYaVBX+QPDjEBBu0w==", "hasInstallScript": true, + "license": "ISC", "engines": { "node": ">=10.4.0" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -17744,9 +12043,8 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -17758,18 +12056,16 @@ }, "node_modules/istanbul-lib-report/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17779,9 +12075,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, + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -17793,18 +12088,16 @@ }, "node_modules/istanbul-lib-source-maps/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -17815,9 +12108,8 @@ }, "node_modules/isurl": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, + "license": "MIT", "dependencies": { "has-to-string-tag-x": "^1.2.0", "is-object": "^1.0.1" @@ -17828,9 +12120,8 @@ }, "node_modules/jackspeak": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -17846,9 +12137,8 @@ }, "node_modules/jest": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -17872,9 +12162,8 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -17886,9 +12175,8 @@ }, "node_modules/jest-circus": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -17917,9 +12205,8 @@ }, "node_modules/jest-circus/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17932,9 +12219,8 @@ }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17948,9 +12234,8 @@ }, "node_modules/jest-circus/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17960,15 +12245,13 @@ }, "node_modules/jest-circus/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-circus/node_modules/dedent": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -17980,18 +12263,16 @@ }, "node_modules/jest-circus/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-circus/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18001,9 +12282,8 @@ }, "node_modules/jest-cli": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -18034,9 +12314,8 @@ }, "node_modules/jest-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18049,9 +12328,8 @@ }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18065,9 +12343,8 @@ }, "node_modules/jest-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18077,24 +12354,21 @@ }, "node_modules/jest-cli/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-cli/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-cli/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18104,9 +12378,8 @@ }, "node_modules/jest-config": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -18149,9 +12422,8 @@ }, "node_modules/jest-config/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18164,9 +12436,8 @@ }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18180,9 +12451,8 @@ }, "node_modules/jest-config/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18192,15 +12462,13 @@ }, "node_modules/jest-config/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18218,18 +12486,16 @@ }, "node_modules/jest-config/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-config/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18239,9 +12505,8 @@ }, "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -18254,9 +12519,8 @@ }, "node_modules/jest-diff/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18269,9 +12533,8 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18285,9 +12548,8 @@ }, "node_modules/jest-diff/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18297,24 +12559,21 @@ }, "node_modules/jest-diff/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-diff/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-diff/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18324,9 +12583,8 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -18336,9 +12594,8 @@ }, "node_modules/jest-each": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -18352,9 +12609,8 @@ }, "node_modules/jest-each/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18367,9 +12623,8 @@ }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18383,9 +12638,8 @@ }, "node_modules/jest-each/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18395,24 +12649,21 @@ }, "node_modules/jest-each/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-each/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-each/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18422,9 +12673,8 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -18439,18 +12689,16 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -18473,9 +12721,8 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -18486,9 +12733,8 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -18501,9 +12747,8 @@ }, "node_modules/jest-matcher-utils/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18516,9 +12761,8 @@ }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18532,9 +12776,8 @@ }, "node_modules/jest-matcher-utils/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18544,24 +12787,21 @@ }, "node_modules/jest-matcher-utils/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-matcher-utils/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-matcher-utils/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18571,9 +12811,8 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -18591,9 +12830,8 @@ }, "node_modules/jest-message-util/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18606,9 +12844,8 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18622,9 +12859,8 @@ }, "node_modules/jest-message-util/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18634,24 +12870,21 @@ }, "node_modules/jest-message-util/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-message-util/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-message-util/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18661,9 +12894,8 @@ }, "node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -18675,9 +12907,8 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -18692,18 +12923,16 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -18721,9 +12950,8 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -18734,9 +12962,8 @@ }, "node_modules/jest-resolve/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18749,9 +12976,8 @@ }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18765,9 +12991,8 @@ }, "node_modules/jest-resolve/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18777,24 +13002,21 @@ }, "node_modules/jest-resolve/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-resolve/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-resolve/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18804,9 +13026,8 @@ }, "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -18836,9 +13057,8 @@ }, "node_modules/jest-runner/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18851,9 +13071,8 @@ }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18867,9 +13086,8 @@ }, "node_modules/jest-runner/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18879,24 +13097,21 @@ }, "node_modules/jest-runner/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-runner/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-runner/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18906,9 +13121,8 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -18939,9 +13153,8 @@ }, "node_modules/jest-runtime/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18954,9 +13167,8 @@ }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18970,9 +13182,8 @@ }, "node_modules/jest-runtime/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18982,15 +13193,13 @@ }, "node_modules/jest-runtime/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -19008,18 +13217,16 @@ }, "node_modules/jest-runtime/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-runtime/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19029,9 +13236,8 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -19060,9 +13266,8 @@ }, "node_modules/jest-snapshot/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19075,9 +13280,8 @@ }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19091,9 +13295,8 @@ }, "node_modules/jest-snapshot/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19103,24 +13306,21 @@ }, "node_modules/jest-snapshot/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-snapshot/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-snapshot/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19130,9 +13330,8 @@ }, "node_modules/jest-sonar": { "version": "0.2.16", - "resolved": "https://registry.npmjs.org/jest-sonar/-/jest-sonar-0.2.16.tgz", - "integrity": "sha512-ES6Z9BbIVDELtbz+/b6pv41B2qOfp38cQpoCLqei21FtlkG/GzhyQ0M3egEIM+erpJOkpRKM8Tc8/YQtHdiTXA==", "dev": true, + "license": "MIT", "dependencies": { "entities": "4.3.0", "strip-ansi": "6.0.1" @@ -19140,9 +13339,8 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -19157,9 +13355,8 @@ }, "node_modules/jest-util/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19172,9 +13369,8 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19188,9 +13384,8 @@ }, "node_modules/jest-util/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19200,24 +13395,21 @@ }, "node_modules/jest-util/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-util/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-util/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19227,9 +13419,8 @@ }, "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -19244,9 +13435,8 @@ }, "node_modules/jest-validate/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19259,9 +13449,8 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19275,9 +13464,8 @@ }, "node_modules/jest-validate/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19287,24 +13475,21 @@ }, "node_modules/jest-validate/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-validate/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-validate/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19314,9 +13499,8 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -19333,9 +13517,8 @@ }, "node_modules/jest-watcher/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19348,9 +13531,8 @@ }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19364,9 +13546,8 @@ }, "node_modules/jest-watcher/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19376,24 +13557,21 @@ }, "node_modules/jest-watcher/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest-watcher/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-watcher/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19403,18 +13581,16 @@ }, "node_modules/jest-when": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.6.0.tgz", - "integrity": "sha512-+cZWTy0ekAJo7M9Om0Scdor1jm3wDiYJWmXE8U22UVnkH54YCXAuaqz3P+up/FdtOg8g4wHOxV7Thd7nKhT6Dg==", "dev": true, + "license": "MIT", "peerDependencies": { "jest": ">= 25" } }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -19427,18 +13603,16 @@ }, "node_modules/jest-worker/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19451,9 +13625,8 @@ }, "node_modules/jiti": { "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, + "license": "MIT", "optional": true, "bin": { "jiti": "bin/jiti.js" @@ -19461,18 +13634,15 @@ }, "node_modules/js-sha1": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", - "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" + "license": "MIT" }, "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==" + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -19482,9 +13652,8 @@ }, "node_modules/jsesc": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -19494,13 +13663,11 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "license": "MIT" }, "node_modules/json-diff": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/json-diff/-/json-diff-1.0.6.tgz", - "integrity": "sha512-tcFIPRdlc35YkYdGxcamJjllUhXWv4n2rK9oJ2RsAzV4FBkuV4ojKEDgcZ+kpKxDmJKv+PFK65+1tVVOnSeEqA==", + "license": "MIT", "dependencies": { "@ewoudenberg/difflib": "0.1.0", "colors": "^1.4.0", @@ -19515,44 +13682,37 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==" + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "license": "MIT" }, "node_modules/json-size": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-size/-/json-size-1.0.0.tgz", - "integrity": "sha512-sh8Ff4sNVI3FU1LjFXiNpcG9Er9bsn8WbeR79mGj4Ljd+/NBmxqYCV1sPzndUTGsWXa3LVUx3aLlZxpq1DzCBA==", + "license": "MIT", "dependencies": { "utf8-length": "0.0.1" } }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -19562,23 +13722,20 @@ }, "node_modules/jsonata": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.5.tgz", - "integrity": "sha512-wEse9+QLIIU5IaCgtJCPsFi/H4F3qcikWzF4bAELZiRz08ohfx3Q6CjDRf4ZPF5P/92RI3KIHtb7u3jqPaHXdQ==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/jsonc-parser": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -19588,18 +13745,16 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -19613,21 +13768,18 @@ }, "node_modules/jsontoxml": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-1.0.1.tgz", - "integrity": "sha512-dtKGq0K8EWQBRqcAaePSgKR4Hyjfsz/LkurHSV3Cxk4H+h2fWDeaN2jzABz+ZmOJylgXS7FGeWmbZ6jgYUMdJQ==", + "license": "MIT", "engines": { "node": ">=0.2.0" } }, "node_modules/jstoxml": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/jstoxml/-/jstoxml-5.0.2.tgz", - "integrity": "sha512-p/Uyi1nSlAcOL+FbWCbTLAHtMbk/QlPMAE/wRLek7W8646jWII3GtLEKSBzf97UitieRWj1VZcbZxs8arq2nbg==" + "license": "MIT" }, "node_modules/keygrip": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -19637,33 +13789,29 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/koa": { "version": "2.15.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz", - "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==", + "license": "MIT", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -19695,8 +13843,7 @@ }, "node_modules/koa-bodyparser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz", - "integrity": "sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==", + "license": "MIT", "dependencies": { "co-body": "^6.0.0", "copy-to": "^2.0.1", @@ -19708,13 +13855,11 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + "license": "MIT" }, "node_modules/koa-convert": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "license": "MIT", "dependencies": { "co": "^4.6.0", "koa-compose": "^4.1.0" @@ -19725,8 +13870,7 @@ }, "node_modules/koa/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==", + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.4", @@ -19740,24 +13884,21 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/koa2-swagger-ui": { "version": "5.10.0", - "resolved": "https://registry.npmjs.org/koa2-swagger-ui/-/koa2-swagger-ui-5.10.0.tgz", - "integrity": "sha512-UEktDUyWP5BvBB8glVWHN14246IH6WZC8sryONC+v9Rm6FA3/8V+CgXpRuHkAEy0KntMwp2sJ5CutTu6ODtC3w==", + "license": "MIT", "dependencies": { "handlebars": "^4.7.8", "lodash": "^4.17.21", @@ -19769,8 +13910,7 @@ }, "node_modules/koa2-swagger-ui/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==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -19781,8 +13921,7 @@ }, "node_modules/koa2-swagger-ui/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==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -19792,8 +13931,7 @@ }, "node_modules/koa2-swagger-ui/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==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -19806,8 +13944,7 @@ }, "node_modules/koa2-swagger-ui/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==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -19817,8 +13954,7 @@ }, "node_modules/koa2-swagger-ui/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -19831,8 +13967,7 @@ }, "node_modules/koa2-swagger-ui/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -19847,47 +13982,41 @@ }, "node_modules/koa2-swagger-ui/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/koa2-swagger-ui/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/kuler": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + "license": "MIT" }, "node_modules/lazy-ass": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, + "license": "MIT", "engines": { "node": "> 0.8" } }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -19898,28 +14027,24 @@ }, "node_modules/libphonenumber-js": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.1.tgz", - "integrity": "sha512-Wze1LPwcnzvcKGcRHFGFECTaLzxOtujwpf924difr5zniyYv1C2PiW0419qDR7m8lKDxsImu5mwxFuXhXpjmvw==" + "license": "MIT" }, "node_modules/lilconfig": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "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==" + "license": "MIT" }, "node_modules/lint-staged": { "version": "13.3.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", - "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "5.3.0", "commander": "11.0.0", @@ -19944,9 +14069,8 @@ }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -19956,18 +14080,16 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" } }, "node_modules/lint-staged/node_modules/execa": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -19988,18 +14110,16 @@ }, "node_modules/lint-staged/node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=14.18.0" } }, "node_modules/lint-staged/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -20009,9 +14129,8 @@ }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20021,9 +14140,8 @@ }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", - "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -20036,9 +14154,8 @@ }, "node_modules/lint-staged/node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -20051,9 +14168,8 @@ }, "node_modules/lint-staged/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20063,9 +14179,8 @@ }, "node_modules/lint-staged/node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20075,18 +14190,16 @@ }, "node_modules/lint-staged/node_modules/yaml": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, + "license": "ISC", "engines": { "node": ">= 14" } }, "node_modules/listr2": { "version": "6.6.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", - "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^3.1.0", "colorette": "^2.0.20", @@ -20109,9 +14222,8 @@ }, "node_modules/listr2/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20121,9 +14233,8 @@ }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20133,21 +14244,18 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -20162,9 +14270,8 @@ }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -20177,9 +14284,8 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -20194,9 +14300,8 @@ }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -20209,9 +14314,8 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -20222,26 +14326,23 @@ }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "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==", + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -20254,100 +14355,83 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + "license": "MIT" }, "node_modules/lodash.isarguments": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + "license": "MIT" }, "node_modules/lodash.isfunction": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.map": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.snakecase": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + "license": "MIT" }, "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.template": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" @@ -20355,29 +14439,25 @@ }, "node_modules/lodash.templatesettings": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0" } }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + "license": "MIT" }, "node_modules/lodash.upperfirst": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -20391,9 +14471,8 @@ }, "node_modules/log-symbols/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -20406,9 +14485,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20422,9 +14500,8 @@ }, "node_modules/log-symbols/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -20434,24 +14511,21 @@ }, "node_modules/log-symbols/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -20461,9 +14535,8 @@ }, "node_modules/log-update": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", @@ -20480,9 +14553,8 @@ }, "node_modules/log-update/node_modules/ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^1.0.2" }, @@ -20495,9 +14567,8 @@ }, "node_modules/log-update/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20507,9 +14578,8 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20519,9 +14589,8 @@ }, "node_modules/log-update/node_modules/cli-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -20534,15 +14603,13 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/restore-cursor": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -20556,9 +14623,8 @@ }, "node_modules/log-update/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -20573,9 +14639,8 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -20588,9 +14653,8 @@ }, "node_modules/log-update/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, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -20600,9 +14664,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -20617,8 +14680,7 @@ }, "node_modules/logform": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -20633,23 +14695,20 @@ }, "node_modules/long": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + "license": "Apache-2.0" }, "node_modules/longest": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", - "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/loud-rejection": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", "dev": true, + "license": "MIT", "dependencies": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -20660,27 +14719,24 @@ }, "node_modules/lowercase-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/madge": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/madge/-/madge-6.1.0.tgz", - "integrity": "sha512-irWhT5RpFOc6lkzGHKLihonCVgM0YtfNUh4IrFeW3EqHpnt/JHUG3z26j8PeJEktCGB4tmGOOOJi1Rl/ACWucQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.1", "commander": "^7.2.0", @@ -20726,9 +14782,8 @@ }, "node_modules/madge/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -20741,9 +14796,8 @@ }, "node_modules/madge/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20757,9 +14811,8 @@ }, "node_modules/madge/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -20769,33 +14822,29 @@ }, "node_modules/madge/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/madge/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/madge/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/madge/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -20805,9 +14854,8 @@ }, "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -20820,24 +14868,21 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -20847,13 +14892,11 @@ }, "node_modules/match-json": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/match-json/-/match-json-1.3.7.tgz", - "integrity": "sha512-2/GIaio/oVWVHGdKOIbqfgqT5vH91K3c91l6EAsVydMAjB0iGy5PVABicKzNT1VAgHskZHbaZK9q96AmgTEqkw==" + "license": "MIT" }, "node_modules/md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -20862,22 +14905,19 @@ }, "node_modules/md5/node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -20900,9 +14940,8 @@ }, "node_modules/meow/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -20913,9 +14952,8 @@ }, "node_modules/meow/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -20925,9 +14963,8 @@ }, "node_modules/meow/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -20937,9 +14974,8 @@ }, "node_modules/meow/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==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -20949,9 +14985,8 @@ }, "node_modules/meow/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -20964,9 +14999,8 @@ }, "node_modules/meow/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -20979,9 +15013,8 @@ }, "node_modules/meow/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -20991,9 +15024,8 @@ }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -21006,9 +15038,8 @@ }, "node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -21023,24 +15054,21 @@ }, "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -21050,27 +15078,24 @@ }, "node_modules/meow/node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -21080,50 +15105,43 @@ }, "node_modules/meow/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/merge": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", - "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "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 + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -21134,9 +15152,8 @@ }, "node_modules/mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -21146,16 +15163,14 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -21165,35 +15180,31 @@ }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -21203,17 +15214,15 @@ }, "node_modules/minimist": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -21225,17 +15234,15 @@ }, "node_modules/minipass": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -21246,8 +15253,7 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -21257,13 +15263,11 @@ }, "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -21273,9 +15277,8 @@ }, "node_modules/mocked-env": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/mocked-env/-/mocked-env-1.3.5.tgz", - "integrity": "sha512-GyYY6ynVOdEoRlaGpaq8UYwdWkvrsU2xRme9B+WPSuJcNjh17+3QIxSYU6zwee0SbehhV6f06VZ4ahjG+9zdrA==", "dev": true, + "license": "MIT", "dependencies": { "check-more-types": "2.24.0", "debug": "4.3.2", @@ -21288,9 +15291,8 @@ }, "node_modules/mocked-env/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==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -21305,8 +15307,7 @@ }, "node_modules/modclean": { "version": "3.0.0-beta.1", - "resolved": "https://registry.npmjs.org/modclean/-/modclean-3.0.0-beta.1.tgz", - "integrity": "sha512-NyJpuqXMUI190sZePU+dBcwlGaqhfFC+UL5WyNSxmNLOHATg9cVSgRpbY+mUbwUj7t5trb4vYscgXArKevYsdA==", + "license": "MIT", "dependencies": { "await-handler": "^1.1.0", "chalk": "^2.4.1", @@ -21334,16 +15335,14 @@ }, "node_modules/modclean/node_modules/ansi-regex": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/modclean/node_modules/cli-cursor": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, @@ -21353,21 +15352,18 @@ }, "node_modules/modclean/node_modules/cli-spinners": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", - "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/modclean/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "license": "MIT" }, "node_modules/modclean/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21385,8 +15381,7 @@ }, "node_modules/modclean/node_modules/log-symbols": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", "dependencies": { "chalk": "^2.0.1" }, @@ -21396,16 +15391,14 @@ }, "node_modules/modclean/node_modules/mimic-fn": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/modclean/node_modules/onetime": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, @@ -21415,8 +15408,7 @@ }, "node_modules/modclean/node_modules/ora": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", - "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "license": "MIT", "dependencies": { "chalk": "^2.3.1", "cli-cursor": "^2.1.0", @@ -21431,8 +15423,7 @@ }, "node_modules/modclean/node_modules/restore-cursor": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -21443,8 +15434,7 @@ }, "node_modules/modclean/node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -21454,8 +15444,7 @@ }, "node_modules/modclean/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -21465,18 +15454,16 @@ }, "node_modules/modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/module-definition": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.4.0.tgz", - "integrity": "sha512-XxJ88R1v458pifaSkPNLUTdSPNVGMP2SXVncVmApGO+gAfrLANiYe6JofymCzVceGOMwQE2xogxBSc8uB7XegA==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^3.0.0", "node-source-walk": "^4.0.0" @@ -21490,18 +15477,16 @@ }, "node_modules/module-definition/node_modules/ast-module-types": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/module-definition/node_modules/node-source-walk": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.0.0" }, @@ -21511,9 +15496,8 @@ }, "node_modules/module-lookup-amd": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz", - "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.8.1", "debug": "^4.1.0", @@ -21530,15 +15514,13 @@ }, "node_modules/module-lookup-amd/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/module-lookup-amd/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21556,16 +15538,14 @@ }, "node_modules/moment": { "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/moment-timezone": { "version": "0.5.44", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.44.tgz", - "integrity": "sha512-nv3YpzI/8lkQn0U6RkLd+f0W/zy/JnoR5/EyPz/dNkPTBjA2jNLCVxaiQ8QpeLymhSZvX0wCL5s27NQWdOPwAw==", + "license": "MIT", "dependencies": { "moment": "^2.29.4" }, @@ -21575,24 +15555,19 @@ }, "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==" + "license": "MIT" }, "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 + "dev": true, + "license": "ISC" }, "node_modules/nan": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", - "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==" + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -21600,6 +15575,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -21609,31 +15585,26 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + "license": "MIT" }, "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==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "license": "MIT" }, "node_modules/node-cache": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", - "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "license": "MIT", "dependencies": { "clone": "2.x" }, @@ -21643,8 +15614,7 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -21662,8 +15632,7 @@ }, "node_modules/node-gyp-build": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.9.0.tgz", - "integrity": "sha512-zLcTg6P4AbcHPq465ZMFNXx7XpKKJh+7kkN699NiQWisR2uWYOWNWqRHAmbnmKiL4e9aLSlmy5U7rEMUXV59+A==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -21672,14 +15641,12 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-mocks-http": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/node-mocks-http/-/node-mocks-http-1.14.1.tgz", - "integrity": "sha512-mfXuCGonz0A7uG1FEjnypjm34xegeN5+HI6xeGhYKecfgaZhjsmYoLE9LEFmT+53G1n8IuagPZmVnEL/xNsFaA==", + "license": "MIT", "dependencies": { "@types/express": "^4.17.21", "@types/node": "^20.10.6", @@ -21700,16 +15667,14 @@ }, "node_modules/node-mocks-http/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/node-mocks-http/node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -21719,9 +15684,8 @@ }, "node_modules/node-notifier": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-10.0.1.tgz", - "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", "dev": true, + "license": "MIT", "dependencies": { "growly": "^1.3.0", "is-wsl": "^2.2.0", @@ -21733,24 +15697,21 @@ }, "node_modules/node-notifier/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==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/node-releases": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-source-walk": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-5.0.2.tgz", - "integrity": "sha512-Y4jr/8SRS5hzEdZ7SGuvZGwfORvNsSsNRwDXx5WisiqzsVfeftDvRgfeqWNgZvWSJbgubTRVRYBzK6UO+ErqjA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.21.4" }, @@ -21760,8 +15721,7 @@ }, "node_modules/nopt": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -21774,8 +15734,7 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -21785,26 +15744,23 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^2.0.0", "query-string": "^5.0.1", @@ -21816,9 +15772,8 @@ }, "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, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -21828,8 +15783,7 @@ }, "node_modules/npmlog": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "license": "ISC", "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -21839,62 +15793,53 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/oauth-1.0a": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz", - "integrity": "sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==" + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/object-inspect": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object-sizeof": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/object-sizeof/-/object-sizeof-2.6.4.tgz", - "integrity": "sha512-YuJAf7Bi61KROcYmXm8RCeBrBw8UOaJDzTm1gp0eU7RjYi1xEte3/Nmg/VyPaHcJZ3sNojs1Y0xvSrgwkLmcFw==", + "license": "MIT", "dependencies": { "buffer": "^6.0.3" } }, "node_modules/object-sizeof/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -21909,6 +15854,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -21916,8 +15862,7 @@ }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -21933,8 +15878,7 @@ }, "node_modules/object.entries": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -21946,8 +15890,7 @@ }, "node_modules/object.fromentries": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -21962,8 +15905,7 @@ }, "node_modules/object.groupby": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -21973,8 +15915,7 @@ }, "node_modules/object.values": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -21989,8 +15930,7 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -22000,25 +15940,22 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/one-time": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } }, "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, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -22030,21 +15967,17 @@ } }, "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" + "version": "0.0.2" }, "node_modules/openapi-types": { "version": "12.1.3", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", - "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -22059,9 +15992,8 @@ }, "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, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -22082,9 +16014,8 @@ }, "node_modules/ora/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -22097,9 +16028,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -22113,9 +16043,8 @@ }, "node_modules/ora/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -22125,24 +16054,21 @@ }, "node_modules/ora/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ora/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==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -22152,44 +16078,39 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-is-promise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "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==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -22202,8 +16123,7 @@ }, "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==", + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -22216,9 +16136,8 @@ }, "node_modules/p-timeout": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -22228,17 +16147,15 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/p-wait-for": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", - "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", "dev": true, + "license": "MIT", "dependencies": { "p-timeout": "^3.0.0" }, @@ -22251,9 +16168,8 @@ }, "node_modules/p-wait-for/node_modules/p-timeout": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -22263,8 +16179,7 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -22274,14 +16189,12 @@ }, "node_modules/parse-github-repo-url": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha512-bSWyzBKqcSL4RrncTpGsEKoJ7H8a4L3++ifTAbTFeMHyq2wRV+42DGmQcHIrJIvdcacjIOxEuKH/w4tthF17gg==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -22297,69 +16210,60 @@ }, "node_modules/parse-ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/parse-passwd": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/parse-static-imports": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parse-static-imports/-/parse-static-imports-1.1.0.tgz", - "integrity": "sha512-HlxrZcISCblEV0lzXmAHheH/8qEkKgmqkdxyHTPbSqsTUV8GzqmN1L+SSti+VbNPfbBO3bYLPHDiUs2avbAdbA==" + "license": "MIT" }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "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==", + "license": "MIT", "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "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==", + "license": "MIT", "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==" + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -22373,36 +16277,31 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", "dev": true, + "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/path-to-regexp": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", "engines": { "node": ">=8" } }, "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 + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -22412,9 +16311,8 @@ }, "node_modules/pidtree": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -22424,27 +16322,24 @@ }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -22454,18 +16349,16 @@ }, "node_modules/pirates": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "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==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -22475,9 +16368,8 @@ }, "node_modules/pkg-dir/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==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -22488,9 +16380,8 @@ }, "node_modules/pkg-dir/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==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -22500,9 +16391,8 @@ }, "node_modules/pkg-dir/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==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -22515,9 +16405,8 @@ }, "node_modules/pkg-dir/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==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -22527,17 +16416,14 @@ }, "node_modules/pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/postcss": { "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "funding": [ { @@ -22553,6 +16439,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -22564,9 +16451,8 @@ }, "node_modules/postcss-values-parser": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz", - "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "color-name": "^1.1.4", "is-url-superb": "^4.0.0", @@ -22581,15 +16467,13 @@ }, "node_modules/postcss-values-parser/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pprof": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pprof/-/pprof-4.0.0.tgz", - "integrity": "sha512-Yhfk7Y0G1MYsy97oXxmSG5nvbM1sCz9EALiNhW/isAv5Xf7svzP+1RfGeBlS6mLSgRJvgSLh6Mi5DaisQuPttw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.9", "bindings": "^1.2.1", @@ -22607,13 +16491,11 @@ }, "node_modules/pprof-format": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz", - "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA==" + "license": "MIT" }, "node_modules/pprof/node_modules/source-map": { "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -22623,21 +16505,18 @@ }, "node_modules/pprof/node_modules/tr46": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/pprof/node_modules/webidl-conversions": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + "license": "BSD-2-Clause" }, "node_modules/pprof/node_modules/whatwg-url": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -22646,9 +16525,8 @@ }, "node_modules/precinct": { "version": "8.3.1", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", - "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.20.3", "debug": "^4.3.3", @@ -22673,9 +16551,8 @@ }, "node_modules/precinct/node_modules/@typescript-eslint/types": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, + "license": "MIT", "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" }, @@ -22686,9 +16563,8 @@ }, "node_modules/precinct/node_modules/@typescript-eslint/typescript-estree": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0", @@ -22713,9 +16589,8 @@ }, "node_modules/precinct/node_modules/@typescript-eslint/visitor-keys": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" @@ -22730,24 +16605,21 @@ }, "node_modules/precinct/node_modules/ast-module-types": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-3.0.0.tgz", - "integrity": "sha512-CMxMCOCS+4D+DkOQfuZf+vLrSEmY/7xtORwdxs4wtcC1wVgvk2MqFFTwQCFhvWsI4KPU9lcWXPI8DgRiz+xetQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/precinct/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/precinct/node_modules/detective-amd": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.2.tgz", - "integrity": "sha512-jffU26dyqJ37JHR/o44La6CxtrDf3Rt9tvd2IbImJYxWKTMdBjctp37qoZ6ZcY80RHg+kzWz4bXn39e4P7cctQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^3.0.0", "escodegen": "^2.0.0", @@ -22763,9 +16635,8 @@ }, "node_modules/precinct/node_modules/detective-cjs": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.3.tgz", - "integrity": "sha512-ljs7P0Yj9MK64B7G0eNl0ThWSYjhAaSYy+fQcpzaKalYl/UoQBOzOeLCSFEY1qEBhziZ3w7l46KG/nH+s+L7BQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^3.0.0", "node-source-walk": "^4.0.0" @@ -22776,9 +16647,8 @@ }, "node_modules/precinct/node_modules/detective-es6": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.2.tgz", - "integrity": "sha512-eZUKCUsbHm8xoeoCM0z6JFwvDfJ5Ww5HANo+jPR7AzkFpW9Mun3t/TqIF2jjeWa2TFbAiGaWESykf2OQp3oeMw==", "dev": true, + "license": "MIT", "dependencies": { "node-source-walk": "^4.0.0" }, @@ -22788,9 +16658,8 @@ }, "node_modules/precinct/node_modules/detective-postcss": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", - "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^4.1.1", "is-url": "^1.2.4", @@ -22803,9 +16672,8 @@ }, "node_modules/precinct/node_modules/detective-sass": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.2.tgz", - "integrity": "sha512-DNVYbaSlmti/eztFGSfBw4nZvwsTaVXEQ4NsT/uFckxhJrNRFUh24d76KzoCC3aarvpZP9m8sC2L1XbLej4F7g==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^4.0.0" @@ -22816,9 +16684,8 @@ }, "node_modules/precinct/node_modules/detective-scss": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.2.tgz", - "integrity": "sha512-hDWnWh/l0tht/7JQltumpVea/inmkBaanJUcXRB9kEEXVwVUMuZd6z7eusQ6GcBFrfifu3pX/XPyD7StjbAiBg==", "dev": true, + "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "node-source-walk": "^4.0.0" @@ -22829,15 +16696,13 @@ }, "node_modules/precinct/node_modules/detective-stylus": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.3.tgz", - "integrity": "sha512-4/bfIU5kqjwugymoxLXXLltzQNeQfxGoLm2eIaqtnkWxqbhap9puDVpJPVDx96hnptdERzS5Cy6p9N8/08A69Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/precinct/node_modules/detective-typescript": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.2.tgz", - "integrity": "sha512-unqovnhxzvkCz3m1/W4QW4qGsvXCU06aU2BAm8tkza+xLnp9SOFnob2QsTxUv5PdnQKfDvWcv9YeOeFckWejwA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "^4.33.0", "ast-module-types": "^2.7.1", @@ -22850,24 +16715,21 @@ }, "node_modules/precinct/node_modules/detective-typescript/node_modules/ast-module-types": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", - "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/precinct/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/precinct/node_modules/get-amd-module-type": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.2.tgz", - "integrity": "sha512-PcuKwB8ouJnKuAPn6Hk3UtdfKoUV3zXRqVEvj8XGIXqjWfgd1j7QGdXy5Z9OdQfzVt1Sk29HVe/P+X74ccOuqw==", "dev": true, + "license": "MIT", "dependencies": { "ast-module-types": "^3.0.0", "node-source-walk": "^4.2.2" @@ -22878,9 +16740,8 @@ }, "node_modules/precinct/node_modules/node-source-walk": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.3.0.tgz", - "integrity": "sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.0.0" }, @@ -22890,9 +16751,8 @@ }, "node_modules/precinct/node_modules/postcss-values-parser": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "dev": true, + "license": "MIT", "dependencies": { "flatten": "^1.0.2", "indexes-of": "^1.0.1", @@ -22904,9 +16764,8 @@ }, "node_modules/precinct/node_modules/typescript": { "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22917,26 +16776,23 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prepend-http": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/prettier": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz", - "integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -22949,9 +16805,8 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -22961,9 +16816,8 @@ }, "node_modules/pretty-bytes": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -22973,9 +16827,8 @@ }, "node_modules/pretty-format": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -22987,9 +16840,8 @@ }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22999,9 +16851,8 @@ }, "node_modules/pretty-ms": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, + "license": "MIT", "dependencies": { "parse-ms": "^2.1.0" }, @@ -23014,22 +16865,19 @@ }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/prom-client": { "version": "14.2.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-14.2.0.tgz", - "integrity": "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==", + "license": "Apache-2.0", "dependencies": { "tdigest": "^0.1.1" }, @@ -23039,9 +16887,8 @@ }, "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, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -23052,9 +16899,8 @@ }, "node_modules/protobufjs": { "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -23075,13 +16921,11 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -23089,16 +16933,13 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pure-rand": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "dev": true, "funding": [ { @@ -23109,13 +16950,13 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -23123,8 +16964,7 @@ }, "node_modules/qs": { "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -23137,9 +16977,8 @@ }, "node_modules/query-string": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, + "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -23151,8 +16990,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -23166,41 +17003,37 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/quote-unquote": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz", - "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ramda": { "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -23213,9 +17046,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -23228,24 +17060,21 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-is": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -23257,9 +17086,8 @@ }, "node_modules/read-pkg-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -23270,9 +17098,8 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -23282,9 +17109,8 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -23295,9 +17121,8 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -23307,9 +17132,8 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -23319,27 +17143,24 @@ }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -23349,18 +17170,16 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -23373,15 +17192,13 @@ }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -23392,16 +17209,14 @@ }, "node_modules/redis-errors": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/redis-parser": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", "dependencies": { "redis-errors": "^1.0.0" }, @@ -23411,22 +17226,19 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "license": "MIT" }, "node_modules/regexp-tree": { "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, + "license": "MIT", "bin": { "regexp-tree": "bin/regexp-tree" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -23441,9 +17253,8 @@ }, "node_modules/regjsparser": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -23453,8 +17264,6 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -23462,9 +17271,8 @@ }, "node_modules/repeating": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, + "license": "MIT", "dependencies": { "is-finite": "^1.0.0" }, @@ -23474,32 +17282,28 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/requirejs": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz", - "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==", "dev": true, + "license": "MIT", "bin": { "r_js": "bin/r.js", "r.js": "bin/r.js" @@ -23510,9 +17314,8 @@ }, "node_modules/requirejs-config-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz", - "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "^4.0.0", "stringify-object": "^3.2.1" @@ -23523,8 +17326,7 @@ }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -23539,9 +17341,8 @@ }, "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, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -23551,18 +17352,16 @@ }, "node_modules/resolve-dependency-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", - "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, + "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -23573,18 +17372,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-global": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, + "license": "MIT", "dependencies": { "global-dirs": "^0.1.1" }, @@ -23594,27 +17391,24 @@ }, "node_modules/resolve.exports": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/responselike": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^1.0.0" } }, "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, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -23625,8 +17419,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -23634,23 +17427,20 @@ }, "node_modules/rfdc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/right-pad": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", - "integrity": "sha512-bYBjgxmkvTAfgIYy328fmkwhp39v8lwVgWhhrzxPV3yHtcSqyYKe9/XOhvW48UFjATg3VuJbpsp5822ACNvkmw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -23663,8 +17453,7 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -23682,9 +17471,8 @@ }, "node_modules/roarr": { "version": "7.21.0", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-7.21.0.tgz", - "integrity": "sha512-d1rPLcHmQID3GsA3p9d5vKSZYlvrTWhjbmeg9DT5DcPoLpH85VzPmkLkGKhQv376+dfkApaHwNbpYEwDB77Ibg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "fast-printf": "^1.6.9", "safe-stable-stringify": "^2.4.3", @@ -23696,8 +17484,7 @@ }, "node_modules/rs-jsonpath": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rs-jsonpath/-/rs-jsonpath-1.1.2.tgz", - "integrity": "sha512-IQzlqtVyZniK7aOtpKGrv7BvkamSvLJkIhRGoKKDQLppNJe94BVHqpxNRjw/2042nGjtC3vyfCWyHe+3DlWgWA==", + "license": "MIT", "dependencies": { "esprima": "1.2.2", "static-eval": "2.0.2", @@ -23706,8 +17493,6 @@ }, "node_modules/rs-jsonpath/node_modules/esprima": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -23718,17 +17503,14 @@ }, "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, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -23743,23 +17525,22 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -23775,13 +17556,10 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "license": "MIT" }, "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", @@ -23795,21 +17573,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", - "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, + "license": "MIT", "dependencies": { "regexp-tree": "~0.1.1" } }, "node_modules/safe-regex-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -23821,22 +17598,19 @@ }, "node_modules/safe-stable-stringify": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/sass-lookup": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", - "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.16.0" }, @@ -23849,14 +17623,12 @@ }, "node_modules/sass-lookup/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -23869,15 +17641,13 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver-regex": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -23887,8 +17657,7 @@ }, "node_modules/semver/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==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -23898,18 +17667,15 @@ }, "node_modules/semver/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "license": "ISC" }, "node_modules/set-function-length": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.1", "get-intrinsic": "^1.2.1", @@ -23922,8 +17688,7 @@ }, "node_modules/set-function-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -23935,13 +17700,12 @@ }, "node_modules/set-value": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", "funding": [ "https://github.com/sponsors/jonschlinkert", "https://paypal.me/jonathanschlinkert", "https://jonschlinkert.dev/sponsor" ], + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "is-primitive": "^3.0.1" @@ -23952,13 +17716,10 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "license": "ISC" }, "node_modules/sha256": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz", - "integrity": "sha512-kTWMJUaez5iiT9CcMv8jSq6kMhw3ST0uRdcIWl3D77s6AsLXNXRp3heeqqfu5+Dyfu4hwpQnMzhqHh8iNQxw0w==", "dependencies": { "convert-hex": "~0.1.0", "convert-string": "~0.1.0" @@ -23966,8 +17727,7 @@ }, "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==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -23977,22 +17737,19 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shellwords": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -24004,41 +17761,35 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "license": "ISC" }, "node_modules/simple-swizzle": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "license": "MIT" }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -24052,9 +17803,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -24064,9 +17814,8 @@ }, "node_modules/sort-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -24076,26 +17825,23 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -24103,17 +17849,15 @@ }, "node_modules/source-map-support/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -24121,13 +17865,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -24135,13 +17877,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "license": "MIT", "dependencies": { "through": "2" }, @@ -24151,18 +17891,16 @@ }, "node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/split2/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24174,39 +17912,34 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/sqlstring": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", - "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/stack-generator": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/stack-trace": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/stack-utils": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -24216,22 +17949,19 @@ }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + "license": "MIT" }, "node_modules/stacktrace-parser": { "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "license": "MIT", "dependencies": { "type-fest": "^0.7.1" }, @@ -24241,22 +17971,19 @@ }, "node_modules/stacktrace-parser/node_modules/type-fest": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/standard-as-callback": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", - "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + "license": "MIT" }, "node_modules/standard-version": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz", - "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^2.4.2", "conventional-changelog": "3.1.25", @@ -24282,9 +18009,8 @@ }, "node_modules/standard-version/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, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -24293,9 +18019,8 @@ }, "node_modules/standard-version/node_modules/conventional-changelog": { "version": "3.1.25", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", - "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", @@ -24315,9 +18040,8 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-angular": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -24328,9 +18052,8 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -24342,9 +18065,8 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-core": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", @@ -24367,18 +18089,16 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-core/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/standard-version/node_modules/conventional-changelog-jquery": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", - "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -24388,9 +18108,8 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-writer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", @@ -24411,27 +18130,24 @@ }, "node_modules/standard-version/node_modules/conventional-changelog-writer/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/standard-version/node_modules/conventional-changelog-writer/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/standard-version/node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -24449,18 +18165,16 @@ }, "node_modules/standard-version/node_modules/conventional-commits-parser/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/standard-version/node_modules/get-pkg-repo": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", @@ -24476,9 +18190,8 @@ }, "node_modules/standard-version/node_modules/git-semver-tags": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" @@ -24492,18 +18205,16 @@ }, "node_modules/standard-version/node_modules/git-semver-tags/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, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/standard-version/node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -24513,9 +18224,8 @@ }, "node_modules/standard-version/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==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -24525,9 +18235,8 @@ }, "node_modules/standard-version/node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -24540,9 +18249,8 @@ }, "node_modules/standard-version/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24554,15 +18262,13 @@ }, "node_modules/standard-version/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/standard-version/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, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -24578,16 +18284,14 @@ }, "node_modules/static-eval": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", "dependencies": { "escodegen": "^1.8.1" } }, "node_modules/static-eval/node_modules/escodegen": { "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -24607,8 +18311,7 @@ }, "node_modules/static-eval/node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -24619,8 +18322,7 @@ }, "node_modules/static-eval/node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -24635,16 +18337,13 @@ }, "node_modules/static-eval/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "engines": { "node": ">= 0.8.0" } }, "node_modules/static-eval/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==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -24652,8 +18351,7 @@ }, "node_modules/static-eval/node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -24663,31 +18361,26 @@ }, "node_modules/stats-accumulator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/stats-accumulator/-/stats-accumulator-1.1.3.tgz", - "integrity": "sha512-ys8OR2RWx4Y9xC/fkFUKI3t2ElHpR4Xdp8rIWVCTl4DWmfS80gvxl0LwNKYUio/ibBUpsoMaUYbWldonVfPBFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/statsd-client": { "version": "0.4.7", - "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", - "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stream-browserify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -24695,8 +18388,7 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24708,49 +18400,43 @@ }, "node_modules/stream-to-array": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", - "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, + "license": "MIT", "dependencies": { "any-promise": "^1.1.0" } }, "node_modules/strict-uri-encode": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.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==", + "license": "MIT", "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==" + "license": "MIT" }, "node_modules/string-argv": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } }, "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, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -24761,8 +18447,7 @@ }, "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==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -24775,9 +18460,8 @@ "node_modules/string-width-cjs": { "name": "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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -24789,25 +18473,22 @@ }, "node_modules/string-width-cjs/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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string-width/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==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string.prototype.trim": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -24822,8 +18503,7 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -24835,8 +18515,7 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -24848,9 +18527,8 @@ }, "node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -24862,15 +18540,12 @@ }, "node_modules/stringify-package": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz", - "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==", - "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json", - "dev": true + "dev": true, + "license": "ISC" }, "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==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -24881,9 +18556,8 @@ "node_modules/strip-ansi-cjs": { "name": "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, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -24893,27 +18567,24 @@ }, "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, + "license": "MIT", "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -24923,8 +18594,7 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -24934,14 +18604,12 @@ }, "node_modules/strnum": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + "license": "MIT" }, "node_modules/stylus-lookup": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", - "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.8.1", "debug": "^4.1.0" @@ -24955,23 +18623,20 @@ }, "node_modules/stylus-lookup/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/subdirs": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/subdirs/-/subdirs-1.0.1.tgz", - "integrity": "sha512-KSbUKpwQIRcb5Th+l4EzxEZYpCwV/g0pQ348EV7CIM5YEEgzz2L1KJD8FCeTckTiE/TKn2u09DCxpdAL6/iFbg==", + "license": "MIT", "dependencies": { "es6-promise": "^3.0.2" } }, "node_modules/superagent": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", "dev": true, + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -24990,9 +18655,8 @@ }, "node_modules/supertest": { "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", "dev": true, + "license": "MIT", "dependencies": { "methods": "^1.1.2", "superagent": "^8.0.5" @@ -25003,8 +18667,7 @@ }, "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==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -25014,8 +18677,7 @@ }, "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==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -25025,9 +18687,8 @@ }, "node_modules/swagger-cli": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/swagger-cli/-/swagger-cli-4.0.4.tgz", - "integrity": "sha512-Cp8YYuLny3RJFQ4CvOBTaqmOOgYsem52dPx1xM5S4EUWFblIh2Q8atppMZvXKUr1e9xH5RwipYpmdUzdPcxWcA==", "dev": true, + "license": "MIT", "dependencies": { "@apidevtools/swagger-cli": "4.0.4" }, @@ -25040,9 +18701,8 @@ }, "node_modules/synckit": { "version": "0.8.8", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", - "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -25056,17 +18716,15 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -25081,30 +18739,26 @@ }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", "engines": { "node": ">=8" } }, "node_modules/tar/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "license": "ISC" }, "node_modules/tdigest": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", + "license": "MIT", "dependencies": { "bintrees": "1.0.2" } }, "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, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -25116,9 +18770,8 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -25136,33 +18789,28 @@ }, "node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/text-hex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -25170,18 +18818,16 @@ }, "node_modules/timed-out": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -25191,31 +18837,26 @@ }, "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 + "dev": true, + "license": "BSD-3-Clause" }, "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-function": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/to-function/-/to-function-2.0.6.tgz", - "integrity": "sha512-LWfUmW851x5T8+78Nl82CA2j6w0trhoFj4rpS6pFUMgfUMUySDAKPgTvQkUqlWuH3Lihlk5sPyDHSVwmKDSc5Q==", "dependencies": { "component-props": "*" } }, "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==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -25225,47 +18866,41 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/triple-beam": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/ts-graphviz": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-1.8.1.tgz", - "integrity": "sha512-54/fe5iu0Jb6X0pmDmzsA2UHLfyHjUEUwfHtZcEOR0fZ6Myf+dFoO6eNsyL8CBDMJ9u7WWEewduVaiaXlvjSVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -25276,9 +18911,8 @@ }, "node_modules/ts-jest": { "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -25319,18 +18953,16 @@ }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -25371,8 +19003,7 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -25382,8 +19013,7 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -25393,29 +19023,25 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/tsscmp": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -25428,13 +19054,11 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -25444,17 +19068,15 @@ }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -25464,8 +19086,7 @@ }, "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==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -25476,8 +19097,7 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -25489,8 +19109,7 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -25506,8 +19125,7 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -25524,8 +19142,7 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -25537,14 +19154,12 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25555,8 +19170,6 @@ }, "node_modules/ua-parser-js": { "version": "1.0.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", - "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "funding": [ { "type": "opencollective", @@ -25571,14 +19184,14 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "engines": { "node": "*" } }, "node_modules/uglify-js": { "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -25589,8 +19202,7 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -25603,41 +19215,35 @@ }, "node_modules/underscore": { "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + "license": "MIT" }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "license": "MIT" }, "node_modules/uniq": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/unset-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-2.0.1.tgz", - "integrity": "sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg==", + "license": "MIT", "dependencies": { "has-value": "^2.0.2", "isobject": "^4.0.0" @@ -25648,16 +19254,13 @@ }, "node_modules/unset-value/node_modules/isobject": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz", - "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/update-browserslist-db": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -25673,6 +19276,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -25686,17 +19290,15 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-parse-lax": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, + "license": "MIT", "dependencies": { "prepend-http": "^2.0.0" }, @@ -25706,51 +19308,44 @@ }, "node_modules/url-to-options": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/utf8-byte-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "license": "WTFPL" }, "node_modules/utf8-length": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/utf8-length/-/utf8-length-0.0.1.tgz", - "integrity": "sha512-j/XH2ftofBiobnyApxlN/J6j/ixwT89WEjDcjT66d2i0+GIn9RZfzt8lpEXXE4jUe4NsjBSUq70kS2euQ4nnMw==" + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -25761,14 +19356,11 @@ } }, "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + "version": "1.0.9" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -25776,17 +19368,15 @@ }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vscode-json-languageservice": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", "dev": true, + "license": "MIT", "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.3", @@ -25797,63 +19387,54 @@ }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-nls": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/walkdir": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", - "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "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, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -25861,8 +19442,7 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -25875,8 +19455,7 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -25890,14 +19469,12 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.4", @@ -25914,17 +19491,15 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/widest-line": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -25934,8 +19509,7 @@ }, "node_modules/winston": { "version": "3.11.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", - "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", @@ -25955,8 +19529,7 @@ }, "node_modules/winston-transport": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.6.0.tgz", - "integrity": "sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==", + "license": "MIT", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -25968,8 +19541,7 @@ }, "node_modules/winston-transport/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -25981,8 +19553,7 @@ }, "node_modules/winston/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -25994,22 +19565,19 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -26025,9 +19593,8 @@ "node_modules/wrap-ansi-cjs": { "name": "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, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -26042,9 +19609,8 @@ }, "node_modules/wrap-ansi-cjs/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -26057,9 +19623,8 @@ }, "node_modules/wrap-ansi-cjs/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -26069,15 +19634,13 @@ }, "node_modules/wrap-ansi-cjs/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi/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==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -26090,9 +19653,8 @@ }, "node_modules/wrap-ansi/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==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -26102,20 +19664,17 @@ }, "node_modules/wrap-ansi/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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -26126,32 +19685,28 @@ }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } }, "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, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", - "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -26161,9 +19716,8 @@ }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -26179,43 +19733,38 @@ }, "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, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/ylru": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", - "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "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==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -26225,8 +19774,7 @@ }, "node_modules/zod": { "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index af9ef6b4f4..a039fa3207 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", - "@aws-sdk/lib-storage": "^3.474.0", + "@aws-sdk/lib-storage": "^3.600.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", From 3f2a5a664d32b6f64e40846132e262967b40b1c8 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 3 Sep 2024 14:54:49 +0530 Subject: [PATCH 177/201] chore: source integration script filter condition (#3704) Co-authored-by: Sai Sankeerth --- .../alias_type____type_and_user_id_is_given.json | 1 + .../identify_type____type_and_user_id_is_given.json | 1 + test/integrations/testUtils.ts | 9 +++++---- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json index d28c468cb7..b21cf43f37 100644 --- a/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json +++ b/go/webhook/testcases/testdata/testcases/pipedream/alias_type____type_and_user_id_is_given.json @@ -23,6 +23,7 @@ "type": "alias", "previousId": "name@surname.com", "userId": "12345", + "context": {}, "receivedAt": "2024-03-03T04:48:29.000Z", "request_ip": "192.0.2.30", "messageId": "00000000-0000-0000-0000-000000000000" diff --git a/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json b/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json index a8ddaecf11..11b5cc2cb8 100644 --- a/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json +++ b/go/webhook/testcases/testdata/testcases/pipedream/identify_type____type_and_user_id_is_given.json @@ -39,6 +39,7 @@ { "userId": "1", "originalTimestamp": "2020-09-28T19:53:31.900Z", + "context": {}, "traits": { "firstName": "John", "lastName": "doe", diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index 6eaf662c78..13c0727f8f 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -24,16 +24,17 @@ const generateAlphanumericId = (size = 36) => export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): string[] => { const globPattern = join(dirPath, '**', 'data.ts'); let testFilePaths = globSync(globPattern); + let filteredTestFilePaths: string[] = []; if (opts.destination || opts.source) { - testFilePaths = testFilePaths.filter((testFile) => - testFile.includes(`${opts.destination}/` || opts.source), + filteredTestFilePaths = testFilePaths.filter((testFile) => + testFile.includes(`${opts.destination || opts.source}/`), ); } if (opts.feature) { - testFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.feature)); + filteredTestFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.feature)); } - return testFilePaths; + return filteredTestFilePaths; }; export const getTestData = (filePath): TestCaseData[] => { From a2aae58ab7d947a70c655d1b7d8ccc9fd70409c3 Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Tue, 3 Sep 2024 15:52:45 +0530 Subject: [PATCH 178/201] chore: source integration script filter initial condition - 1 (#3706) chore: source integration script filter initial condition Co-authored-by: Sai Sankeerth --- test/integrations/testUtils.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index 13c0727f8f..7d1c2a4317 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -24,11 +24,12 @@ const generateAlphanumericId = (size = 36) => export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): string[] => { const globPattern = join(dirPath, '**', 'data.ts'); let testFilePaths = globSync(globPattern); - let filteredTestFilePaths: string[] = []; + let filteredTestFilePaths: string[] = testFilePaths; - if (opts.destination || opts.source) { - filteredTestFilePaths = testFilePaths.filter((testFile) => - testFile.includes(`${opts.destination || opts.source}/`), + const destinationOrSource = opts.destination || opts.source; + if (destinationOrSource) { + filteredTestFilePaths = testFilePaths.filter( + (testFile) => destinationOrSource && testFile.includes(`${destinationOrSource}/`), ); } if (opts.feature) { From 8f8c3826502102b70bdd390d68f02363a7d44bf3 Mon Sep 17 00:00:00 2001 From: Sandeep Digumarty Date: Tue, 3 Sep 2024 18:29:32 +0530 Subject: [PATCH 179/201] chore: [Snyk] Upgrade @aws-sdk/lib-storage from 3.485.0 to 3.624.0 (#3685) * fix: upgrade @aws-sdk/lib-storage from 3.485.0 to 3.624.0 Snyk has created this PR to upgrade @aws-sdk/lib-storage from 3.485.0 to 3.624.0. See this package in npm: @aws-sdk/lib-storage See this project in Snyk: https://app.snyk.io/org/sandeep-L8FvsjCG7mBBqonjSmN48c/project/4b0f037e-0dab-4719-aeee-b46d2ae82119?utm_source=github&utm_medium=referral&page=upgrade-pr * chore: update package-lock --------- Co-authored-by: snyk-bot Co-authored-by: Sankeerth Co-authored-by: Sai Sankeerth --- package-lock.json | 6132 +++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 5672 insertions(+), 462 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77ed1ae0d6..d0baac29aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", - "@aws-sdk/lib-storage": "^3.600.0", + "@aws-sdk/lib-storage": "^3.637.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", @@ -432,12 +432,14 @@ "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.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==" + }, "node_modules/@aws-crypto/crc32c": { "version": "5.2.0", "license": "Apache-2.0", @@ -447,6 +449,19 @@ "tslib": "^2.6.2" } }, + "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==", + "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==" + }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", "license": "Apache-2.0", @@ -500,8 +515,8 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.637.0", + "node_modules/@aws-sdk/client-personalize": { + "version": "3.642.0", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -550,48 +565,14 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-personalize": { - "version": "3.642.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", "@aws-sdk/middleware-recursion-detection": "3.620.0", @@ -632,270 +613,274 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3": { + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.637.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-bucket-endpoint": "3.620.0", - "@aws-sdk/middleware-expect-continue": "3.620.0", - "@aws-sdk/middleware-flexible-checksums": "3.620.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-location-constraint": "3.609.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.635.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@aws-sdk/xml-builder": "3.609.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-blob-browser": "^3.1.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/hash-stream-node": "^3.1.2", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.637.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.637.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "node_modules/@aws-sdk/client-personalize/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "dependencies": { "tslib": "^2.6.2" }, @@ -903,9 +888,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" @@ -914,9 +900,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-personalize/node_modules/@smithy/util-utf8": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" @@ -925,29 +912,47 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts": { + "node_modules/@aws-sdk/client-s3": { "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.637.0.tgz", + "integrity": "sha512-y6UC94fsMvhKbf0dzfnjVP1HePeGjplfcYfilZU1COIJLyTkMcUv4XcT4I407CGIrvgEafONHkiC09ygqUauNA==", "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/client-sts": "3.637.0", "@aws-sdk/core": "3.635.0", "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", "@aws-sdk/middleware-logger": "3.609.0", "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/middleware-ssec": "3.609.0", "@aws-sdk/middleware-user-agent": "3.637.0", "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.635.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.637.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", "@smithy/config-resolver": "^3.0.5", "@smithy/core": "^2.4.0", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-blob-browser": "^3.1.2", "@smithy/hash-node": "^3.0.3", + "@smithy/hash-stream-node": "^3.1.2", "@smithy/invalid-dependency": "^3.0.3", + "@smithy/md5-js": "^3.0.3", "@smithy/middleware-content-length": "^3.0.5", "@smithy/middleware-endpoint": "^3.1.0", "@smithy/middleware-retry": "^3.0.15", @@ -967,47 +972,68 @@ "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { - "version": "3.0.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/core": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^2.4.0", @@ -1025,22 +1051,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.637.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.637.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", @@ -1052,8 +1066,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", @@ -1070,8 +1086,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.620.1", @@ -1093,8 +1111,10 @@ "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "3.620.1", @@ -1114,8 +1134,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-process": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", @@ -1128,8 +1150,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-sso": "3.637.0", @@ -1144,8 +1168,10 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", @@ -1160,24 +1186,14 @@ "@aws-sdk/client-sts": "^3.621.0" } }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.637.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.637.0", - "@aws-sdk/client-sso": "3.637.0", - "@aws-sdk/client-sts": "3.637.0", - "@aws-sdk/credential-provider-cognito-identity": "3.637.0", - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.637.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1185,314 +1201,5438 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/lib-storage": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.637.0.tgz", - "integrity": "sha512-HiNGOP4a1QrCWwO1joKw4mCp19nLXoF9K52PislBaYDI35IlHC3DP6MeOg5zmElwtL1GtEHFBy5olfPWPsLyLg==", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/smithy-client": "^3.2.0", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.637.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.4", "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.485.0.tgz", + "integrity": "sha512-apN2bEn0PZs0jD4jAfvwO3dlWqw9YIQJ6TAudM1bd3S5vzWqlBBcLfQpK6taHoQaI+WqgUWXLuOf7gRFbGXKPg==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.485.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/core": "^1.2.2", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.637.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", + "dependencies": { + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/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==", + "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-sdk/client-sso/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==" + }, + "node_modules/@aws-sdk/client-sso/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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/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==" + }, + "node_modules/@aws-sdk/client-sso/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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/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==" + }, + "node_modules/@aws-sdk/client-sso/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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/client-sso/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==" + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", + "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/types": "^2.8.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", + "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", + "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", + "dependencies": { + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.485.0.tgz", + "integrity": "sha512-Yvi80DQcbjkYCft471ClE3HuetuNVqntCs6eFOomDcrJaqdOFrXv2kJAxky84MRA/xb7bGlDGAPbTuj1ICputg==", + "dependencies": { + "@smithy/core": "^1.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/signature-v4": "^2.0.0", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.485.0.tgz", + "integrity": "sha512-XIy5h1AcDiY3V286X7KrLA5HAxLfzLGrUGBPFY+GTJGYetDhlJwFz12q6BOkIfeAhUbT2Umb4ptujX9eqpZJHQ==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", + "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-sdk/credential-provider-cognito-identity/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==" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.485.0.tgz", + "integrity": "sha512-1SYhvRu/dNqQ5HcIgm7wIpyn1FsthbgG04o6QyVAnfOxmawFt4nqCEtNCwsmlX7o1ZCTYY+qNrozb7XZy+GKSQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.485.0", + "@aws-sdk/core": "3.485.0", + "@aws-sdk/credential-provider-node": "3.485.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-signing": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/core": "^1.2.2", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-sts": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz", + "integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.485.0", + "@aws-sdk/credential-provider-node": "3.485.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/core": "^1.2.2", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-middleware": "^2.0.9", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", + "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/types": "^2.8.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", + "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.485.0.tgz", + "integrity": "sha512-3XkFgwVU1XOB33dV7t9BKJ/ptdl2iS+0dxE7ecq8aqT2/gsfKmLCae1G17P8WmdD3z0kMDTvnqM2aWgUnSOkmg==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.485.0.tgz", + "integrity": "sha512-2/2Y3Z7cpKf8vbQ+FzoBPxRyb0hGJZB1YrnH7hptVi5gSVe1NiwV5ZtsDnv4cwUfOBqEu97nMXw5IrRO26S0DA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/util-stream": "^2.0.24", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.485.0.tgz", + "integrity": "sha512-cFYF/Bdw7EnT4viSxYpNIv3IBkri/Yb+JpQXl8uDq7bfVJfAN5qZmK07vRkg08xL6TC4F41wshhMSAucGdTwIw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.485.0", + "@aws-sdk/credential-provider-process": "3.485.0", + "@aws-sdk/credential-provider-sso": "3.485.0", + "@aws-sdk/credential-provider-web-identity": "3.485.0", + "@aws-sdk/types": "3.485.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.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.485.0.tgz", + "integrity": "sha512-2DwzO2azkSzngifKDT61W/DL0tSzewuaFHiLJWdfc8Et3mdAQJ9x3KAj8u7XFpjIcGNqk7FiKjN+zeGUuNiEhA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.485.0", + "@aws-sdk/credential-provider-ini": "3.485.0", + "@aws-sdk/credential-provider-process": "3.485.0", + "@aws-sdk/credential-provider-sso": "3.485.0", + "@aws-sdk/credential-provider-web-identity": "3.485.0", + "@aws-sdk/types": "3.485.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.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.485.0.tgz", + "integrity": "sha512-X9qS6ZO/rDKYDgWqD1YmSX7sAUUHax9HbXlgGiTTdtfhZvQh1ZmnH6wiPu5WNliafHZFtZT2W07kgrDLPld/Ug==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.485.0.tgz", + "integrity": "sha512-l0oC8GTrWh+LFQQfSmG1Jai1PX7Mhj9arb/CaS1/tmeZE0hgIXW++tvljYs/Dds4LGXUlaWG+P7BrObf6OyIXA==", + "dependencies": { + "@aws-sdk/client-sso": "3.485.0", + "@aws-sdk/token-providers": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.485.0.tgz", + "integrity": "sha512-WpBFZFE0iXtnibH5POMEKITj/hR0YV5l2n9p8BEvKjdJ63s3Xke1RN20ZdIyKDaRDwj8adnKDgNPEnAKdS4kLw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.485.0.tgz", + "integrity": "sha512-SpGEmiVr+C9Dtc5tZFfFYXSNxbl1jShLlyZPWERHBn4QwGvdXcgPB96I0yvUuitBKrM0winHsCWH7CR/z24kmg==", + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.485.0", + "@aws-sdk/client-sso": "3.485.0", + "@aws-sdk/client-sts": "3.485.0", + "@aws-sdk/credential-provider-cognito-identity": "3.485.0", + "@aws-sdk/credential-provider-env": "3.485.0", + "@aws-sdk/credential-provider-http": "3.485.0", + "@aws-sdk/credential-provider-ini": "3.485.0", + "@aws-sdk/credential-provider-node": "3.485.0", + "@aws-sdk/credential-provider-process": "3.485.0", + "@aws-sdk/credential-provider-sso": "3.485.0", + "@aws-sdk/credential-provider-web-identity": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@smithy/credential-provider-imds": "^2.0.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/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==", + "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-sdk/credential-providers/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==" + }, + "node_modules/@aws-sdk/credential-providers/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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-providers/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==" + }, + "node_modules/@aws-sdk/credential-providers/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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-providers/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==" + }, + "node_modules/@aws-sdk/credential-providers/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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/credential-providers/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==" + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.485.0.tgz", + "integrity": "sha512-1SYhvRu/dNqQ5HcIgm7wIpyn1FsthbgG04o6QyVAnfOxmawFt4nqCEtNCwsmlX7o1ZCTYY+qNrozb7XZy+GKSQ==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.485.0", + "@aws-sdk/core": "3.485.0", + "@aws-sdk/credential-provider-node": "3.485.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-signing": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/core": "^1.2.2", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz", + "integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.485.0", + "@aws-sdk/credential-provider-node": "3.485.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/core": "^1.2.2", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/protocol-http": "^3.0.12", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-middleware": "^2.0.9", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "fast-xml-parser": "4.2.5", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", + "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/types": "^2.8.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", + "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers/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==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.637.0.tgz", + "integrity": "sha512-HiNGOP4a1QrCWwO1joKw4mCp19nLXoF9K52PislBaYDI35IlHC3DP6MeOg5zmElwtL1GtEHFBy5olfPWPsLyLg==", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/smithy-client": "^3.2.0", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.637.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.485.0.tgz", + "integrity": "sha512-1mAUX9dQNGo2RIKseVj7SI/D5abQJQ/Os8hQ0NyVAyyVYF+Yjx5PphKgfhM5yoBwuwZUl6q71XPYEGNx7be6SA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", + "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.485.0.tgz", + "integrity": "sha512-O8IgJ0LHi5wTs5GlpI7nqmmSSagkVdd1shpGgQWY2h0kMSCII8CJZHBG97dlFFpGTvx5EDlhPNek7rl/6F4dRw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.485.0.tgz", + "integrity": "sha512-ZeVNATGNFcqkWDut3luVszROTUzkU5u+rJpB/xmeMoenlDAjPRiHt/ca3WkI5wAnIJ1VSNGpD2sOFLMCH+EWag==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", + "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.485.0.tgz", + "integrity": "sha512-41xzT2p1sOibhsLkdE5rwPJkNbBtKD8Gp36/ySfu0KE415wfXKacElSVxAaBw39/j7iSWDYqqybeEYbAzk+3GQ==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/signature-v4": "^2.0.0", + "@smithy/types": "^2.8.0", + "@smithy/util-middleware": "^2.0.9", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", + "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.485.0.tgz", + "integrity": "sha512-CddCVOn+OPQ0CcchketIg+WF6v+MDLAf3GOYTR2htUxxIm7HABuRd6R3kvQ5Jny9CV8gMt22G1UZITsFexSJlQ==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.485.0.tgz", + "integrity": "sha512-2FB2EQ0sIE+YgFqGtkE1lDIMIL6nYe6MkOHBwBM7bommadKIrbbr2L22bPZGs3ReTsxiJabjzxbuCAVhrpHmhg==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.9", + "@smithy/types": "^2.8.0", + "@smithy/util-config-provider": "^2.1.0", + "@smithy/util-middleware": "^2.0.9", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", + "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.485.0.tgz", + "integrity": "sha512-kOXA1WKIVIFNRqHL8ynVZ3hCKLsgnEmGr2iDR6agDNw5fYIlCO/6N2xR6QdGcLTvUUbwOlz4OvKLUQnWMKAnnA==", + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/middleware-host-header": "3.485.0", + "@aws-sdk/middleware-logger": "3.485.0", + "@aws-sdk/middleware-recursion-detection": "3.485.0", + "@aws-sdk/middleware-user-agent": "3.485.0", + "@aws-sdk/region-config-resolver": "3.485.0", + "@aws-sdk/types": "3.485.0", + "@aws-sdk/util-endpoints": "3.485.0", + "@aws-sdk/util-user-agent-browser": "3.485.0", + "@aws-sdk/util-user-agent-node": "3.485.0", + "@smithy/config-resolver": "^2.0.23", + "@smithy/fetch-http-handler": "^2.3.2", + "@smithy/hash-node": "^2.0.18", + "@smithy/invalid-dependency": "^2.0.16", + "@smithy/middleware-content-length": "^2.0.18", + "@smithy/middleware-endpoint": "^2.3.0", + "@smithy/middleware-retry": "^2.0.26", + "@smithy/middleware-serde": "^2.0.16", + "@smithy/middleware-stack": "^2.0.10", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/node-http-handler": "^2.2.2", + "@smithy/property-provider": "^2.0.0", + "@smithy/protocol-http": "^3.0.12", + "@smithy/shared-ini-file-loader": "^2.0.6", + "@smithy/smithy-client": "^2.2.1", + "@smithy/types": "^2.8.0", + "@smithy/url-parser": "^2.0.16", + "@smithy/util-base64": "^2.0.1", + "@smithy/util-body-length-browser": "^2.0.1", + "@smithy/util-body-length-node": "^2.1.0", + "@smithy/util-defaults-mode-browser": "^2.0.24", + "@smithy/util-defaults-mode-node": "^2.0.32", + "@smithy/util-endpoints": "^1.0.8", + "@smithy/util-retry": "^2.0.9", + "@smithy/util-utf8": "^2.0.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/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==", + "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-sdk/token-providers/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==" + }, + "node_modules/@aws-sdk/token-providers/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==", + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/token-providers/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==" + }, + "node_modules/@aws-sdk/token-providers/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==", + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/token-providers/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==" + }, + "node_modules/@aws-sdk/token-providers/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==", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-sdk/token-providers/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==" + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", + "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/types": "^2.8.0", + "bowser": "^2.11.0", + "tslib": "^2.5.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", + "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "dependencies": { + "@aws-sdk/types": "3.485.0", + "@smithy/node-config-provider": "^2.1.9", + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 14.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.635.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", "dependencies": { - "@aws-sdk/core": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/types": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.485.0.tgz", + "integrity": "sha512-+QW32YQdvZRDOwrAQPo/qCyXoSjgXB6RwJwCwkd8ebJXRXw6tmGKIHaZqYHt/LtBymvnaBgBBADNa4+qFvlOFw==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" + "@smithy/types": "^2.8.0", + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.637.0", + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.485.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.485.0.tgz", + "integrity": "sha512-dTd642F7nJisApF8YjniqQ6U59CP/DCtar11fXf1nG9YNBCBsNNVw5ZfZb5nSNzaIdy27mQioWTCV18JEj1mxg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" + "@aws-sdk/types": "3.485.0", + "@smithy/util-endpoints": "^1.0.8", + "tslib": "^2.5.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.635.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.637.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=16.0.0" + "node": ">= 14.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { @@ -1515,6 +6655,18 @@ "tslib": "^2.6.2" } }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.614.0", "license": "Apache-2.0", @@ -1536,8 +6688,30 @@ } } }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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==", + "dependencies": { + "tslib": "^2.3.1" + } + }, "node_modules/@aws-sdk/xml-builder": { "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", + "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", @@ -4433,6 +9607,8 @@ }, "node_modules/@smithy/chunked-blob-reader": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4440,6 +9616,8 @@ }, "node_modules/@smithy/chunked-blob-reader-native": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", "license": "Apache-2.0", "dependencies": { "@smithy/util-base64": "^3.0.0", @@ -4537,6 +9715,8 @@ }, "node_modules/@smithy/eventstream-serde-browser": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", + "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^3.0.5", @@ -4549,6 +9729,8 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", + "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", @@ -4560,6 +9742,8 @@ }, "node_modules/@smithy/eventstream-serde-node": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", + "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^3.0.5", @@ -4572,6 +9756,8 @@ }, "node_modules/@smithy/eventstream-serde-universal": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", + "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^3.1.2", @@ -4596,6 +9782,8 @@ }, "node_modules/@smithy/hash-blob-browser": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", + "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^3.0.0", @@ -4651,6 +9839,8 @@ }, "node_modules/@smithy/hash-stream-node": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", + "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", @@ -4663,6 +9853,8 @@ }, "node_modules/@smithy/hash-stream-node/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4673,6 +9865,8 @@ }, "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -4684,6 +9878,8 @@ }, "node_modules/@smithy/hash-stream-node/node_modules/@smithy/util-utf8": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -4702,10 +9898,11 @@ } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" @@ -4713,6 +9910,8 @@ }, "node_modules/@smithy/md5-js": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", + "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", @@ -4722,6 +9921,8 @@ }, "node_modules/@smithy/md5-js/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -4732,6 +9933,8 @@ }, "node_modules/@smithy/md5-js/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -4743,6 +9946,8 @@ }, "node_modules/@smithy/md5-js/node_modules/@smithy/util-utf8": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -5075,11 +10280,12 @@ } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.0.0", - "license": "Apache-2.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { - "@smithy/is-array-buffer": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" @@ -5237,11 +10443,12 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.2", - "license": "Apache-2.0", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "@smithy/util-buffer-from": "^2.0.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" @@ -5249,6 +10456,8 @@ }, "node_modules/@smithy/util-waiter": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", + "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.1", @@ -19029,8 +24238,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/tsscmp": { "version": "1.0.6", diff --git a/package.json b/package.json index 7b78ec49c0..07b9fb6f02 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@aws-sdk/client-personalize": "^3.616.0", "@aws-sdk/client-s3": "^3.474.0", "@aws-sdk/credential-providers": "^3.391.0", - "@aws-sdk/lib-storage": "^3.600.0", + "@aws-sdk/lib-storage": "^3.637.0", "@bugsnag/js": "^7.20.2", "@datadog/pprof": "^3.1.0", "@koa/router": "^12.0.0", From 6ba16f6e5d9bb0de773ebcb8be13a78af325a4a1 Mon Sep 17 00:00:00 2001 From: Yashasvi Bajpai <33063622+yashasvibajpai@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:48:00 +0530 Subject: [PATCH 180/201] fix: gaoc bugsnag alert for email.trim (#3693) Co-authored-by: Sankeerth --- .../google_adwords_offline_conversions/utils.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/v0/destinations/google_adwords_offline_conversions/utils.js b/src/v0/destinations/google_adwords_offline_conversions/utils.js index 7228bb8da4..89fe609df9 100644 --- a/src/v0/destinations/google_adwords_offline_conversions/utils.js +++ b/src/v0/destinations/google_adwords_offline_conversions/utils.js @@ -1,5 +1,6 @@ const sha256 = require('sha256'); const SqlString = require('sqlstring'); +const isString = require('lodash/isString'); const { get, set, cloneDeep } = require('lodash'); const { AbortedError, @@ -271,7 +272,9 @@ const getAddConversionPayload = (message, Config) => { const userIdentifierInfo = { email: - hashUserIdentifier && isDefinedAndNotNull(email) ? sha256(email.trim()).toString() : email, + hashUserIdentifier && isString(email) && isDefinedAndNotNull(email) + ? sha256(email.trim()).toString() + : email, phone: hashUserIdentifier && isDefinedAndNotNull(phone) ? sha256(phone.trim()).toString() : phone, address: buildAndGetAddress(message, hashUserIdentifier), @@ -367,7 +370,9 @@ const getClickConversionPayloadAndEndpoint = ( const userIdentifierInfo = { email: - hashUserIdentifier && isDefinedAndNotNull(email) ? sha256(email.trim()).toString() : email, + hashUserIdentifier && isString(email) && isDefinedAndNotNull(email) + ? sha256(email.trim()).toString() + : email, phone: hashUserIdentifier && isDefinedAndNotNull(phone) ? sha256(phone.trim()).toString() : phone, }; From 8aacadb096571426bd0ce3aaad9949e49035f286 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 19:44:29 +0530 Subject: [PATCH 181/201] chore(deps-dev): bump eslint-plugin-prettier from 5.1.3 to 5.2.1 (#3641) Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.1.3 to 5.2.1. - [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases) - [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md) - [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.1.3...v5.2.1) --- updated-dependencies: - dependency-name: eslint-plugin-prettier dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- package-lock.json | 17 ++++++++++------- package.json | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index d0baac29aa..00b2abe242 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,7 +100,7 @@ "eslint-config-prettier": "^8.10.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-json": "^3.1.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-sonarjs": "^0.19.0", "eslint-plugin-unicorn": "^46.0.1", "glob": "^10.3.3", @@ -9436,8 +9436,9 @@ }, "node_modules/@pkgr/core": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -14543,12 +14544,13 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, - "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -23909,9 +23911,10 @@ } }, "node_modules/synckit": { - "version": "0.8.8", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, - "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" diff --git a/package.json b/package.json index 07b9fb6f02..d20514bc21 100644 --- a/package.json +++ b/package.json @@ -145,7 +145,7 @@ "eslint-config-prettier": "^8.10.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-json": "^3.1.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-sonarjs": "^0.19.0", "eslint-plugin-unicorn": "^46.0.1", "glob": "^10.3.3", From 1777c6cb23f95e9c727ed4e2ddb4a2e21f9d0310 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 11:07:19 +0530 Subject: [PATCH 182/201] chore(deps-dev): bump ts-jest from 29.1.1 to 29.2.5 (#3681) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.1.1 to 29.2.5. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.1.1...v29.2.5) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sankeerth --- package-lock.json | 171 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 162 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00b2abe242..80dbdfc784 100644 --- a/package-lock.json +++ b/package-lock.json @@ -118,7 +118,7 @@ "standard-version": "^9.5.0", "supertest": "^6.3.3", "swagger-cli": "^4.0.4", - "ts-jest": "^29.1.0", + "ts-jest": "^29.2.5", "typescript": "^5.0.4" } }, @@ -14112,6 +14112,21 @@ "version": "1.1.1", "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.625", "dev": true, @@ -15124,6 +15139,36 @@ "version": "1.0.0", "license": "MIT" }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/filing-cabinet": { "version": "3.3.1", "dev": true, @@ -17346,6 +17391,94 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/jake/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/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==", + "dev": true + }, + "node_modules/jake/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest": { "version": "29.7.0", "dev": true, @@ -24122,27 +24255,30 @@ } }, "node_modules/ts-jest": { - "version": "29.1.1", + "version": "29.2.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz", + "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, - "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", "jest-util": "^29.0.0", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.6.3", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -24152,6 +24288,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -24163,6 +24302,18 @@ } } }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "21.1.1", "dev": true, diff --git a/package.json b/package.json index d20514bc21..688e2814d9 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "standard-version": "^9.5.0", "supertest": "^6.3.3", "swagger-cli": "^4.0.4", - "ts-jest": "^29.1.0", + "ts-jest": "^29.2.5", "typescript": "^5.0.4" }, "overrides": { From 255f3e52fb66ae6cb55e24938fff60ec6e28b285 Mon Sep 17 00:00:00 2001 From: kanishkkatara Date: Wed, 4 Sep 2024 16:33:26 +0530 Subject: [PATCH 183/201] fix: add namespace and cluster labels to python transformation functions --- src/util/customTransformer-faas.js | 4 ++++ src/util/openfaas/index.js | 7 +++++++ test/__tests__/user_transformation.test.js | 3 ++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/util/customTransformer-faas.js b/src/util/customTransformer-faas.js index 07dc205582..0f59f5db60 100644 --- a/src/util/customTransformer-faas.js +++ b/src/util/customTransformer-faas.js @@ -8,6 +8,8 @@ const { executeFaasFunction, FAAS_AST_FN_NAME, FAAS_AST_VID, + PARENT_NAMESPACE, + PARENT_CLUSTER, } = require('./openfaas'); const { getLibraryCodeV1 } = require('./customTransforrmationsStore-v1'); @@ -26,6 +28,8 @@ function generateFunctionName(userTransformation, libraryVersionIds, testMode, h (libraryVersionIds || []).sort(), ); + ids = ids.concat([PARENT_NAMESPACE, PARENT_CLUSTER]); + if (hashSecret !== '') { ids = ids.concat([hashSecret]); } diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index 1f44df86bb..7d4adf2321 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -38,6 +38,9 @@ const FAAS_READINESS_HTTP_FAILURE_THRESHOLD = const FAAS_READINESS_HTTP_SUCCESS_THRESHOLD = process.env.FAAS_READINESS_HTTP_SUCCESS_THRESHOLD || '1'; +const PARENT_NAMESPACE = process.env.NAMESPACE || 'default'; +const PARENT_CLUSTER = process.env.FAAS_FN_PARENT_CLUSTER || 'default'; + const CONFIG_BACKEND_URL = process.env.CONFIG_BACKEND_URL || 'https://api.rudderlabs.com'; const GEOLOCATION_URL = process.env.GEOLOCATION_URL || ''; const FAAS_AST_VID = 'ast'; @@ -313,6 +316,8 @@ function buildOpenfaasFn(name, code, versionId, libraryVersionIDs, testMode, trM const labels = { 'openfaas-fn': 'true', 'parent-component': 'openfaas', + 'parent-namespace': PARENT_NAMESPACE, + 'parent-cluster': PARENT_CLUSTER, 'com.openfaas.scale.max': FAAS_MAX_PODS_IN_TEXT, 'com.openfaas.scale.min': FAAS_MIN_PODS_IN_TEXT, 'com.openfaas.scale.zero': FAAS_SCALE_ZERO, @@ -431,6 +436,8 @@ module.exports = { buildOpenfaasFn, FAAS_AST_VID, FAAS_AST_FN_NAME, + PARENT_NAMESPACE, + PARENT_CLUSTER, setFunctionInCache, reconcileFunction, }; diff --git a/test/__tests__/user_transformation.test.js b/test/__tests__/user_transformation.test.js index af3d84173a..eff11b083f 100644 --- a/test/__tests__/user_transformation.test.js +++ b/test/__tests__/user_transformation.test.js @@ -92,6 +92,7 @@ const pyLibCode = (name, versionId) => { const pyfaasFuncName = (workspaceId, versionId, libraryVersionIds=[], hashSecret="") => { let ids = [workspaceId, versionId].concat(libraryVersionIds.sort()); + ids = ids.concat(["default", "default"]); if (hashSecret !== "") { ids = ids.concat([hashSecret]); } @@ -119,7 +120,7 @@ describe("User transformation utils", () => { [], false, 'hash-secret'); - expect(fnName).toEqual('fn-workspaceid-34a32ade07ebbc7bc5ea795b8200de9f'); + expect(fnName).toEqual('fn-workspaceid-91d66b4cea6f0ed16cd41258d138d0a8'); }); }); From 6a81e888729e7b2eb6e93db711a3daeb54f6c42f Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 5 Sep 2024 08:13:06 +0000 Subject: [PATCH 184/201] chore(release): 1.77.1 --- CHANGELOG.md | 7 +++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc517256bd..fc2f0ba14a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.77.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.77.0...v1.77.1) (2024-09-05) + + +### Bug Fixes + +* add namespace and cluster labels to python transformation functions ([255f3e5](https://github.com/rudderlabs/rudder-transformer/commit/255f3e52fb66ae6cb55e24938fff60ec6e28b285)) + ## [1.77.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.76.1...v1.77.0) (2024-09-02) diff --git a/package-lock.json b/package-lock.json index 489739879b..5b6bde22eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.77.0", + "version": "1.77.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.77.0", + "version": "1.77.1", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index f51501ff91..bb52905347 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.77.0", + "version": "1.77.1", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From f7783d8fb30093a847f450ee7ddd9449f272b112 Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Fri, 6 Sep 2024 09:54:48 +0530 Subject: [PATCH 185/201] feat: webhook v2 path variables support (#3705) --- src/cdk/v2/destinations/webhook_v2/utils.js | 16 +- .../destinations/webhook_v2/common.ts | 37 ++++- .../webhook_v2/processor/configuration.ts | 2 +- .../destinations/webhook_v2/router/data.ts | 146 +++++++++++++++++- 4 files changed, 189 insertions(+), 12 deletions(-) diff --git a/src/cdk/v2/destinations/webhook_v2/utils.js b/src/cdk/v2/destinations/webhook_v2/utils.js index 8e04b59ec0..329c5fc053 100644 --- a/src/cdk/v2/destinations/webhook_v2/utils.js +++ b/src/cdk/v2/destinations/webhook_v2/utils.js @@ -3,7 +3,12 @@ const { groupBy } = require('lodash'); const { createHash } = require('crypto'); const { ConfigurationError } = require('@rudderstack/integrations-lib'); const { BatchUtils } = require('@rudderstack/workflow-engine'); -const { base64Convertor, applyCustomMappings, isEmptyObject } = require('../../../../v0/util'); +const { + base64Convertor, + applyCustomMappings, + isEmptyObject, + applyJSONStringTemplate, +} = require('../../../../v0/util'); const getAuthHeaders = (config) => { let headers; @@ -36,8 +41,13 @@ const getCustomMappings = (message, mapping) => { } }; -// TODO: write a func to evaluate json path template -const addPathParams = (message, webhookUrl) => webhookUrl; +const addPathParams = (message, webhookUrl) => { + try { + return applyJSONStringTemplate(message, `\`${webhookUrl}\``); + } catch (e) { + throw new ConfigurationError(`[Webhook]:: Error in url template: ${e.message}`); + } +}; const excludeMappedFields = (payload, mapping) => { const rawPayload = { ...payload }; diff --git a/test/integrations/destinations/webhook_v2/common.ts b/test/integrations/destinations/webhook_v2/common.ts index c31a7aabad..dafc5853d5 100644 --- a/test/integrations/destinations/webhook_v2/common.ts +++ b/test/integrations/destinations/webhook_v2/common.ts @@ -41,7 +41,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contact/$traits.userId', + webhookUrl: 'http://abc.com/contacts', auth: 'basicAuth', username: 'test-user', password: '', @@ -92,7 +92,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts/$.traits.userId/', + webhookUrl: 'http://abc.com/contacts/{{$.traits.email}}/', auth: 'apiKeyAuth', apiKeyName: 'x-api-key', apiKeyValue: 'test-api-key', @@ -114,7 +114,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts/$.traits.userId/', + webhookUrl: 'http://abc.com/contacts/{{$.traits.email}}/', auth: 'apiKeyAuth', apiKeyName: 'x-api-key', apiKeyValue: 'test-api-key', @@ -247,6 +247,37 @@ const destinations: Destination[] = [ Transformations: [], WorkspaceID: 'test-workspace-id', }, + { + Config: { + webhookUrl: 'http://abc.com/contacts/{{$.traits.phone}}', + auth: 'noAuth', + method: 'POST', + format: 'JSON', + isBatchingEnabled: true, + maxBatchSize: 4, + headers: [ + { + to: "$.'content-type'", + from: "'application/json'", + }, + { + to: '$.key', + from: '.traits.key', + }, + ], + }, + DestinationDefinition: { + DisplayName: displayName, + ID: '123', + Name: destTypeInUpperCase, + Config: { cdkV2Enabled: true }, + }, + Enabled: true, + ID: '123', + Name: destTypeInUpperCase, + Transformations: [], + WorkspaceID: 'test-workspace-id', + }, ]; const traits = { diff --git a/test/integrations/destinations/webhook_v2/processor/configuration.ts b/test/integrations/destinations/webhook_v2/processor/configuration.ts index 7a1c105ed0..702c20a6fb 100644 --- a/test/integrations/destinations/webhook_v2/processor/configuration.ts +++ b/test/integrations/destinations/webhook_v2/processor/configuration.ts @@ -87,7 +87,7 @@ export const configuration: ProcessorTestData[] = [ output: transformResultBuilder({ method: 'DELETE', userId: '', - endpoint: 'http://abc.com/contacts/$.traits.userId/', + endpoint: 'http://abc.com/contacts/john.doe@example.com/', headers: { 'x-api-key': 'test-api-key', }, diff --git a/test/integrations/destinations/webhook_v2/router/data.ts b/test/integrations/destinations/webhook_v2/router/data.ts index 44c9f0e6fe..34f16f211f 100644 --- a/test/integrations/destinations/webhook_v2/router/data.ts +++ b/test/integrations/destinations/webhook_v2/router/data.ts @@ -120,7 +120,48 @@ const routerRequest3 = { destType, }; -// TODO: add failure testcases +const routerRequest4 = { + input: [ + { + message: { + type: 'identify', + userId: 'userId1', + traits: { ...traits, key: 'value1' }, + }, + metadata: generateMetadata(1), + destination: destinations[6], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits: { ...traits, key: 'value1' }, + }, + metadata: generateMetadata(2), + destination: destinations[6], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits, + }, + metadata: generateMetadata(3), + destination: destinations[6], + }, + { + message: { + type: 'identify', + userId: 'userId1', + traits: { ...traits, phone: '2234567890' }, + }, + metadata: generateMetadata(4), + destination: destinations[6], + }, + ], + destType, +}; + export const data = [ { id: 'webhook_v2-router-test-1', @@ -147,7 +188,7 @@ export const data = [ version: '1', type: 'REST', method: 'GET', - endpoint: 'http://abc.com/contacts/$.traits.userId/', + endpoint: 'http://abc.com/contacts/john.doe@example.com/', headers: { 'x-api-key': 'test-api-key', }, @@ -196,7 +237,7 @@ export const data = [ version: '1', type: 'REST', method: 'GET', - endpoint: 'http://abc.com/contact/$traits.userId', + endpoint: 'http://abc.com/contacts', headers: { Authorization: 'Basic dGVzdC11c2VyOg==', 'content-type': 'application/json', @@ -228,7 +269,7 @@ export const data = [ version: '1', type: 'REST', method: 'GET', - endpoint: 'http://abc.com/contact/$traits.userId', + endpoint: 'http://abc.com/contacts', headers: { Authorization: 'Basic dGVzdC11c2VyOg==', 'content-type': 'application/json', @@ -260,7 +301,7 @@ export const data = [ version: '1', type: 'REST', method: 'GET', - endpoint: 'http://abc.com/contact/$traits.userId', + endpoint: 'http://abc.com/contacts', headers: { Authorization: 'Basic dGVzdC11c2VyOg==', 'content-type': 'application/json', @@ -347,4 +388,99 @@ export const data = [ }, }, }, + { + id: 'webhook_v2-router-test-4', + name: destType, + description: 'Batch multiple requests based on webhook url and headers', + scenario: 'Framework', + successCriteria: 'All events should be transformed successfully and status code should be 200', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: routerRequest4, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://abc.com/contacts/1234567890', + headers: { + 'content-type': 'application/json', + key: 'value1', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { batch: '[]' }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(1), generateMetadata(2)], + batched: true, + statusCode: 200, + destination: destinations[6], + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://abc.com/contacts/1234567890', + headers: { + 'content-type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { batch: '[]' }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(3)], + batched: true, + statusCode: 200, + destination: destinations[6], + }, + { + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'http://abc.com/contacts/2234567890', + headers: { + 'content-type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { batch: '[]' }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + metadata: [generateMetadata(4)], + batched: true, + statusCode: 200, + destination: destinations[6], + }, + ], + }, + }, + }, + }, ]; From 263d0758be828402068278c7c5356b65119e7e9a Mon Sep 17 00:00:00 2001 From: Sankeerth Date: Fri, 6 Sep 2024 20:09:56 +0530 Subject: [PATCH 186/201] fix: circular json bugsnag (#3713) --- src/v0/util/index.js | 21 ++++++- src/v0/util/index.test.js | 124 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 2 deletions(-) diff --git a/src/v0/util/index.js b/src/v0/util/index.js index e1fe8ee942..c3b9570bc4 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -1552,6 +1552,18 @@ const getErrorStatusCode = (error, defaultStatusCode = HTTP_STATUS_CODES.INTERNA } }; +function isAxiosError(err) { + return ( + Array.isArray(err?.config?.adapter) && + err?.config?.adapter?.length > 1 && + typeof err?.request?.socket === 'object' && + !!err?.request?.protocol && + !!err?.request?.method && + !!err?.request?.path && + !!err?.status + ); +} + /** * Used for generating error response with stats from native and built errors */ @@ -1567,11 +1579,15 @@ function generateErrorObject(error, defTags = {}, shouldEnrichErrorMessage = tru error.authErrorCategory, ); let errorMessage = error.message; + if (isAxiosError(errObject.destinationResponse)) { + delete errObject?.destinationResponse.config; + delete errObject?.destinationResponse.request; + } if (shouldEnrichErrorMessage) { - if (error.destinationResponse) { + if (errObject.destinationResponse) { errorMessage = JSON.stringify({ message: errorMessage, - destinationResponse: error.destinationResponse, + destinationResponse: errObject.destinationResponse, }); } errObject.message = errorMessage; @@ -2411,4 +2427,5 @@ module.exports = { validateEventAndLowerCaseConversion, getRelativePathFromURL, removeEmptyKey, + isAxiosError, }; diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js index a8d13ab873..1b99e5ebb7 100644 --- a/src/v0/util/index.test.js +++ b/src/v0/util/index.test.js @@ -8,6 +8,7 @@ const { generateExclusionList, combineBatchRequestsWithSameJobIds, validateEventAndLowerCaseConversion, + isAxiosError, } = require('./index'); const exp = require('constants'); @@ -735,3 +736,126 @@ describe('get relative path from url', () => { expect(utilities.getRelativePathFromURL(null)).toEqual(null); }); }); + +describe('isAxiosError', () => { + const validAxiosError = { + config: { + adapter: ['xhr', 'fetch'], + }, + request: { + socket: {}, + protocol: 'https:', + headers: {}, + method: 'GET', + path: '/api/data', + }, + status: 404, + statusText: 'Not Found', + }; + + it('should return true for a valid Axios error object', () => { + expect(isAxiosError(validAxiosError)).toBe(true); + }); + + it('should return false for null', () => { + expect(isAxiosError(null)).toBe(false); + }); + + it('should return false for undefined', () => { + expect(isAxiosError(undefined)).toBe(false); + }); + + it('should return false for non-object types', () => { + expect(isAxiosError('string')).toBe(false); + expect(isAxiosError(123)).toBe(false); + expect(isAxiosError(true)).toBe(false); + expect(isAxiosError([])).toBe(false); + }); + + it('should return false for an empty object', () => { + expect(isAxiosError({})).toBe(false); + }); + + it('should return false when config is missing', () => { + const { config, ...errorWithoutConfig } = validAxiosError; + expect(isAxiosError(errorWithoutConfig)).toBe(false); + }); + + it('should return false when config.adapter is not an array', () => { + const error = { ...validAxiosError, config: { adapter: 'not an array' } }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when config.adapter has length <= 1', () => { + const error = { ...validAxiosError, config: { adapter: ['some'] } }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when request is missing', () => { + const { request, ...errorWithoutRequest } = validAxiosError; + expect(isAxiosError(errorWithoutRequest)).toBe(false); + }); + + it('should return false when request.socket is missing', () => { + const error = { + ...validAxiosError, + request: { ...validAxiosError.request, socket: undefined }, + }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when request.socket is not an object', () => { + const error = { + ...validAxiosError, + request: { ...validAxiosError.request, socket: 'not an object' }, + }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when request.protocol is missing', () => { + const error = { + ...validAxiosError, + request: { ...validAxiosError.request, protocol: undefined }, + }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when request.method is missing', () => { + const error = { + ...validAxiosError, + request: { ...validAxiosError.request, method: undefined }, + }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when request.path is missing', () => { + const error = { + ...validAxiosError, + request: { ...validAxiosError.request, path: undefined }, + }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when status is missing', () => { + const { status, ...errorWithoutStatus } = validAxiosError; + expect(isAxiosError(errorWithoutStatus)).toBe(false); + }); + + it('should return true when all required properties are present and valid, even with extra properties', () => { + const errorWithExtraProps = { + ...validAxiosError, + extraProp: 'some value', + }; + expect(isAxiosError(errorWithExtraProps)).toBe(true); + }); + + it('should return false when config.adapter is an empty array', () => { + const error = { ...validAxiosError, config: { adapter: [] } }; + expect(isAxiosError(error)).toBe(false); + }); + + it('should return false when status is 0', () => { + const error = { ...validAxiosError, status: 0 }; + expect(isAxiosError(error)).toBe(false); + }); +}); From d381dac3b3dbc8752d88818e679bbe0bde84e27d Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:10:06 +0530 Subject: [PATCH 187/201] refactor: rename webhook v2 destination to http (#3722) --- .../{webhook_v2 => http}/procWorkflow.yaml | 5 ++--- .../{webhook_v2 => http}/rtWorkflow.yaml | 0 .../{webhook_v2 => http}/utils.js | 8 ++++---- .../{webhook_v2 => http}/common.ts | 20 +++++++++---------- .../processor/configuration.ts | 14 ++++++------- .../{webhook_v2 => http}/processor/data.ts | 0 .../{webhook_v2 => http}/router/data.ts | 18 ++++++----------- 7 files changed, 29 insertions(+), 36 deletions(-) rename src/cdk/v2/destinations/{webhook_v2 => http}/procWorkflow.yaml (94%) rename src/cdk/v2/destinations/{webhook_v2 => http}/rtWorkflow.yaml (100%) rename src/cdk/v2/destinations/{webhook_v2 => http}/utils.js (93%) rename test/integrations/destinations/{webhook_v2 => http}/common.ts (93%) rename test/integrations/destinations/{webhook_v2 => http}/processor/configuration.ts (93%) rename test/integrations/destinations/{webhook_v2 => http}/processor/data.ts (100%) rename test/integrations/destinations/{webhook_v2 => http}/router/data.ts (97%) diff --git a/src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml b/src/cdk/v2/destinations/http/procWorkflow.yaml similarity index 94% rename from src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml rename to src/cdk/v2/destinations/http/procWorkflow.yaml index 873a9807ce..080dcdd80a 100644 --- a/src/cdk/v2/destinations/webhook_v2/procWorkflow.yaml +++ b/src/cdk/v2/destinations/http/procWorkflow.yaml @@ -3,7 +3,6 @@ bindings: path: ../../../../constants - path: ../../bindings/jsontemplate exportAll: true - - path: ../../../../v0/destinations/webhook/utils - name: getHashFromArray path: ../../../../v0/util - name: getIntegrationsObj @@ -19,7 +18,7 @@ bindings: steps: - name: validateInput template: | - $.assertConfig(.destination.Config.webhookUrl, "Webhook URL required. Aborting"); + $.assertConfig(.destination.Config.apiUrl, "API URL is required. Aborting"); $.assertConfig(!(.destination.Config.auth === "basicAuth" && !(.destination.Config.username)), "Username is required for Basic Authentication. Aborting"); $.assertConfig(!(.destination.Config.auth === "bearerTokenAuth" && !(.destination.Config.bearerToken)), "Token is required for Bearer Token Authentication. Aborting"); $.assertConfig(!(.destination.Config.auth === "apiKeyAuth" && !(.destination.Config.apiKeyName)), "API Key Name is required for API Key Authentication. Aborting"); @@ -48,7 +47,7 @@ steps: - name: deduceEndPoint template: | - $.context.endpoint = $.addPathParams(.message, .destination.Config.webhookUrl); + $.context.endpoint = $.addPathParams(.message, .destination.Config.apiUrl); - name: prepareBody template: | diff --git a/src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml b/src/cdk/v2/destinations/http/rtWorkflow.yaml similarity index 100% rename from src/cdk/v2/destinations/webhook_v2/rtWorkflow.yaml rename to src/cdk/v2/destinations/http/rtWorkflow.yaml diff --git a/src/cdk/v2/destinations/webhook_v2/utils.js b/src/cdk/v2/destinations/http/utils.js similarity index 93% rename from src/cdk/v2/destinations/webhook_v2/utils.js rename to src/cdk/v2/destinations/http/utils.js index 329c5fc053..355eb03487 100644 --- a/src/cdk/v2/destinations/webhook_v2/utils.js +++ b/src/cdk/v2/destinations/http/utils.js @@ -37,15 +37,15 @@ const getCustomMappings = (message, mapping) => { try { return applyCustomMappings(message, mapping); } catch (e) { - throw new ConfigurationError(`[Webhook]:: Error in custom mappings: ${e.message}`); + throw new ConfigurationError(`Error in custom mappings: ${e.message}`); } }; -const addPathParams = (message, webhookUrl) => { +const addPathParams = (message, apiUrl) => { try { - return applyJSONStringTemplate(message, `\`${webhookUrl}\``); + return applyJSONStringTemplate(message, `\`${apiUrl}\``); } catch (e) { - throw new ConfigurationError(`[Webhook]:: Error in url template: ${e.message}`); + throw new ConfigurationError(`Error in api url template: ${e.message}`); } }; diff --git a/test/integrations/destinations/webhook_v2/common.ts b/test/integrations/destinations/http/common.ts similarity index 93% rename from test/integrations/destinations/webhook_v2/common.ts rename to test/integrations/destinations/http/common.ts index dafc5853d5..f0c8bc8a33 100644 --- a/test/integrations/destinations/webhook_v2/common.ts +++ b/test/integrations/destinations/http/common.ts @@ -1,12 +1,12 @@ import { Destination } from '../../../../src/types'; -const destType = 'webhook_v2'; -const destTypeInUpperCase = 'WEBHOOK_V2'; -const displayName = 'Webhook V2'; +const destType = 'http'; +const destTypeInUpperCase = 'HTTP'; +const displayName = 'HTTP'; const destinations: Destination[] = [ { Config: { - webhookUrl: 'http://abc.com/contacts', + apiUrl: 'http://abc.com/contacts', auth: 'noAuth', method: 'POST', format: 'JSON', @@ -41,7 +41,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts', + apiUrl: 'http://abc.com/contacts', auth: 'basicAuth', username: 'test-user', password: '', @@ -92,7 +92,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts/{{$.traits.email}}/', + apiUrl: 'http://abc.com/contacts/{{$.traits.email}}/', auth: 'apiKeyAuth', apiKeyName: 'x-api-key', apiKeyValue: 'test-api-key', @@ -114,7 +114,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts/{{$.traits.email}}/', + apiUrl: 'http://abc.com/contacts/{{$.traits.email}}/', auth: 'apiKeyAuth', apiKeyName: 'x-api-key', apiKeyValue: 'test-api-key', @@ -136,7 +136,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/events', + apiUrl: 'http://abc.com/events', auth: 'bearerTokenAuth', bearerToken: 'test-token', method: 'POST', @@ -196,7 +196,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/events', + apiUrl: 'http://abc.com/events', auth: 'noAuth', method: 'POST', format: 'JSON', @@ -249,7 +249,7 @@ const destinations: Destination[] = [ }, { Config: { - webhookUrl: 'http://abc.com/contacts/{{$.traits.phone}}', + apiUrl: 'http://abc.com/contacts/{{$.traits.phone}}', auth: 'noAuth', method: 'POST', format: 'JSON', diff --git a/test/integrations/destinations/webhook_v2/processor/configuration.ts b/test/integrations/destinations/http/processor/configuration.ts similarity index 93% rename from test/integrations/destinations/webhook_v2/processor/configuration.ts rename to test/integrations/destinations/http/processor/configuration.ts index 702c20a6fb..b493a236ee 100644 --- a/test/integrations/destinations/webhook_v2/processor/configuration.ts +++ b/test/integrations/destinations/http/processor/configuration.ts @@ -4,7 +4,7 @@ import { destType, destinations, properties, traits } from '../common'; export const configuration: ProcessorTestData[] = [ { - id: 'webhook_v2-configuration-test-1', + id: 'http-configuration-test-1', name: destType, description: 'Identify call with properties mapping', scenario: 'Business', @@ -36,7 +36,7 @@ export const configuration: ProcessorTestData[] = [ output: transformResultBuilder({ method: 'POST', userId: '', - endpoint: destinations[0].Config.webhookUrl, + endpoint: destinations[0].Config.apiUrl, JSON: { contacts: { first_name: 'John', @@ -55,7 +55,7 @@ export const configuration: ProcessorTestData[] = [ }, }, { - id: 'webhook_v2-configuration-test-2', + id: 'http-configuration-test-2', name: destType, description: 'Identify call with api key auth, delete method and path params', scenario: 'Business', @@ -100,7 +100,7 @@ export const configuration: ProcessorTestData[] = [ }, }, { - id: 'webhook_v2-configuration-test-3', + id: 'http-configuration-test-3', name: destType, description: 'Track call with basic auth, get method, headers and query params mapping', scenario: 'Business', @@ -132,7 +132,7 @@ export const configuration: ProcessorTestData[] = [ output: transformResultBuilder({ method: 'GET', userId: '', - endpoint: destinations[1].Config.webhookUrl, + endpoint: destinations[1].Config.apiUrl, headers: { Authorization: 'Basic dGVzdC11c2VyOg==', h1: 'val1', @@ -151,7 +151,7 @@ export const configuration: ProcessorTestData[] = [ }, }, { - id: 'webhook_v2-configuration-test-4', + id: 'http-configuration-test-4', name: destType, description: 'Track call with bearer token, xml format, post method, additional headers and properties mapping', @@ -185,7 +185,7 @@ export const configuration: ProcessorTestData[] = [ output: transformResultBuilder({ method: 'POST', userId: '', - endpoint: destinations[4].Config.webhookUrl, + endpoint: destinations[4].Config.apiUrl, headers: { Authorization: 'Bearer test-token', h1: 'val1', diff --git a/test/integrations/destinations/webhook_v2/processor/data.ts b/test/integrations/destinations/http/processor/data.ts similarity index 100% rename from test/integrations/destinations/webhook_v2/processor/data.ts rename to test/integrations/destinations/http/processor/data.ts diff --git a/test/integrations/destinations/webhook_v2/router/data.ts b/test/integrations/destinations/http/router/data.ts similarity index 97% rename from test/integrations/destinations/webhook_v2/router/data.ts rename to test/integrations/destinations/http/router/data.ts index 34f16f211f..ea14ec7341 100644 --- a/test/integrations/destinations/webhook_v2/router/data.ts +++ b/test/integrations/destinations/http/router/data.ts @@ -1,11 +1,5 @@ import { generateMetadata } from '../../../testUtils'; -import { - destType, - destinations, - traits, - properties, - RouterInstrumentationErrorStatTags, -} from '../common'; +import { destType, destinations, traits, properties } from '../common'; const routerRequest1 = { input: [ @@ -164,7 +158,7 @@ const routerRequest4 = { export const data = [ { - id: 'webhook_v2-router-test-1', + id: 'http-router-test-1', name: destType, description: 'Batch multiple GET requests in a single batch with given batch size', scenario: 'Framework', @@ -212,7 +206,7 @@ export const data = [ }, }, { - id: 'webhook_v2-router-test-2', + id: 'http-router-test-2', name: destType, description: 'Batch multiple GET requests in multiple batches when number of requests are greater then given batch size', @@ -334,7 +328,7 @@ export const data = [ }, }, { - id: 'webhook_v2-router-test-3', + id: 'http-router-test-3', name: destType, description: 'Batch multiple POST requests with properties mappings', scenario: 'Framework', @@ -389,9 +383,9 @@ export const data = [ }, }, { - id: 'webhook_v2-router-test-4', + id: 'http-router-test-4', name: destType, - description: 'Batch multiple requests based on webhook url and headers', + description: 'Batch multiple requests based on api url and headers', scenario: 'Framework', successCriteria: 'All events should be transformed successfully and status code should be 200', feature: 'router', From f77d2ab4125a1a44bba95bebbee25bb4fac032da Mon Sep 17 00:00:00 2001 From: Anant Jain <62471433+anantjain45823@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:27:20 +0530 Subject: [PATCH 188/201] feat: onboard X(Twiiter) Audience (#3696) * feat: onboard X(Twiiter) Audience * chore: add test cases * chore: add router test cases * chore: small fixes * fix: common mock value for twitter ads and audience * chore: config fallback * fix: root level batching stringification --- src/features.json | 1 + src/v0/destinations/x_audience/config.js | 5 + src/v0/destinations/x_audience/transform.js | 76 ++++++ src/v0/destinations/x_audience/utils.js | 241 ++++++++++++++++++ .../destinations/x_audience/common.ts | 27 ++ .../destinations/x_audience/processor/data.ts | 236 +++++++++++++++++ .../destinations/x_audience/router/data.ts | 235 +++++++++++++++++ 7 files changed, 821 insertions(+) create mode 100644 src/v0/destinations/x_audience/config.js create mode 100644 src/v0/destinations/x_audience/transform.js create mode 100644 src/v0/destinations/x_audience/utils.js create mode 100644 test/integrations/destinations/x_audience/common.ts create mode 100644 test/integrations/destinations/x_audience/processor/data.ts create mode 100644 test/integrations/destinations/x_audience/router/data.ts diff --git a/src/features.json b/src/features.json index 77ab5cb243..503df3eccf 100644 --- a/src/features.json +++ b/src/features.json @@ -77,6 +77,7 @@ "CLICKSEND": true, "ZOHO": true, "CORDIAL": true, + "X_AUDIENCE": true, "BLOOMREACH_CATALOG": true, "SMARTLY": true, "WEBHOOK_V2": true diff --git a/src/v0/destinations/x_audience/config.js b/src/v0/destinations/x_audience/config.js new file mode 100644 index 0000000000..37b35c00b7 --- /dev/null +++ b/src/v0/destinations/x_audience/config.js @@ -0,0 +1,5 @@ +const BASE_URL = + 'https://ads-api.twitter.com/12/accounts/:account_id/custom_audiences/:audience_id/users'; +const MAX_PAYLOAD_SIZE_IN_BYTES = 4000000; +const MAX_OPERATIONS = 2500; +module.exports = { BASE_URL, MAX_PAYLOAD_SIZE_IN_BYTES, MAX_OPERATIONS }; diff --git a/src/v0/destinations/x_audience/transform.js b/src/v0/destinations/x_audience/transform.js new file mode 100644 index 0000000000..69f76507e5 --- /dev/null +++ b/src/v0/destinations/x_audience/transform.js @@ -0,0 +1,76 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +const { + removeUndefinedAndNullAndEmptyValues, + InstrumentationError, + ConfigurationError, +} = require('@rudderstack/integrations-lib'); +const { handleRtTfSingleEventError } = require('../../util'); +const { batchEvents, buildResponseWithJSON, getUserDetails } = require('./utils'); +/** + * This function returns audience object in the form of destination API + * @param {*} message + * @param {*} destination + * @param {*} metadata + */ +const processRecordEvent = (message, config) => { + const { fields, action, type } = message; + if (type !== 'record') { + throw new InstrumentationError(`[X AUDIENCE]: ${type} is not supported`); + } + const { accountId, audienceId } = { config }; + if (accountId) { + throw new ConfigurationError('[X AUDIENCE]: Account Id not found'); + } + if (audienceId) { + throw new ConfigurationError('[X AUDIENCE]: Audience Id not found'); + } + const { effective_at, expires_at } = fields; + const users = [getUserDetails(fields, config)]; + + return { + operation_type: action !== 'delete' ? 'Update' : 'Delete', + params: removeUndefinedAndNullAndEmptyValues({ + effective_at, + expires_at, + users, + }), + }; +}; +const process = (event) => { + const { message, destination, metadata } = event; + const Config = destination.Config || destination.config; + + const payload = [processRecordEvent(message, Config)]; + return buildResponseWithJSON(payload, Config, metadata); +}; +const processRouterDest = async (inputs, reqMetadata) => { + const responseList = []; // list containing single track event payload + const errorRespList = []; // list of error + const { destination } = inputs[0]; + const Config = destination.Config || destination.config; + inputs.map(async (event) => { + try { + if (event.message.statusCode) { + // already transformed event + responseList.push(event); + } else { + // if not transformed + responseList.push({ + message: processRecordEvent(event.message, Config), + metadata: event.metadata, + destination, + }); + } + } catch (error) { + const errRespEvent = handleRtTfSingleEventError(event, error, reqMetadata); + errorRespList.push(errRespEvent); + } + }); + let batchedResponseList = []; + if (responseList.length > 0) { + batchedResponseList = batchEvents(responseList, destination); + } + return [...batchedResponseList, ...errorRespList]; +}; + +module.exports = { process, processRouterDest, buildResponseWithJSON }; diff --git a/src/v0/destinations/x_audience/utils.js b/src/v0/destinations/x_audience/utils.js new file mode 100644 index 0000000000..62c825efac --- /dev/null +++ b/src/v0/destinations/x_audience/utils.js @@ -0,0 +1,241 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +const sha256 = require('sha256'); +const lodash = require('lodash'); +const jsonSize = require('json-size'); +const { OAuthSecretError } = require('@rudderstack/integrations-lib'); +const { + defaultRequestConfig, + getSuccessRespEvents, + removeUndefinedAndNullAndEmptyValues, +} = require('../../util'); +const { MAX_PAYLOAD_SIZE_IN_BYTES, BASE_URL, MAX_OPERATIONS } = require('./config'); +const { getAuthHeaderForRequest } = require('../twitter_ads/util'); +const { JSON_MIME_TYPE } = require('../../util/constant'); + +const getOAuthFields = ({ secret }) => { + if (!secret) { + throw new OAuthSecretError('[X Audience]:: OAuth - access keys not found'); + } + const oAuthObject = { + consumerKey: secret.consumerKey, + consumerSecret: secret.consumerSecret, + accessToken: secret.accessToken, + accessTokenSecret: secret.accessTokenSecret, + }; + return oAuthObject; +}; + +// Docs: https://developer.x.com/en/docs/x-ads-api/audiences/api-reference/custom-audience-user +const buildResponseWithJSON = (payload, config, metadata) => { + const response = defaultRequestConfig(); + const accountId = Object.values(JSON.parse(config.accountId))[0]; + response.endpoint = BASE_URL.replace(':account_id', accountId).replace( + ':audience_id', + config.audienceId, + ); + response.body.JSON_ARRAY = { batch: JSON.stringify(payload) }; + // required to be in accordance with oauth package + const request = { + url: response.endpoint, + method: response.method, + body: response.body.JSON, + }; + + const oAuthObject = getOAuthFields(metadata); + const authHeader = getAuthHeaderForRequest(request, oAuthObject).Authorization; + response.headers = { + Authorization: authHeader, + 'Content-Type': JSON_MIME_TYPE, + }; + return response; +}; + +/** + * This fucntion groups the response list based upoin 3 fields that are + * 1. operation_type + * 2. effective_at + * 3. expires_at + * @param {*} respList + * @returns object + */ +const groupResponsesUsingOperationAndTime = (respList) => { + const eventGroups = lodash.groupBy(respList, (item) => [ + item.message.operation_type, + item.message.params.effective_at, + item.message.params.expires_at, + ]); + return eventGroups; +}; +/** + * This function groups the operation object list based upon max sized or batch size allowed + * and returns the final batched request + * @param {*} operationObjectList + */ +const getFinalResponseList = (operationObjectList, destination) => { + const respList = []; + let currentMetadataList = []; + let currentBatchedRequest = []; + let metadataWithSecret; // used for authentication purposes + operationObjectList.forEach((operationObject) => { + const { payload, metadataList } = operationObject; + metadataWithSecret = { secret: metadataList[0].secret }; + if ( + currentBatchedRequest.length >= MAX_OPERATIONS || + jsonSize([...currentBatchedRequest, payload]) > MAX_PAYLOAD_SIZE_IN_BYTES + ) { + respList.push( + getSuccessRespEvents( + buildResponseWithJSON( + currentBatchedRequest, + destination.Config || destination.config, + metadataWithSecret, + ), + currentMetadataList, + destination, + true, + ), + ); + currentBatchedRequest = [payload]; + currentMetadataList = metadataList; + } else { + currentBatchedRequest.push(payload); + currentMetadataList.push(...metadataList); + } + }); + // pushing the remainder operation payloads as well + respList.push( + getSuccessRespEvents( + buildResponseWithJSON( + currentBatchedRequest, + destination.Config || destination.config, + metadataWithSecret, + ), + currentMetadataList, + destination, + true, + ), + ); + return respList; +}; + +/** + * This function takes in object containing key as the grouped parameter + * and values as list of all concerned payloads ( having the same key ). + * Then it makes the list of operationObject based upon + * operation and effective and expires time and json size of payload of one object + * @param {*} eventGroups + * @returns + */ +const getOperationObjectList = (eventGroups) => { + const operationList = []; + Object.keys(eventGroups).forEach((group) => { + const { operation_type, params } = eventGroups[group][0].message; + const { effective_at, expires_at } = params; + let currentUserList = []; + let currentMetadata = []; + eventGroups[group].forEach((event) => { + const newUsers = event.message.params.users; + // calculating size before appending the user and metadata list + if (jsonSize([...currentUserList, ...newUsers]) < MAX_PAYLOAD_SIZE_IN_BYTES) { + currentUserList.push(...event.message.params.users); + currentMetadata.push(event.metadata); + } else { + operationList.push({ + payload: { + operation_type, + params: removeUndefinedAndNullAndEmptyValues({ + effective_at, + expires_at, + users: currentUserList, + }), + }, + metadataList: currentMetadata, + }); + currentUserList = event.message.params.users; + currentMetadata = event.metadata; + } + }); + // all the remaining user and metadata list used in one list + operationList.push({ + payload: { + operation_type, + params: removeUndefinedAndNullAndEmptyValues({ + effective_at, + expires_at, + users: currentUserList, + }), + }, + metadataList: currentMetadata, + }); + }); + return operationList; +}; + +/** + * Input: [{ + message: { + operation_type: 'Delete', + params: { + effective_at, + expires_at, + users, + }, + }, + metadata, + destination, + }] + * @param {*} responseList + */ +const batchEvents = (responseList, destination) => { + const eventGroups = groupResponsesUsingOperationAndTime(responseList); + const operationObjectList = getOperationObjectList(eventGroups); + /* at this point we will a list of json payloads in the following format + operationObjectList = [ + { + payload:{ + operation_type: 'Delete', + params: { + effective_at, + expires_at, + users, + }, + metadata: + [ + {jobId:1}, {jobId:2} + ] + } + ] + */ + return getFinalResponseList(operationObjectList, destination); +}; + +const getUserDetails = (fields, config) => { + const { enableHash } = config; + const { email, phone_number, handle, device_id, twitter_id, partner_user_id } = fields; + const user = {}; + if (email) { + const emailList = email.split(','); + user.email = enableHash ? emailList.map(sha256) : emailList; + } + if (phone_number) { + const phone_numberList = phone_number.split(','); + user.phone_number = enableHash ? phone_numberList.map(sha256) : phone_numberList; + } + if (handle) { + const handleList = handle.split(','); + user.handle = enableHash ? handleList.map(sha256) : handleList; + } + if (device_id) { + const device_idList = device_id.split(','); + user.device_id = enableHash ? device_idList.map(sha256) : device_idList; + } + if (twitter_id) { + const twitter_idList = twitter_id.split(','); + user.twitter_id = enableHash ? twitter_idList.map(sha256) : twitter_idList; + } + if (partner_user_id) { + user.partner_user_id = partner_user_id.split(','); + } + return removeUndefinedAndNullAndEmptyValues(user); +}; +module.exports = { getOAuthFields, batchEvents, getUserDetails, buildResponseWithJSON }; diff --git a/test/integrations/destinations/x_audience/common.ts b/test/integrations/destinations/x_audience/common.ts new file mode 100644 index 0000000000..547e04ba84 --- /dev/null +++ b/test/integrations/destinations/x_audience/common.ts @@ -0,0 +1,27 @@ +export const authHeaderConstant = + 'OAuth oauth_consumer_key="qwe", oauth_nonce="V1kMh028kZLLhfeYozuL0B45Pcx6LvuW", oauth_signature="Di4cuoGv4PnCMMEeqfWTcqhvdwc%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1685603652", oauth_token="dummyAccessToken", oauth_version="1.0"'; +export const destination = { + Config: { + accountId: '{"Dummy Name":"1234"}', + audienceId: 'dummyId', + }, + ID: 'xpixel-1234', +}; + +export const generateMetadata = (jobId: number, userId?: string): any => { + return { + jobId, + attemptNum: 1, + userId: userId || 'default-userId', + sourceId: 'default-sourceId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + secret: { + consumerKey: 'validConsumerKey', + consumerSecret: 'validConsumerSecret', + accessToken: 'validAccessToken', + accessTokenSecret: 'validAccessTokenSecret', + }, + dontBatch: false, + }; +}; diff --git a/test/integrations/destinations/x_audience/processor/data.ts b/test/integrations/destinations/x_audience/processor/data.ts new file mode 100644 index 0000000000..deada7ab58 --- /dev/null +++ b/test/integrations/destinations/x_audience/processor/data.ts @@ -0,0 +1,236 @@ +import { destination, authHeaderConstant, generateMetadata } from '../common'; + +const fields = { + email: 'abc@xyz.com,a+1@xyz.com', + phone_number: '98765433232,21323', + handle: '@abc,@xyz', + twitter_id: 'tid1,tid2', + partner_user_id: 'puid1,puid2', +}; + +export const data = [ + { + name: 'x_audience', + description: 'All traits are present with hash enbaled for the audience with insert operation', + successCriteria: 'It should be passed with 200 Ok with all traits mapped after hashing', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination: { ...destination, Config: { ...destination.Config, enableHash: true } }, + message: { + type: 'record', + action: 'insert', + fields: { + ...fields, + device_id: 'did123,did456', + effective_at: '2024-05-15T00:00:00Z', + expires_at: '2025-05-15T00:00:00Z', + }, + context: {}, + recordId: '1', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://ads-api.twitter.com/12/accounts/1234/custom_audiences/dummyId/users', + headers: { + Authorization: authHeaderConstant, + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: JSON.stringify([ + { + operation_type: 'Update', + params: { + effective_at: '2024-05-15T00:00:00Z', + expires_at: '2025-05-15T00:00:00Z', + users: [ + { + email: [ + 'ee278943de84e5d6243578ee1a1057bcce0e50daad9755f45dfa64b60b13bc5d', + '27a1b87036e9b0f43235026e7cb1493f1838b6fe41965ea04486d82e499f8401', + ], + phone_number: [ + '76742d946d9f6d0c844da5648e461896227782ccf1cd0db64573f39dbd92e05f', + '69c3bf36e0476c08a883fd6a995f67fc6d362c865549312fb5170737945fd073', + ], + handle: [ + '771c7b0ff2eff313009a81739307c3f7cde375acd7902b11061266a899a375f6', + '7bde3c2d41eab9043df37c9adf4f5f7591c632340d1cabc894e438e881fdd5f6', + ], + device_id: [ + '85a598fd6c8834f2d4da3d6886bb53d0032021e137307ec91d3f0da78e9bfa5b', + '936444046bea8b5d9de6bcae59b6f196ea4bb59945bc93e84bc9533dbf3e01c0', + ], + twitter_id: [ + 'a70d41727df61f21ce0ec81cca51c58f516b6151275d9293d7437bf15fa22e0d', + 'e39994d056999d79ff5a35b02cf2af946fc14bd7bd1b799b58619796584af02f', + ], + partner_user_id: ['puid1', 'puid2'], + }, + ], + }, + }, + ]), + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + metadata: generateMetadata(1), + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'x_audience', + description: 'All traits are present with hash disabled for the audience with delete operation', + successCriteria: 'It should be passed with 200 Ok with all traits mapped without hashing', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'record', + action: 'delete', + fields, + channel: 'sources', + context: {}, + recordId: '1', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://ads-api.twitter.com/12/accounts/1234/custom_audiences/dummyId/users', + headers: { + Authorization: authHeaderConstant, + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: JSON.stringify([ + { + operation_type: 'Delete', + params: { + users: [ + { + email: ['abc@xyz.com', 'a+1@xyz.com'], + phone_number: ['98765433232', '21323'], + handle: ['@abc', '@xyz'], + twitter_id: ['tid1', 'tid2'], + partner_user_id: ['puid1', 'puid2'], + }, + ], + }, + }, + ]), + }, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + metadata: generateMetadata(1), + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'x_audience', + description: 'Type Validation case', + successCriteria: 'It should be passed with 200 Ok giving validation error', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + destination, + message: { + type: 'identify', + context: {}, + recordId: '1', + }, + metadata: generateMetadata(1), + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: generateMetadata(1), + statusCode: 400, + error: '[X AUDIENCE]: identify is not supported', + statTags: { + errorCategory: 'dataValidation', + destinationId: 'default-destinationId', + errorType: 'instrumentation', + destType: 'X_AUDIENCE', + module: 'destination', + implementation: 'native', + workspaceId: 'default-workspaceId', + feature: 'processor', + }, + }, + ], + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: (_) => { + jest.mock('../../../../../src/v0/destinations/twitter_ads/util', () => ({ + getAuthHeaderForRequest: (_a, _b) => { + return { Authorization: authHeaderConstant }; + }, + })); + }, +})); diff --git a/test/integrations/destinations/x_audience/router/data.ts b/test/integrations/destinations/x_audience/router/data.ts new file mode 100644 index 0000000000..228a5ecd89 --- /dev/null +++ b/test/integrations/destinations/x_audience/router/data.ts @@ -0,0 +1,235 @@ +import { destination, authHeaderConstant, generateMetadata } from '../common'; + +export const data = [ + { + name: 'x_audience', + id: 'router-test-1', + description: + 'case with 2 record with no effective and expire at date with insert operations, 4 insert with 2 each having same effective and expire at and one delete and one failure event', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: { + input: [ + { + destination, + message: { + type: 'record', + action: 'delete', + fields: { email: 'email1@abc.com' }, + channel: 'sources', + context: {}, + recordId: '1', + }, + metadata: generateMetadata(1), + }, + { + destination, + message: { + type: 'record', + action: 'insert', + fields: { email: 'email2@abc.com' }, + channel: 'sources', + context: {}, + recordId: '2', + }, + metadata: generateMetadata(2), + }, + { + destination, + message: { + type: 'record', + action: 'insert', + fields: { email: 'email3@abc.com' }, + channel: 'sources', + context: {}, + recordId: '3', + }, + metadata: generateMetadata(3), + }, + { + destination, + message: { + type: 'record', + action: 'update', + fields: { + email: 'email4@abc.com', + expires_at: 'some date', + effective_at: 'some effective date', + }, + channel: 'sources', + context: {}, + recordId: '4', + }, + metadata: generateMetadata(4), + }, + { + destination, + message: { + type: 'record', + action: 'update', + fields: { + email: 'email5@abc.com', + expires_at: 'some date', + effective_at: 'some effective date', + }, + channel: 'sources', + context: {}, + recordId: '5', + }, + metadata: generateMetadata(5), + }, + { + destination, + message: { + type: 'identify', + context: {}, + recordId: '1', + }, + metadata: generateMetadata(6), + }, + ], + destType: 'x_audience', + }, + method: 'POST', + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + batched: true, + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://ads-api.twitter.com/12/accounts/1234/custom_audiences/dummyId/users', + headers: { + Authorization: authHeaderConstant, + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: JSON.stringify([ + { + operation_type: 'Delete', + params: { + users: [ + { + email: ['email1@abc.com'], + }, + ], + }, + }, + { + operation_type: 'Update', + params: { + users: [ + { + email: ['email2@abc.com'], + }, + { + email: ['email3@abc.com'], + }, + ], + }, + }, + ]), + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + destination, + metadata: [generateMetadata(1), generateMetadata(2), generateMetadata(3)], + statusCode: 200, + }, + { + batched: true, + batchedRequest: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: + 'https://ads-api.twitter.com/12/accounts/1234/custom_audiences/dummyId/users', + headers: { + Authorization: authHeaderConstant, + 'Content-Type': 'application/json', + }, + params: {}, + body: { + JSON: {}, + JSON_ARRAY: { + batch: JSON.stringify([ + { + operation_type: 'Update', + params: { + effective_at: 'some effective date', + expires_at: 'some date', + users: [ + { + email: ['email4@abc.com'], + }, + { + email: ['email5@abc.com'], + }, + ], + }, + }, + ]), + }, + XML: {}, + FORM: {}, + }, + files: {}, + }, + destination, + metadata: [generateMetadata(4), generateMetadata(5)], + statusCode: 200, + }, + { + metadata: [generateMetadata(6)], + destination, + batched: false, + statusCode: 400, + error: '[X AUDIENCE]: identify is not supported', + statTags: { + errorCategory: 'dataValidation', + destinationId: 'default-destinationId', + errorType: 'instrumentation', + destType: 'X_AUDIENCE', + module: 'destination', + implementation: 'native', + workspaceId: 'default-workspaceId', + feature: 'router', + }, + }, + ], + }, + }, + }, + }, +].map((tc) => ({ + ...tc, + mockFns: (_) => { + jest.mock('../../../../../src/v0/destinations/twitter_ads/util', () => ({ + getAuthHeaderForRequest: (_a, _b) => { + return { Authorization: authHeaderConstant }; + }, + })); + jest.mock('../../../../../src/v0/destinations/x_audience/config', () => ({ + BASE_URL: + 'https://ads-api.twitter.com/12/accounts/:account_id/custom_audiences/:audience_id/users', + MAX_PAYLOAD_SIZE_IN_BYTES: 40000, + MAX_OPERATIONS: 2, + })); + }, +})); From 8dcf1b3c5aff424d39bece8c9912ec4a1eb221ea Mon Sep 17 00:00:00 2001 From: Abhimanyu Babbar Date: Wed, 11 Sep 2024 12:05:07 +0530 Subject: [PATCH 189/201] fix: added support for window stabilization fix through envs (#3720) * fix: added support for window stabilization fix through envs * fix: updated the error message matching condition for race condition when spinning up the fn --- src/util/openfaas/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/util/openfaas/index.js b/src/util/openfaas/index.js index 1f44df86bb..2411395bc3 100644 --- a/src/util/openfaas/index.js +++ b/src/util/openfaas/index.js @@ -45,6 +45,7 @@ const FAAS_AST_FN_NAME = 'fn-ast'; const CUSTOM_NETWORK_POLICY_WORKSPACE_IDS = process.env.CUSTOM_NETWORK_POLICY_WORKSPACE_IDS || ''; const customNetworkPolicyWorkspaceIds = CUSTOM_NETWORK_POLICY_WORKSPACE_IDS.split(','); const CUSTOMER_TIER = process.env.CUSTOMER_TIER || 'shared'; +const FAAS_SCALE_DOWN_WINDOW = process.env.FAAS_SCALE_DOWN_WINDOW || ''; // Go time values are supported ( max 5m or 300s ) // Initialise node cache const functionListCache = new NodeCache(); @@ -243,7 +244,7 @@ const deployFaasFunction = async ( if ( ((error.statusCode === 500 || error.statusCode === 400) && error.message.includes('already exists')) || - (error.statusCode === 409 && error.message.includes('Conflict change already made')) + (error.statusCode === 409 && error.message.includes('Conflicting change already made')) ) { setFunctionInCache(functionName); throw new RetryRequestError(`${functionName} already exists`); @@ -328,6 +329,10 @@ function buildOpenfaasFn(name, code, versionId, libraryVersionIDs, testMode, trM 'customer-tier': CUSTOMER_TIER, }; + if (FAAS_SCALE_DOWN_WINDOW !== '') { + labels['com.openfaas.scale.down.window'] = FAAS_SCALE_DOWN_WINDOW; + } + if (trMetadata.workspaceId && customNetworkPolicyWorkspaceIds.includes(trMetadata.workspaceId)) { labels['custom-network-policy'] = 'true'; } From b4f4dd1c43f8fd4b4f744413d79cfe8f5f77708b Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:26:23 +0530 Subject: [PATCH 190/201] feat: add source id isolation for reverse etl (#3496) * feat: add job run id level isolation * feat: add group by sourceID for rETL * fix: lint isues * fix: lint issues * fix: component test cases * chore: add fallback to destination and source ids * chore: revert test cases * chore: refactor to use sources.job_id to group events --- src/services/destination/cdkV2Integration.ts | 70 +++++------ src/services/destination/nativeIntegration.ts | 7 +- src/v0/util/index.js | 22 +++- src/v0/util/index.test.js | 111 +++++++++++++++++- 4 files changed, 163 insertions(+), 47 deletions(-) diff --git a/src/services/destination/cdkV2Integration.ts b/src/services/destination/cdkV2Integration.ts index a91bc5674b..0789a98c1e 100644 --- a/src/services/destination/cdkV2Integration.ts +++ b/src/services/destination/cdkV2Integration.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable class-methods-use-this */ import { TransformationError } from '@rudderstack/integrations-lib'; -import groupBy from 'lodash/groupBy'; import { processCdkV2Workflow } from '../../cdk/v2/handler'; import { DestinationService } from '../../interfaces/DestinationService'; import { @@ -20,6 +19,7 @@ import { } from '../../types/index'; import stats from '../../util/stats'; import { CatchErr } from '../../util/types'; +import { groupRouterTransformEvents } from '../../v0/util'; import tags from '../../v0/util/tags'; import { DestinationPostTransformationService } from './postTransformation'; @@ -112,46 +112,38 @@ export class CDKV2DestinationService implements DestinationService { _version: string, requestMetadata: NonNullable, ): Promise { - const allDestEvents: object = groupBy( - events, - (ev: RouterTransformationRequestData) => ev.destination?.ID, - ); + const groupedEvents: RouterTransformationRequestData[][] = groupRouterTransformEvents(events); const response: RouterTransformationResponse[][] = await Promise.all( - Object.values(allDestEvents).map( - async (destInputArray: RouterTransformationRequestData[]) => { - const metaTo = this.getTags( - destinationType, - destInputArray[0].metadata.destinationId, - destInputArray[0].metadata.workspaceId, - tags.FEATURES.ROUTER, - ); - metaTo.metadata = destInputArray[0].metadata; - try { - const doRouterTransformationResponse: RouterTransformationResponse[] = - await processCdkV2Workflow( - destinationType, - destInputArray, - tags.FEATURES.ROUTER, - requestMetadata, - ); - return DestinationPostTransformationService.handleRouterTransformSuccessEvents( - doRouterTransformationResponse, - undefined, - metaTo, - tags.IMPLEMENTATIONS.CDK_V2, - destinationType.toUpperCase(), + groupedEvents.map(async (destInputArray: RouterTransformationRequestData[]) => { + const metaTo = this.getTags( + destinationType, + destInputArray[0].metadata.destinationId, + destInputArray[0].metadata.workspaceId, + tags.FEATURES.ROUTER, + ); + metaTo.metadata = destInputArray[0].metadata; + try { + const doRouterTransformationResponse: RouterTransformationResponse[] = + await processCdkV2Workflow( + destinationType, + destInputArray, + tags.FEATURES.ROUTER, + requestMetadata, ); - } catch (error: CatchErr) { - metaTo.metadatas = destInputArray.map((input) => input.metadata); - const erroredResp = - DestinationPostTransformationService.handleRouterTransformFailureEvents( - error, - metaTo, - ); - return [erroredResp]; - } - }, - ), + return DestinationPostTransformationService.handleRouterTransformSuccessEvents( + doRouterTransformationResponse, + undefined, + metaTo, + tags.IMPLEMENTATIONS.CDK_V2, + destinationType.toUpperCase(), + ); + } catch (error: CatchErr) { + metaTo.metadatas = destInputArray.map((input) => input.metadata); + const erroredResp = + DestinationPostTransformationService.handleRouterTransformFailureEvents(error, metaTo); + return [erroredResp]; + } + }), ); return response.flat(); } diff --git a/src/services/destination/nativeIntegration.ts b/src/services/destination/nativeIntegration.ts index 38a27ea71d..38ec934ff7 100644 --- a/src/services/destination/nativeIntegration.ts +++ b/src/services/destination/nativeIntegration.ts @@ -26,6 +26,7 @@ import { import stats from '../../util/stats'; import tags from '../../v0/util/tags'; import { DestinationPostTransformationService } from './postTransformation'; +import { groupRouterTransformEvents } from '../../v0/util'; export class NativeIntegrationDestinationService implements DestinationService { public init() {} @@ -99,11 +100,7 @@ export class NativeIntegrationDestinationService implements DestinationService { requestMetadata: NonNullable, ): Promise { const destHandler = FetchHandler.getDestHandler(destinationType, version); - const allDestEvents: NonNullable = groupBy( - events, - (ev: RouterTransformationRequestData) => ev.destination?.ID, - ); - const groupedEvents: RouterTransformationRequestData[][] = Object.values(allDestEvents); + const groupedEvents: RouterTransformationRequestData[][] = groupRouterTransformEvents(events); const response: RouterTransformationResponse[][] = await Promise.all( groupedEvents.map(async (destInputArray: RouterTransformationRequestData[]) => { const metaTO = this.getTags( diff --git a/src/v0/util/index.js b/src/v0/util/index.js index c3b9570bc4..6eb6312589 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -2281,8 +2281,14 @@ const validateEventAndLowerCaseConversion = (event, isMandatory, convertToLowerC return convertToLowerCase ? event.toString().toLowerCase() : event.toString(); }; -const applyCustomMappings = (message, mappings) => - JsonTemplateEngine.createAsSync(mappings, { defaultPathType: PathType.JSON }).evaluate(message); +/** + * This function applies custom mappings to the event. + * @param {*} event The event to be transformed. + * @param {*} mappings The custom mappings to be applied. + * @returns {object} The transformed event. + */ +const applyCustomMappings = (event, mappings) => + JsonTemplateEngine.createAsSync(mappings, { defaultPathType: PathType.JSON }).evaluate(event); const applyJSONStringTemplate = (message, template) => JsonTemplateEngine.createAsSync(template.replace(/{{/g, '${').replace(/}}/g, '}'), { @@ -2290,6 +2296,17 @@ const applyJSONStringTemplate = (message, template) => }).evaluate(message); /** + * This groups the events by destination ID and source ID. + * Note: sourceID is only used for rETL events. + * @param {*} events The events to be grouped. + * @returns {array} The array of grouped events. + */ +const groupRouterTransformEvents = (events) => + Object.values( + lodash.groupBy(events, (ev) => [ev.destination?.ID, ev.context?.sources?.job_id || 'default']), + ); + +/* * Gets url path omitting the hostname & protocol * * **Note**: @@ -2364,6 +2381,7 @@ module.exports = { getValueFromMessage, getValueFromPropertiesOrTraits, getValuesAsArrayFromConfig, + groupRouterTransformEvents, handleSourceKeysOperation, hashToSha256, isAppleFamily, diff --git a/src/v0/util/index.test.js b/src/v0/util/index.test.js index 1b99e5ebb7..6bf689eca7 100644 --- a/src/v0/util/index.test.js +++ b/src/v0/util/index.test.js @@ -1,4 +1,4 @@ -const { TAG_NAMES, InstrumentationError } = require('@rudderstack/integrations-lib'); +const { InstrumentationError } = require('@rudderstack/integrations-lib'); const utilities = require('.'); const { getFuncTestData } = require('../../../test/testHelper'); const { FilteredEventsError } = require('./errorTypes'); @@ -8,6 +8,7 @@ const { generateExclusionList, combineBatchRequestsWithSameJobIds, validateEventAndLowerCaseConversion, + groupRouterTransformEvents, isAxiosError, } = require('./index'); const exp = require('constants'); @@ -693,6 +694,114 @@ describe('extractCustomFields', () => { }); }); +describe('groupRouterTransformEvents', () => { + it('should group events by destination.ID and context.sources.job_id', () => { + const events = [ + { + destination: { ID: 'dest1' }, + context: { sources: { job_id: 'job1' } }, + }, + { + destination: { ID: 'dest1' }, + context: { sources: { job_id: 'job2' } }, + }, + { + destination: { ID: 'dest2' }, + context: { sources: { job_id: 'job1' } }, + }, + ]; + const result = groupRouterTransformEvents(events); + + expect(result.length).toBe(3); // 3 unique groups + expect(result).toEqual([ + [{ destination: { ID: 'dest1' }, context: { sources: { job_id: 'job1' } } }], + [{ destination: { ID: 'dest1' }, context: { sources: { job_id: 'job2' } } }], + [{ destination: { ID: 'dest2' }, context: { sources: { job_id: 'job1' } } }], + ]); + }); + + it('should group events by default job_id if context.sources.job_id is missing', () => { + const events = [ + { + destination: { ID: 'dest1' }, + context: { sources: {} }, + }, + { + destination: { ID: 'dest1' }, + context: { sources: { job_id: 'job1' } }, + }, + ]; + const result = groupRouterTransformEvents(events); + + expect(result.length).toBe(2); // 2 unique groups + expect(result).toEqual([ + [{ destination: { ID: 'dest1' }, context: { sources: {} } }], + [{ destination: { ID: 'dest1' }, context: { sources: { job_id: 'job1' } } }], + ]); + }); + + it('should group events by default job_id if context or context.sources is missing', () => { + const events = [ + { + destination: { ID: 'dest1' }, + }, + { + destination: { ID: 'dest1' }, + context: { sources: { job_id: 'job1' } }, + }, + ]; + const result = groupRouterTransformEvents(events); + + expect(result.length).toBe(2); // 2 unique groups + expect(result).toEqual([ + [{ destination: { ID: 'dest1' } }], + [{ destination: { ID: 'dest1' }, context: { sources: { job_id: 'job1' } } }], + ]); + }); + + it('should use "default" when destination.ID is missing', () => { + const events = [ + { + context: { sources: { job_id: 'job1' } }, + }, + { + destination: { ID: 'dest1' }, + context: { sources: { job_id: 'job1' } }, + }, + ]; + const result = groupRouterTransformEvents(events); + + expect(result.length).toBe(2); // 2 unique groups + expect(result).toEqual([ + [{ context: { sources: { job_id: 'job1' } } }], + [{ destination: { ID: 'dest1' }, context: { sources: { job_id: 'job1' } } }], + ]); + }); + + it('should return an empty array when there are no events', () => { + const events = []; + const result = groupRouterTransformEvents(events); + + expect(result).toEqual([]); + }); + + it('should handle events with completely missing context and destination', () => { + const events = [ + {}, + { destination: { ID: 'dest1' } }, + { context: { sources: { job_id: 'job1' } } }, + ]; + const result = groupRouterTransformEvents(events); + + expect(result.length).toBe(3); // 3 unique groups + expect(result).toEqual([ + [{}], + [{ destination: { ID: 'dest1' } }], + [{ context: { sources: { job_id: 'job1' } } }], + ]); + }); +}); + describe('applyJSONStringTemplate', () => { it('should apply JSON string template to the payload', () => { const payload = { From 16598edd55320a57a7079b0db6ee460a5a8a9c99 Mon Sep 17 00:00:00 2001 From: BonapartePC Date: Thu, 12 Sep 2024 15:31:17 +0530 Subject: [PATCH 191/201] chore: check if object is converted to string and stringify it --- src/warehouse/index.js | 64 ++++++++++++++++++++++++++++++++ test/__tests__/warehouse.test.js | 18 ++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/src/warehouse/index.js b/src/warehouse/index.js index f62f02af79..5018969e2a 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -208,6 +208,20 @@ function setDataFromInputAndComputeColumnTypes( level = 0, ) { if (!input || !isObject(input)) return; + if (completePrefix.endsWith('context_traits_') && isStringLikeObject(input)) { + if (prefix === 'context_traits_') { + appendColumnNameAndType( + utils, + eventType, + `${prefix}`, + stringLikeObjectToString(input), + output, + columnTypes, + options, + ); + } + return; + } Object.keys(input).forEach((key) => { const isValidLegacyJSONPath = isValidLegacyJsonPathKey( eventType, @@ -272,6 +286,56 @@ function setDataFromInputAndComputeColumnTypes( }); } +function isNonNegativeInteger(str) { + if (str.length === 0) return false; + for (let i = 0; i < str.length; i++) { + const charCode = str.charCodeAt(i); + if (charCode < 48 || charCode > 57) return false; + } + return true; +} + +function isStringLikeObject(obj) { + if (typeof obj !== 'object' || obj === null) return false; + + const keys = Object.keys(obj); + if (keys.length === 0) return false; + + let minKey = Infinity; + let maxKey = -Infinity; + + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = obj[key]; + + if (!isNonNegativeInteger(key)) return false; + if (typeof value !== 'string' || value.length !== 1) return false; + + const numKey = parseInt(key, 10); + if (numKey < minKey) minKey = numKey; + if (numKey > maxKey) maxKey = numKey; + } + + return (minKey === 0 || minKey === 1) && maxKey - minKey + 1 === keys.length; +} + +function stringLikeObjectToString(obj) { + if (!isStringLikeObject(obj)) { + return obj; // Return the original input if it's not a valid string-like object + } + + const keys = Object.keys(obj) + .map(Number) + .sort((a, b) => a - b); + let result = ''; + + for (let i = 0; i < keys.length; i++) { + result += obj[keys[i].toString()]; + } + + return result; +} + /* * uuid_ts and loaded_at datatypes are passed from here to create appropriate columns. * Corresponding values are inserted when loading into the warehouse diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index 2c89120686..98c40da562 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -1233,4 +1233,20 @@ describe("isBlank", () => { expect(isBlank(testCase.input)).toEqual(testCase.expected); }); } -}); \ No newline at end of file +}); + +describe("context traits", () => { + for (const e of eventTypes) { + let i = input(e); + i.message.context= {"traits": {1: "f", 2: "o"}}; + i.message.traits = "bar"; + if (i.metadata) delete i.metadata.sourceCategory; + transformers.forEach((transformer, index) => { + const received = transformer.process(i); + let columns = Object.keys(received[0].metadata.columns); + console.log(columns); + expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual("string"); + expect(received[0].data[integrationCasedString(integrations[index], "context_traits")]).toEqual("fo"); + }); + } +}) \ No newline at end of file From e8f82fc336a9adb686e7a38c8593a20636bed4a2 Mon Sep 17 00:00:00 2001 From: BonapartePC Date: Thu, 12 Sep 2024 19:13:30 +0530 Subject: [PATCH 192/201] add more tests --- src/warehouse/index.js | 4 ++ test/__tests__/warehouse.test.js | 100 +++++++++++++++++++++++++++---- 2 files changed, 93 insertions(+), 11 deletions(-) diff --git a/src/warehouse/index.js b/src/warehouse/index.js index 5018969e2a..eb95fc8c88 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -316,6 +316,10 @@ function isStringLikeObject(obj) { if (numKey > maxKey) maxKey = numKey; } + for (let i = minKey; i <= maxKey; i++) { + if (!keys.includes(i.toString())) return false; + } + return (minKey === 0 || minKey === 1) && maxKey - minKey + 1 === keys.length; } diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index 98c40da562..a0094a3703 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -1236,17 +1236,95 @@ describe("isBlank", () => { }); describe("context traits", () => { - for (const e of eventTypes) { - let i = input(e); - i.message.context= {"traits": {1: "f", 2: "o"}}; - i.message.traits = "bar"; - if (i.metadata) delete i.metadata.sourceCategory; - transformers.forEach((transformer, index) => { - const received = transformer.process(i); - let columns = Object.keys(received[0].metadata.columns); - console.log(columns); - expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual("string"); - expect(received[0].data[integrationCasedString(integrations[index], "context_traits")]).toEqual("fo"); + const testCases = [ + { + name: "context traits with string like object", + input: {"1":"f","2":"o", "3":"o"}, + expectedData: "foo", + expectedMetadata: "string", + expectedColumns: ["context_traits"] + }, + { + name: "context traits with string like object with missing keys", + input: {"1":"a","3":"a"}, + expectedData: "a", + expectedMetadata: "string", + expectedColumns: ["context_traits_1", "context_traits_3"] + }, + { + name: "context traits with empty object", + input: {}, + expectedData: {}, + expectedColumns: [], + }, + { + name: "context traits with empty array", + input: [], + expectedData: [], + expectedMetadata: "array", + expectedColumns: [] + }, + { + name: "context traits with null", + input: null, + expectedData: null, + expectedMetadata: "null", + expectedColumns: [] + }, + { + name: "context traits with undefined", + input: undefined, + expectedData: undefined, + expectedMetadata: "undefined", + expectedColumns: [] + }, + { + name: "context traits with string", + input: "already a string", + expectedData: "already a string", + expectedMetadata: "string", + expectedColumns: ["context_traits"] + }, + { + name: "context traits with number", + input: 42, + expectedData: 42, + expectedMetadata: "int", + expectedColumns: ["context_traits"] + }, + { + name: "context traits with boolean", + input: true, + expectedData: true, + expectedMetadata: "boolean", + expectedColumns: ["context_traits"] + }, + { + name: "context traits with array", + input: ["a", "b", "cd"], + expectedData: ["a", "b", "cd"], + expectedMetadata: "string", + expectedColumns: ["context_traits"] + } + ]; + for (const t of testCases) { + it(`should return ${t.expectedData} for ${t.name}`, () => { + for (const e of eventTypes) { + let i = input(e); + i.message.context = {"traits": t.input}; + if (i.metadata) delete i.metadata.sourceCategory; + transformers.forEach((transformer, index) => { + const received = transformer.process(i); + if(t.expectedColumns.length === 0) { + expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual(undefined); + expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual(undefined); + } + for (const column of t.expectedColumns) { + expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); + expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); + } + }); + } }); } }) \ No newline at end of file From 632d9af27a5f18de83d699f4464e86f028932e4f Mon Sep 17 00:00:00 2001 From: Jayachand Mopidevi Date: Thu, 12 Sep 2024 19:54:03 +0530 Subject: [PATCH 193/201] chore: adding a new violation type Advance-Rules-Violation (#3715) --- src/util/eventValidation.js | 23 +++++++++++++++++++++++ test/__tests__/eventValidation.test.js | 6 ++++-- test/__tests__/trackingPlan.test.js | 4 ++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/util/eventValidation.js b/src/util/eventValidation.js index 9f3ecd859d..46a494ee5c 100644 --- a/src/util/eventValidation.js +++ b/src/util/eventValidation.js @@ -30,6 +30,7 @@ const violationTypes = { AdditionalProperties: 'Additional-Properties', UnknownViolation: 'Unknown-Violation', UnplannedEvent: 'Unplanned-Event', + AdvanceRulesViolation: 'Advance-Rules-Violation', }; const supportedEventTypes = { @@ -227,6 +228,28 @@ async function validate(event) { }, }; break; + case 'minLength': + case 'maxLength': + case 'pattern': + case 'format': + case 'multipleOf': + case 'minimum': + case 'maximum': + case 'exclusiveMinimum': + case 'exclusiveMaximum': + case 'minItems': + case 'maxItems': + case 'uniqueItems': + case 'enum': + rudderValidationError = { + type: violationTypes.AdvanceRulesViolation, + message: error.message, + meta: { + instancePath: error.instancePath, + schemaPath: error.schemaPath, + }, + }; + break; default: rudderValidationError = { type: violationTypes.UnknownViolation, diff --git a/test/__tests__/eventValidation.test.js b/test/__tests__/eventValidation.test.js index b802b6f886..9f28416457 100644 --- a/test/__tests__/eventValidation.test.js +++ b/test/__tests__/eventValidation.test.js @@ -266,7 +266,8 @@ const validationErrorsTestCases = [ validationErrors: [ { type: "Datatype-Mismatch" }, { type: "Unplanned-Event" }, - { type: "Additional-Properties" } + { type: "Additional-Properties" }, + { type: "Advance-Rules-Violation" } ], output: true }, @@ -283,7 +284,8 @@ const validationErrorsTestCases = [ validationErrors: [ { type: "Datatype-Mismatch" }, { type: "Unplanned-Event" }, - { type: "Additional-Properties" } + { type: "Additional-Properties" }, + { type: "Advance-Rules-Violation" } ], output: true }, diff --git a/test/__tests__/trackingPlan.test.js b/test/__tests__/trackingPlan.test.js index 19606b38b9..1c5db08bd4 100644 --- a/test/__tests__/trackingPlan.test.js +++ b/test/__tests__/trackingPlan.test.js @@ -614,7 +614,7 @@ const eventValidationTestCases = [ trackingPlan, output: [ { - type: "Unknown-Violation", + type: "Advance-Rules-Violation", message: "must be <= 4", meta: { instancePath: "/properties/revenue", @@ -665,7 +665,7 @@ const eventValidationTestCases = [ instancePath: "/properties/dateString", schemaPath: "#/properties/properties/properties/dateString/format", }, - type: "Unknown-Violation", + type: "Advance-Rules-Violation", } ] }, From 44b5ea3338e86c99f34b416ceb710fc73095b606 Mon Sep 17 00:00:00 2001 From: BonapartePC Date: Fri, 13 Sep 2024 15:00:49 +0530 Subject: [PATCH 194/201] add support for group --- src/warehouse/index.js | 6 ++--- test/__tests__/warehouse.test.js | 39 ++++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/src/warehouse/index.js b/src/warehouse/index.js index eb95fc8c88..d79a12c40b 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -208,12 +208,12 @@ function setDataFromInputAndComputeColumnTypes( level = 0, ) { if (!input || !isObject(input)) return; - if (completePrefix.endsWith('context_traits_') && isStringLikeObject(input)) { - if (prefix === 'context_traits_') { + if ((completePrefix.endsWith('context_traits_') || completePrefix === 'group_traits_') && isStringLikeObject(input)) { + if (prefix === 'context_traits_' || completePrefix === 'group_traits_') { appendColumnNameAndType( utils, eventType, - `${prefix}`, + `${prefix.length > 0 ? prefix : completePrefix}`, stringLikeObjectToString(input), output, columnTypes, diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index a0094a3703..05e3eb1482 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -1242,69 +1242,79 @@ describe("context traits", () => { input: {"1":"f","2":"o", "3":"o"}, expectedData: "foo", expectedMetadata: "string", - expectedColumns: ["context_traits"] + expectedColumns: ["context_traits"], + groupTypeColumns: ["group_traits"] }, { name: "context traits with string like object with missing keys", input: {"1":"a","3":"a"}, expectedData: "a", expectedMetadata: "string", - expectedColumns: ["context_traits_1", "context_traits_3"] + expectedColumns: ["context_traits_1", "context_traits_3"], + groupTypeColumns: ["_1", "_3"] }, { name: "context traits with empty object", input: {}, expectedData: {}, expectedColumns: [], + groupTypeColumns: [] }, { name: "context traits with empty array", input: [], expectedData: [], expectedMetadata: "array", - expectedColumns: [] + expectedColumns: [], + groupTypeColumns: [] }, { name: "context traits with null", input: null, expectedData: null, expectedMetadata: "null", - expectedColumns: [] + expectedColumns: [], + groupTypeColumns: [] }, { name: "context traits with undefined", input: undefined, expectedData: undefined, expectedMetadata: "undefined", - expectedColumns: [] + expectedColumns: [], + groupTypeColumns: [] }, { name: "context traits with string", input: "already a string", expectedData: "already a string", expectedMetadata: "string", - expectedColumns: ["context_traits"] + expectedColumns: ["context_traits"], + groupTypeColumns: [] }, { name: "context traits with number", input: 42, expectedData: 42, expectedMetadata: "int", - expectedColumns: ["context_traits"] + expectedColumns: ["context_traits"], + groupTypeColumns: [] }, { name: "context traits with boolean", input: true, expectedData: true, expectedMetadata: "boolean", - expectedColumns: ["context_traits"] + expectedColumns: ["context_traits"], + groupTypeColumns: [] }, { name: "context traits with array", input: ["a", "b", "cd"], expectedData: ["a", "b", "cd"], expectedMetadata: "string", - expectedColumns: ["context_traits"] + expectedColumns: ["context_traits"], + groupTypeColumns: [] } ]; for (const t of testCases) { @@ -1312,6 +1322,7 @@ describe("context traits", () => { for (const e of eventTypes) { let i = input(e); i.message.context = {"traits": t.input}; + i.message.traits = t.input; if (i.metadata) delete i.metadata.sourceCategory; transformers.forEach((transformer, index) => { const received = transformer.process(i); @@ -1323,6 +1334,16 @@ describe("context traits", () => { expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); } + if(e==="group") { + if(t.groupTypeColumns.length === 0) { + expect(received[0].metadata.columns[integrationCasedString(integrations[index], "group_traits")]).toEqual(undefined); + expect(received[0].metadata.columns[integrationCasedString(integrations[index], "group_traits")]).toEqual(undefined); + } + for (const column of t.groupTypeColumns) { + expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); + expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); + } + } }); } }); From 5a2d4de172e31866b8ef2704befc078ec1d6db39 Mon Sep 17 00:00:00 2001 From: BonapartePC Date: Fri, 13 Sep 2024 15:42:20 +0530 Subject: [PATCH 195/201] fix tests for group --- src/warehouse/index.js | 7 +++++-- test/__tests__/warehouse.test.js | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/warehouse/index.js b/src/warehouse/index.js index d79a12c40b..c64f9c5ec3 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -208,8 +208,11 @@ function setDataFromInputAndComputeColumnTypes( level = 0, ) { if (!input || !isObject(input)) return; - if ((completePrefix.endsWith('context_traits_') || completePrefix === 'group_traits_') && isStringLikeObject(input)) { - if (prefix === 'context_traits_' || completePrefix === 'group_traits_') { + if ( + (completePrefix.endsWith('context_traits_') || completePrefix === 'group_traits_') && + isStringLikeObject(input) + ) { + if (prefix === 'context_traits_') { appendColumnNameAndType( utils, eventType, diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index 05e3eb1482..bc93363672 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -1235,18 +1235,18 @@ describe("isBlank", () => { } }); -describe("context traits", () => { +describe("context/group traits", () => { const testCases = [ { - name: "context traits with string like object", + name: "traits with string like object", input: {"1":"f","2":"o", "3":"o"}, expectedData: "foo", expectedMetadata: "string", expectedColumns: ["context_traits"], - groupTypeColumns: ["group_traits"] + groupTypeColumns: [] }, { - name: "context traits with string like object with missing keys", + name: "traits with string like object with missing keys", input: {"1":"a","3":"a"}, expectedData: "a", expectedMetadata: "string", @@ -1254,14 +1254,14 @@ describe("context traits", () => { groupTypeColumns: ["_1", "_3"] }, { - name: "context traits with empty object", + name: "traits with empty object", input: {}, expectedData: {}, expectedColumns: [], groupTypeColumns: [] }, { - name: "context traits with empty array", + name: "traits with empty array", input: [], expectedData: [], expectedMetadata: "array", @@ -1269,7 +1269,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with null", + name: "traits with null", input: null, expectedData: null, expectedMetadata: "null", @@ -1277,7 +1277,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with undefined", + name: "traits with undefined", input: undefined, expectedData: undefined, expectedMetadata: "undefined", @@ -1285,7 +1285,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with string", + name: "traits with string", input: "already a string", expectedData: "already a string", expectedMetadata: "string", @@ -1293,7 +1293,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with number", + name: "traits with number", input: 42, expectedData: 42, expectedMetadata: "int", @@ -1301,7 +1301,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with boolean", + name: "traits with boolean", input: true, expectedData: true, expectedMetadata: "boolean", @@ -1309,7 +1309,7 @@ describe("context traits", () => { groupTypeColumns: [] }, { - name: "context traits with array", + name: "traits with array", input: ["a", "b", "cd"], expectedData: ["a", "b", "cd"], expectedMetadata: "string", From 37b02f06a65265a25ec6a43326cf09f0a1de1351 Mon Sep 17 00:00:00 2001 From: BonapartePC Date: Fri, 13 Sep 2024 16:27:01 +0530 Subject: [PATCH 196/201] fix tests and address review comments --- src/warehouse/index.js | 2 +- test/__tests__/warehouse.test.js | 120 ++++++++++++++++++++++++------- 2 files changed, 97 insertions(+), 25 deletions(-) diff --git a/src/warehouse/index.js b/src/warehouse/index.js index c64f9c5ec3..3c2b04079d 100644 --- a/src/warehouse/index.js +++ b/src/warehouse/index.js @@ -216,7 +216,7 @@ function setDataFromInputAndComputeColumnTypes( appendColumnNameAndType( utils, eventType, - `${prefix.length > 0 ? prefix : completePrefix}`, + `${prefix}`, stringLikeObjectToString(input), output, columnTypes, diff --git a/test/__tests__/warehouse.test.js b/test/__tests__/warehouse.test.js index bc93363672..83b24aee15 100644 --- a/test/__tests__/warehouse.test.js +++ b/test/__tests__/warehouse.test.js @@ -1235,7 +1235,7 @@ describe("isBlank", () => { } }); -describe("context/group traits", () => { +describe("context traits", () => { const testCases = [ { name: "traits with string like object", @@ -1243,7 +1243,6 @@ describe("context/group traits", () => { expectedData: "foo", expectedMetadata: "string", expectedColumns: ["context_traits"], - groupTypeColumns: [] }, { name: "traits with string like object with missing keys", @@ -1251,14 +1250,12 @@ describe("context/group traits", () => { expectedData: "a", expectedMetadata: "string", expectedColumns: ["context_traits_1", "context_traits_3"], - groupTypeColumns: ["_1", "_3"] }, { name: "traits with empty object", input: {}, expectedData: {}, expectedColumns: [], - groupTypeColumns: [] }, { name: "traits with empty array", @@ -1266,7 +1263,6 @@ describe("context/group traits", () => { expectedData: [], expectedMetadata: "array", expectedColumns: [], - groupTypeColumns: [] }, { name: "traits with null", @@ -1274,7 +1270,6 @@ describe("context/group traits", () => { expectedData: null, expectedMetadata: "null", expectedColumns: [], - groupTypeColumns: [] }, { name: "traits with undefined", @@ -1290,7 +1285,6 @@ describe("context/group traits", () => { expectedData: "already a string", expectedMetadata: "string", expectedColumns: ["context_traits"], - groupTypeColumns: [] }, { name: "traits with number", @@ -1298,7 +1292,6 @@ describe("context/group traits", () => { expectedData: 42, expectedMetadata: "int", expectedColumns: ["context_traits"], - groupTypeColumns: [] }, { name: "traits with boolean", @@ -1306,7 +1299,6 @@ describe("context/group traits", () => { expectedData: true, expectedMetadata: "boolean", expectedColumns: ["context_traits"], - groupTypeColumns: [] }, { name: "traits with array", @@ -1314,7 +1306,6 @@ describe("context/group traits", () => { expectedData: ["a", "b", "cd"], expectedMetadata: "string", expectedColumns: ["context_traits"], - groupTypeColumns: [] } ]; for (const t of testCases) { @@ -1322,30 +1313,111 @@ describe("context/group traits", () => { for (const e of eventTypes) { let i = input(e); i.message.context = {"traits": t.input}; - i.message.traits = t.input; if (i.metadata) delete i.metadata.sourceCategory; transformers.forEach((transformer, index) => { const received = transformer.process(i); if(t.expectedColumns.length === 0) { - expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual(undefined); - expect(received[0].metadata.columns[integrationCasedString(integrations[index], "context_traits")]).toEqual(undefined); + expect(Object.keys(received[0].metadata.columns).join()).not.toMatch(/context_traits/g); + expect(Object.keys(received[0].data).join()).not.toMatch(/context_traits/g); } for (const column of t.expectedColumns) { expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); } - if(e==="group") { - if(t.groupTypeColumns.length === 0) { - expect(received[0].metadata.columns[integrationCasedString(integrations[index], "group_traits")]).toEqual(undefined); - expect(received[0].metadata.columns[integrationCasedString(integrations[index], "group_traits")]).toEqual(undefined); - } - for (const column of t.groupTypeColumns) { - expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); - expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); - } - } }); } }); } -}) \ No newline at end of file +}) + +describe("group traits", () => { + const testCases = [ + { + name: "traits with string like object", + input: {"1":"f","2":"o", "3":"o"}, + expectedData: "foo", + expectedMetadata: "string", + expectedColumns: [], + }, + { + name: "traits with string like object with missing keys", + input: {"1":"a","3":"a"}, + expectedData: "a", + expectedMetadata: "string", + expectedColumns: ["_1", "_3"], + }, + { + name: "traits with empty object", + input: {}, + expectedData: {}, + expectedColumns: [], + }, + { + name: "traits with empty array", + input: [], + expectedData: [], + expectedMetadata: "array", + expectedColumns: [], + }, + { + name: "traits with null", + input: null, + expectedData: null, + expectedMetadata: "null", + expectedColumns: [], + }, + { + name: "traits with undefined", + input: undefined, + expectedData: undefined, + expectedMetadata: "undefined", + expectedColumns: [], + }, + { + name: "traits with string", + input: "already a string", + expectedData: "already a string", + expectedMetadata: "string", + expectedColumns: [], + }, + { + name: "traits with number", + input: 42, + expectedData: 42, + expectedMetadata: "int", + expectedColumns: [], + }, + { + name: "traits with boolean", + input: true, + expectedData: true, + expectedMetadata: "boolean", + expectedColumns: [], + }, + { + name: "traits with array", + input: ["a", "b", "cd"], + expectedData: ["a", "b", "cd"], + expectedMetadata: "string", + expectedColumns: [], + } + ]; + for (const t of testCases){ + it(`should return ${t.expectedData} for ${t.name}`, () => { + let i = input("group"); + i.message.traits = t.input; + if (i.metadata) delete i.metadata.sourceCategory; + transformers.forEach((transformer, index) => { + const received = transformer.process(i); + if(t.expectedColumns.length === 0) { + expect(Object.keys(received[0].metadata.columns).join()).not.toMatch(/group_traits/g); + expect(Object.keys(received[0].data).join()).not.toMatch(/group_traits/g); + } + for (const column of t.expectedColumns) { + expect(received[0].metadata.columns[integrationCasedString(integrations[index], column)]).toEqual(t.expectedMetadata); + expect(received[0].data[integrationCasedString(integrations[index], column)]).toEqual(t.expectedData); + } + }); + }); + } +}) From f2e6937551f742d2a8187219ea595a5e132541b4 Mon Sep 17 00:00:00 2001 From: Jayachand Mopidevi Date: Mon, 16 Sep 2024 11:54:02 +0530 Subject: [PATCH 197/201] chore: add configurable ivm execution timeout (#3732) --- src/util/customTransformer-v1.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/customTransformer-v1.js b/src/util/customTransformer-v1.js index b6ed8f9654..ddc1cacd17 100644 --- a/src/util/customTransformer-v1.js +++ b/src/util/customTransformer-v1.js @@ -6,6 +6,7 @@ const logger = require('../logger'); const stats = require('./stats'); const userTransformTimeout = parseInt(process.env.USER_TRANSFORM_TIMEOUT || '600000', 10); +const ivmExecutionTimeout = parseInt(process.env.IVM_EXECUTION_TIMEOUT || '4000', 10); async function transform(isolatevm, events) { const transformationPayload = {}; @@ -24,7 +25,7 @@ async function transform(isolatevm, events) { new ivm.Reference(reject), sharedTransformationPayload, ], - { timeout: 4000 }, + { timeout: ivmExecutionTimeout }, ); } catch (error) { reject(error.message); From aa1289d8e5d6d735b1469db9b12a1c90f319926b Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 16 Sep 2024 08:59:02 +0000 Subject: [PATCH 198/201] chore(release): 1.78.0 --- CHANGELOG.md | 18 ++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc2f0ba14a..6c63fb4310 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,24 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [1.78.0](https://github.com/rudderlabs/rudder-transformer/compare/v1.77.1...v1.78.0) (2024-09-16) + + +### Features + +* add source id isolation for reverse etl ([#3496](https://github.com/rudderlabs/rudder-transformer/issues/3496)) ([b4f4dd1](https://github.com/rudderlabs/rudder-transformer/commit/b4f4dd1c43f8fd4b4f744413d79cfe8f5f77708b)) +* add util for applying json string template ([#3699](https://github.com/rudderlabs/rudder-transformer/issues/3699)) ([b2f5654](https://github.com/rudderlabs/rudder-transformer/commit/b2f56540148066a40770e1506faadb4f3f5a296b)) +* onboard X(Twiiter) Audience ([#3696](https://github.com/rudderlabs/rudder-transformer/issues/3696)) ([f77d2ab](https://github.com/rudderlabs/rudder-transformer/commit/f77d2ab4125a1a44bba95bebbee25bb4fac032da)) +* webhook v2 path variables support ([#3705](https://github.com/rudderlabs/rudder-transformer/issues/3705)) ([f7783d8](https://github.com/rudderlabs/rudder-transformer/commit/f7783d8fb30093a847f450ee7ddd9449f272b112)) + + +### Bug Fixes + +* added support for window stabilization fix through envs ([#3720](https://github.com/rudderlabs/rudder-transformer/issues/3720)) ([8dcf1b3](https://github.com/rudderlabs/rudder-transformer/commit/8dcf1b3c5aff424d39bece8c9912ec4a1eb221ea)) +* circular json bugsnag ([#3713](https://github.com/rudderlabs/rudder-transformer/issues/3713)) ([263d075](https://github.com/rudderlabs/rudder-transformer/commit/263d0758be828402068278c7c5356b65119e7e9a)) +* error messages in gaec ([#3702](https://github.com/rudderlabs/rudder-transformer/issues/3702)) ([441fb57](https://github.com/rudderlabs/rudder-transformer/commit/441fb57a537592cc1cc45dc8f31fa8be98e18320)) +* gaoc bugsnag alert for email.trim ([#3693](https://github.com/rudderlabs/rudder-transformer/issues/3693)) ([6ba16f6](https://github.com/rudderlabs/rudder-transformer/commit/6ba16f6e5d9bb0de773ebcb8be13a78af325a4a1)) + ### [1.77.1](https://github.com/rudderlabs/rudder-transformer/compare/v1.77.0...v1.77.1) (2024-09-05) diff --git a/package-lock.json b/package-lock.json index 7cad035e75..cf0af8c325 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rudder-transformer", - "version": "1.77.1", + "version": "1.78.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rudder-transformer", - "version": "1.77.1", + "version": "1.78.0", "license": "ISC", "dependencies": { "@amplitude/ua-parser-js": "0.7.24", diff --git a/package.json b/package.json index 7aec18b268..c96d436b3d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rudder-transformer", - "version": "1.77.1", + "version": "1.78.0", "description": "", "homepage": "https://github.com/rudderlabs/rudder-transformer#readme", "bugs": { From 5dd382b2c2826f576a7a6000015498ae2fc3c1fb Mon Sep 17 00:00:00 2001 From: gitcommitshow <56937085+gitcommitshow@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:31:58 +0530 Subject: [PATCH 199/201] docs: add contribution guide for source integration (#3724) * docs: add contribution guide for source integration * docs: contribution guide for destination integration --- CONTRIBUTING.md | 1102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1102 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 48055816e4..f735f4f04b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -43,6 +43,1108 @@ committed to main branch as a single commit. All pull requests are squashed when merged, but rebasing prior to merge gives you better control over the commit message. +---- + +Now, that you have a basic overview of the contibution guidelines. Let's dive into a detailed guide to contribute by creating a new custom RudderStack integration. + +## Building your first custom RudderStack **source** integration + +Before starting to work on your first RudderStack integration, it is highly recommended to get a high-level overview of [RudderStack Event Specification](https://www.rudderstack.com/docs/event-spec/standard-events/). + + + +* When developing a **source integration**, you’ll be transforming your events data received from the source to this specification. +* When developing a **destination integration**, you’ll be parsing the event data according to this event spec and transforming it to your destination’s data spec. + + +### Overview of integration development journey + + + +1. Add integration code to [rudder-transformer](https://github.com/rudderlabs/rudder-transformer) `src/v1/sources` or `src/cdk/v2/destinations` folder \ +This is the codebase that controls how raw event data (received from the source) is transformed to RudderStack Event Data Specification and then finally to the destination specific data format +2. Add RudderStack UI configurations in [rudder-integrations-config](https://github.com/rudderlabs/rudder-integrations-config) `src/configurations/sources` or `src/configurations/destinations` folder \ +This enables your integration users to setup/configure the integration via RudderStack Dashboard +3. Write the documentation for your integration (or share the [integration plan document](https://rudderstacks.notion.site/Integration-planning-document-example-Slack-Source-integration-46863d6041ec48258f9c5433eab93b28?pvs=25) with the RudderStack team) +4. RudderStack team will deploy your integration to production and post an announcement in the [Release Notes](https://www.rudderstack.com/docs/releases/) + +RudderStack team will be available to help you by giving feedback and answering questions either directly on your GitHub PR or the [RudderStack Slack community](https://www.rudderstack.com/join-rudderstack-slack-community/). Before diving into code, writing an integration plan document helps a lot, here’s an [example document](https://rudderstacks.notion.site/Integration-planning-document-example-Slack-Source-integration-46863d6041ec48258f9c5433eab93b28?pvs=25). + + +### 1. Setup rudder-transformer and understand the code structure + +Setup [rudder-transformer](https://github.com/rudderlabs/rudder-transformer) on your local machine + + + +* Clone [this repository](https://github.com/rudderlabs/rudder-transformer) +* Setup the repository with `npm run setup` +* Build the service with `npm run build:clean` +* Start the server with `npm start` + +Understand the code structure + + + +* `src/v1/sources` - Source integrations +* `src/cdk/v2/destinations` - Destination integrations +* `src/v0` and `src/v1` have older integrations, will be useful only if you’re fixing a bug or adding feature in older integrations +* `test/integrations/sources` - Integration tests for source integrations +* `test/integrations/destinations` - Integration tests for destination integrations + + +### 2. Write code for a v0 source integration {#2-write-code-for-a-v0-source-integration} + +Here, we will explain the code for a v0 source integration but most of the learning will apply to other integrations as well (destination and v1). + + + +* Create a new directory with the integration name under `src/v0` (follow the snake case naming convention) +* Add `transform.js`, add a `process(eventData)` function and export it. This is the function which will be called to transform the event data received from the source +* Add `config.js` to separate the source configuration and mapping + +A simple example of `process` function and `transform.js` file looks like this + +```javascript +/** + * src/v0/sources/slack/transform.js + * An example transform.js file for Slack integration with v0 integration method + */ + +const Message = require('../message'); // Standard RudderStacj event message object +const { TransformationError } = require('@rudderstack/integrations-lib'); // Standard errors +const { generateUUID, removeUndefinedAndNullValues } = require('../../util'); // Common utilities for v0 source integrations + +/** + * Transform the input event data to RudderStack Standard Event Specification - https://www.rudderstack.com/docs/event-spec/standard-events/ + * @param {Object} eventPayload - The event object received from the source. + * For example, Slack sends this payload which Slack source integration transforms to match the RudderStack Event Specs (e.g. Slack's team_join event to RudderStack's IDENTIFY event spec) + * { + * "event": { + "type": "team_join", + * "user": { + * "id": "W012CDE", + * "real_name": "John Doe" + * } + * }, + * "type": "event_callback", + * ...restOfTheEventPayload + * } + * @returns {Object} transformedEvent - Transformed event + */ +function process(eventPayload) { + const transformedEvent = new Message(`SLACK`); // SLACK is the integration name here. It will be different for your integration. + if (!eventPayload?.event) { + throw new TransformationError('Missing the required event data'); + } + switch (eventPayload.event.type) { + case 'team_join': + // Transform Slack's team_join event to RudderStack's standard IDENTIFY event schema + transformedEvent.setEventType(EventType.IDENTIFY); + break; + } + // Normalize event names e.g. "team_join" to "Team Join" + transformedEvent.setEventName(normalizeEventName(eventPayload.event.type)); + const stringifiedUserId = eventPayload?.event?.user?.id; + // anonymousId is an important property of RudderStack event specification to identify user across different user events + transformedEvent.setProperty( + 'anonymousId', + stringifiedUserId ? sha256(stringifiedUserId).toString().substring(0, 36) : generateUUID(), + ); + // externalId is another important property of RudderStack event specification that helps connect user identities from different channels + transformedEvent.context.externalId = [ + { + type: 'slackUserId', + id: stringifiedUserId, + }, + ]; + // Set the standard common event fields. More info at https://www.rudderstack.com/docs/event-spec/standard-events/common-fields/ + // originalTimestamp - The actual time (in UTC) when the event occurred + transformedEvent.setProperty( + 'originalTimestamp', + tsToISODate(eventPayload.event.ts) + ); + // Map the remaining standard event properties according to mappings for the payload properties + const mapping = [ + { + "sourceKeys": "event.type", + "destKeys": "event" + }, + { + "sourceKeys": "event.user.profile.real_name", + "destKeys": "context.traits.name" + }, + ] + // Using a fixed json mapping structure (sourceKeys <> destKeys), it is the quickest way to map source fields with the destination fields + transformedEvent.setPropertiesV2(eventPayload, mapping); + // Copy the complete event payload to transformedEvent.properties + Object.assign(transformedEvent.properties, eventPayload.event); + return removeUndefinedAndNullValues(transformedEvent); +} + +// Make sure to export the `process` function. All other details of the integration code can remain hidden. +exports.process = process; +``` + +### 3. Test your v0 source integration + + +#### Manual testing + +You’ll need some API request client (e.g. Postman, Bruno, etc.) to make a POST test request to + +`/{$integration-version-type e.g. v0 or v1}/{$integration-type e.g. sources or destinations}/{$integration-name e.g. slack}` + + + +* Request endpoint example for Slack source developed under v0 folder - `POST /v0/sources/slack` +* Body - An array of event data object received from the source i.e. `[{ …eventData }]` +* Headers - `Content-Type: application/json` + +Depending upon your integration behavior for different types of event, you can get different types of output. + + +##### Testing standard event response + +This is what you’d want to do most of the time. The standard case, when you only transform the incoming event and hand it over to RudderStack to deliver to the destination. + +For a successful event processing in such case, you should receive HTTP 200 OK response status with data in the following structure + +```javascript +[ + { + "output": { + "batch": [ + { + ...transformedEventData + } + ] + } + } +] +``` + +##### Testing custom event response + +You can customize the response to the HTTP request from the source beyond the standard event response format sent by RudderStack. You can customize the response body, content type header, status code, etc. Such customization is useful in some cases when you do not want to receive the standard response from RudderStack e.g. url_verification event for Slack webhook url ownership verification needs to respond back with the challenge parameter in the response body and the HTTP response status code to be 200. + +In such a case, you need to return the response in a specific format containing `outputToSource` and `statusCode`. Your integration code can send the `outputToSource.body` and `outputToSource.contentType` as per your requirements. + +In this case, a successful event response should match the following structure + + +```javascript +[ + { + outputToSource: { + body: ...base64EncodedResponseBody, // e.g. eyJjaGFsbG2UiOiIzZVpicncxYUIxMEZFTUFHQVpkNEZ5RlEifQ (base64 encoding of the response body) + contentType: ...contentType // e.g. application/json + }, + statusCode: ...httpStatusCode, // e.g. 200 + } +] +``` + +### 4. Write automated tests + +Follow the test structure similar to other integrations in `test/integrations/sources` or `test/integrations/destinations`. + +You may reuse the same request data from the manual tests i.e. use them in place of `replaceThisWithYourEventPayloadProps` and `replaceThisWithYourTransformedEventOutput` (including the enclosing `[{ }]`). But make sure to redact any personal or secret information. + +Here’s an example + +```javascript +/** test/sources/slack/data.ts **/ + +export const data = [ + +/** Test 1 - Testing standard event response **/ + + { + name: 'slack', // Replace with your integration name + description: 'Team joined event', // Replace with your event description + module: 'source', // Replace with your integration type - destination or source + version: 'v0', // Replace with your integration approach - v0 or v1 + input: { + request: { + body: ...replaceThisWithYourEventPayload + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + output: { + batch: ...replaceThisWithYourTransformedEventOutput + }, + }, + ], + }, + }, + }, + +/** Test 2 - Testing custom event response **/ + + { + name: 'slack', // Replace with your integration name + description: 'Webhook url verificatin event (not a standard RudderStack event, returns a custom response)', // Replace with your event description + module: 'source', // Replace with your integration type - destination or source + version: 'v0', // Replace with your integration approach - v0 or v1 + input: { + request: { + body: ...replaceThisWithYourEventPayload + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }, + pathSuffix: '', + }, + output: { + response: { + status: 200, + body: [ + { + outputToSource: { + body: 'eyJjaGFsb2UiOiIzZVpicncxYUIxMEZFTUFHQVpkNEZ5RlEifQ==', // Replace this with the Base64 encoding of the response body your integrations sends + contentType: 'application/json', // Replace this with the content type your integration sends + }, + statusCode: 200, // Replace this with the custom response status your integration sends for this event + }, + ], + }, + }, + }, +]; +``` + +#### Running automated tests + +You can run tests only for the specific integration, for example + + + +* To test Slack destination - `npm run test:ts -- component --destination=slack` +* To test Slack source - `npm run test:ts -- component --source=slack` + +These tests will automatically be run on each commit, making sure that any new development does not break the existing integrations. + + +### 5. Add RudderStack UI configurations in integrations-config + +Add configuration for your integration in [rudder-integrations-config](https://github.com/rudderlabs/rudder-integrations-config) repo under `src/configurations/sources/` or `src.configurations/destinations`. At bare minimum, a db-config file is needed, here’s [an example](https://github.com/rudderlabs/rudder-integrations-config/blob/develop/src/configurations/sources/slack/db-config.json) of the same for Slack source. Duplicate it in the directory for your integration config folder and change the relevant values for your integration. + +Alternatively, the easier path to do this is by running a script which will generate these files for you. For this, first create a copy of this `[test/configData/inputData.json](https://github.com/rudderlabs/rudder-integrations-config/blob/develop/test/configData/inputData.json)` and adjust it to what you want to see in the RudderStack dashboard ui. And use that placeholder file in the following command + +`python3 scripts/configGenerator.py <path of the placeholder file>` + +Run this command from the root directory of the rudder-integrations-config repo. The PR can then be raised after checking if everything looks good. + + +### 6. Run the transformer locally + +```bash + +nvm use v20 + +npm ci + +npm run build:start + +``` + + +### References + + +* [Contributing.md](https://github.com/rudderlabs/rudder-server/blob/master/CONTRIBUTING.md\) in all github repositories +* [https://www.rudderstack.com/docs/resources/community/](https://www.rudderstack.com/docs/resources/community/) +* [https://www.rudderstack.com/docs/event-spec/standard-events/](https://www.rudderstack.com/docs/event-spec/standard-events/) +* [Recording of the community event for new contributors](https://youtu.be/OD2vCYG-P7k?feature=shared) + + + +## Building your first custom RudderStack **destination** integration + +Before diving into this tutorial, it is highly recommended to get a high-level overview of [RudderStack Event Specification](https://www.rudderstack.com/docs/event-spec/standard-events/). + +* When developing a **destination integration**, you’ll be transforming the data from RudderStack Event Specification to your target destination’s data specification. +* When developing a **source integration**, you’ll be transforming your events data received from the source to RudderStack Event Specification. + +In this tutorial, we will specifically focus on developing a destination integration. + + +### Overview of integration development journey + + +1. Add integration code to [rudder-transformer](https://github.com/rudderlabs/rudder-transformer) `src/cdk/v2/destinations` folder. This is the codebase that controls how raw event data from [RudderStack Event Data Specification](https://www.rudderstack.com/docs/event-spec/standard-events/) to destination specific data format +2. Add RudderStack UI configurations in [rudder-integrations-config](https://github.com/rudderlabs/rudder-integrations-config) `src/configurations/destinations` folder \ +This enables your integration users to setup/configure the integration via RudderStack Dashboard +3. Write the documentation for your integration (or share the [integration plan document](https://rudderstacks.notion.site/Integration-planning-document-example-Slack-Source-integration-46863d6041ec48258f9c5433eab93b28?pvs=25) with the RudderStack team) +4. RudderStack team will deploy your integration to production and post an announcement in the [Release Notes](https://www.rudderstack.com/docs/releases/) + +RudderStack team will be available to help you by giving feedback and answering questions either directly on your GitHub PR or the [RudderStack Slack community](https://www.rudderstack.com/join-rudderstack-slack-community/). Before diving into code, writing an integration plan document helps a lot, here’s an [example document](https://rudderstacks.notion.site/Integration-planning-document-example-Slack-Source-integration-46863d6041ec48258f9c5433eab93b28?pvs=25). + + +### 1. Setup rudder-transformer and understand the code structure + +Setup [rudder-transformer](https://github.com/rudderlabs/rudder-transformer) on your local machine + + + +* Clone [this repository](https://github.com/rudderlabs/rudder-transformer) +* Setup the repository with `npm run setup` +* Build the service with `npm run build:clean` +* Start the server with `npm start` + +Understand the code structure + + +* `src/cdk/v2/destinations` - Destination integrations +* `src/v1/sources` - Source integrations +* `src/v0` and `src/v1` - Older integrations. If you’re fixing bugs in one of the older integrations, you might find your integration in these folders if it is an older integration. +* `test/integrations/sources` - Integration tests for source integrations +* `test/integrations/destinations` - Integration tests for destination integrations + + +### 2. Write code for a destination integration + +Here, we will explain the code for a destination integration for single event processing as well as batch events processing. + +Before diving into the code, we recommend exploring the code for different destinations under the `src/cdk/v2/destinations` folder. This is the same structure you'll follow for your integration. This is a high-level overview of the code structure which you’ll be creating + + + +* `src/cdk/v2/destinations/**my_destination**` (follow the snake_case naming convention) - Your integration code for `my_destination` +* `src/cdk/v2/destinations/**my_destination/procWorkflow.yaml**` (processor workflow) - This is where you write the `yaml` configuration specifying how to transform an event from standard RudderStack format to destination format. This `yaml` code will later automatically get converted to javascript code using our RudderStack Workflow Engine. You will need to familiarize yourself with [RudderStack Workflow Engine](https://github.com/rudderlabs/rudder-workflow-engine) to understand what key/value you should be using. We will cover a quickstart for the same in this tutorial but whenever in doubt, refer to the [RudderStack Workflow Engine docs/readme](https://github.com/rudderlabs/rudder-workflow-engine). +* `src/cdk/v2/destinations/**my_destination/rtWorflow.yaml**` (router workflow) - For batch events integration code. This will call the processor workflow to process individual events. +* `src/cdk/v2/destinations/**my_destination/config.js**` - Configurations for the integration + +Before we dive into the code for a simple transformation for a destination, let’s address the potential questions you might have at this point + +**Why is the integration code for destination transformation written in `yaml` instead of `javascript`?** + +`yaml` is a great language for data serialization. It also makes the code short and consistent to read. This is why we moved from `javascript` to `yaml` for the data transformation code. It helped us move to a config-driven approach. + +**Does using `yaml` limit our flexibility to write complex transformation logic?** + +No. We use a templating language to support any kind of complex transformation logic in `yaml`, so we have the extensibility as well as the key benefit - concise and simple `yaml` for common transformation requirements. This was made possible by the RudderStack Workflow Engine. + +**What exactly is RudderStack Workflow Engine?** + +In the [rudder-transformer](https://github.com/rudderlabs/rudder-transformer/) service, we handle data transformation from customer events to destination events. The rudder-transformer service uses the [RudderStack Workflow Engine](https://github.com/rudderlabs/rudder-workflow-engine) to organize this transformation process into clear, manageable steps. This includes validation, data mapping, enriching with API calls, and handling various event types. These steps were earlier implemented in JavaScript, which, while flexible, was challenging to maintain and standardize. To improve readability, testability, and development speed, we transitioned to a config-driven workflow engine using template languages like JSONata and JsonTemplate, with the capability to extend to additional languages. In short, this is what helped us move transformation code from `javascript` to `yaml`. + +**To develop an integration, how much do I need to understand about RudderStack Workflow Engine?** + +Not more than what can not be covered in 10 mins. The RudderStack Workflow Engine will convert the `yaml` file to `javascript` for transformation. The key question is - how to write this `yaml` file? And the answer lies in the `keys` you can use in the `yaml`. Get familiar following keys, and you should be able to write your first integration + + + +1. `bindings` - To import external javascript functions and data + 1. `path` - The file path where we want to import from e.g. `./config` (can omit the extension `.js`) + 2. `name` - The name by which we want import e.g. `Config` (can be accessed as `$Config` or `$Config.something`) + 3. `exportAll` - If `true`, imports everything from the file. Default: `false` i.e. imports only the object matching the `name` +2. **`steps` - To express the destination transformation logic as a series of steps. If you have used GitHub action, this will sound familiar.** + 4. `name` (mandatory) - A name to track outputs + 5. `description` - Mention what does this step do + 6. `functionName` - The function we want to execute in this step. This function must be defined in the bindings and must have following definition \ + ```javascript + (input: any, bindings: Record<string, any>) => { + error?: any, + output?: any + } + ``` + + 7. `condition` - The step will get executed only when this condition is satisfied + 8. `inputTemplate` - To customize the input. Passed while executing the step. By default, all steps receive the same input as the workflow input, but when we want to modify the input before executing the step, we can use this feature. + 9. `contextTemplate` - By default, all steps receive the current context, but we can use this feature when we want to modify the context before executing the step. This is useful when using external workflows, workflow steps, or template paths. + 10. `loopOverInput` - We can use this feature when the input is an array, and we want to execute the step logic for each element independently. This is mainly used for batch processing. + 11. `steps` - You may define a series of steps inside a step. We will call such a step a `WorkflowStep` as opposed to `SimpleStep`. + 12. `workflowStepPath` - We can import the steps from another `yaml` file + 13. `batches` - To batch the inputs using filter and by length + 1. `key` - The input name e.g. “heroes” + 2. `filter` - The filter logic e.g. `.type === “hero”` + 3. `size` - The size of the batch + +A simple example of `procWorkflow.yaml` looks like this: + +```yaml +bindings: + - name: EventType + path: ../../../../constants + - path: ../../bindings/jsontemplate + exportAll: true + - name: removeUndefinedAndNullValues + path: ../../../../v0/util + +steps: + - name: validateInput + template: | + $.assert(.message.type, "message Type is not present. Aborting message."); + $.assert(.message.type in {{$.EventType.([.TRACK, .IDENTIFY])}}, + "message type " + .message.type + " is not supported"); + - name: prepareContext + template: | + $.context.messageType = .message.type.toLowerCase(); + $.context.payload = {}; + $.context.finalHeaders = { + "authorization": "Basic " + .destination.Config.apiKey, + "content-type": "application/json" + }; + - name: identifyPayload + condition: $.context.messageType == "identify" + template: | + $.context.endpoint = "https://api.fullstory.com/v2/users"; + $.context.payload.properties = .message.traits ?? .message.context.traits; + $.context.payload.uid = .message.userId; + $.context.payload.email = .message.context.traits.email; + $.context.payload.display_name = .message.context.traits.name; + + - name: trackPayload + condition: $.context.messageType == "track" + template: | + $.context.endpoint = "https://api.fullstory.com/v2/events"; + $.context.payload.name = .message.event; + $.context.payload.properties = .message.properties; + $.context.payload.timestamp = .message.originalTimestamp; + $.context.payload.context = {}; + + - name: validateEventName + condition: $.context.messageType == "track" + template: | + $.assert(.message.event, "event is required for track call") + + - name: mapContextFieldsForTrack + condition: $.context.messageType == "track" + template: | + $.context.payload.context.browser = { + "url": .message.context.page.url, + "user_agent": .message.context.userAgent, + "initial_referrer": .message.context.page.initial_referrer, + }; + $.context.payload.context.mobile = { + "app_name": .message.context.app.name, + "app_version": .message.context.app.version, + }; + $.context.payload.context.device = { + "manufacturer": .message.context.device.manufacturer, + "model": .message.context.device.model, + }; + $.context.payload.context.location = { + "ip_address": .message.context.ip, + "latitude": .message.properties.latitude, + "longitude": .message.properties.longitude, + "city": .message.properties.city, + "region": .message.properties.region, + "country": .message.properties.country, + }; + + - name: mapIdsForTrack + condition: $.context.messageType == "track" + template: | + $.context.payload.session = { + "id": .message.properties.sessionId, + "use_most_recent": .message.properties.useMostRecent, + }; + $.context.payload.user = { + "uid": .message.properties.userId ?? .message.userId, + } + + - name: cleanPayload + template: | + $.context.payload = $.removeUndefinedAndNullValues($.context.payload); + - name: buildResponseForProcessTransformation + template: | + $.context.payload.({ + "body": { + "JSON": ., + "JSON_ARRAY": {}, + "XML": {}, + "FORM": {} + }, + "version": "1", + "type": "REST", + "method": "POST", + "endpoint": $.context.endpoint, + "headers": $.context.finalHeaders, + "params": {}, + "files": {} + }) +``` + +### 3. Test your destination integration + + +#### Manual testing + +You’ll need some API request client (e.g. Postman, Bruno, curl, etc.) for manual testing. + + + +* Make a `POST` request to this endpoint - `POST /v1/destinations/my_integration` +* Body - An array of event data object received from the source i.e. `[{ …eventData }]` +* Headers - `Content-Type: application/json` + +Depending upon your integration behavior for different types of event, you can get different types of output. + + +##### Testing standard event response + +This is what you’d want to do most of the time. The standard case, when you only transform the incoming event and hand it over to RudderStack to deliver to the destination. + +For a successful event processing in such case, you should receive HTTP 200 OK response status with data in the following structure + +```javascript +[ + { + "output": { + "batch": [ + { + ...transformedEventData + } + ] + } + } +] +``` + + +##### Testing custom event response + +You can customize the response to the HTTP request from the source beyond the standard event response format sent by RudderStack. You can customize the response body, content type header, status code, etc. Such customization is useful in some cases when you do not want to receive the standard response from RudderStack e.g. you want a custom response body and the HTTP response status code. + + +### 4. Write automated tests for your destination integration {#4-write-automated-tests-for-your-destination-integration} + +Follow the test structure similar to other integrations in `test/integrations/destinations`. Here’s an overview of the test code structure which you will be creating + + + +* `test/integrations/destinations/my_destination` - To contain all your test code for `my_destination` +* `test/integrations/destinations/my_destination/processor` - Test code for single event processing logic + * `data.ts` + * `identify.ts` - Test for [`identify`](https://www.rudderstack.com/docs/event-spec/standard-events/identify/) event + * `track.ts` - Test for [`track`](https://www.rudderstack.com/docs/event-spec/standard-events/track/) event +* `test/integrations/destinations/my_destination/router` - Test code for batch events processing logic + +You may reuse the same request data from the manual tests i.e. use them in place of `replaceThisWithYourEventPayloadProps` and `replaceThisWithYourTransformedEventOutput` (including the enclosing `[{ }]`). But make sure to redact any personal or secret information. + +Here’s an example + +```javascript +export const data = [ + { + name: 'fullstory', + description: 'Complete track event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + anonymousId: '78c53c15-32a1-4b65-adac-bec2d7bb8fab', + channel: 'web', + context: { + app: { + name: 'RSPM', + version: '1.9.0', + }, + campaign: { + name: 'sales campaign', + source: 'google', + medium: 'medium', + term: 'event data', + content: 'Make sense of the modern data stack', + }, + ip: '192.0.2.0', + library: { + name: 'RudderLabs JavaScript SDK', + version: '2.9.1', + }, + locale: 'en-US', + device: { + manufacturer: 'Nokia', + model: 'N2023', + }, + page: { + path: '/best-seller/1', + initial_referrer: 'https://www.google.com/search', + initial_referring_domain: 'google.com', + referrer: 'https://www.google.com/search?q=estore+bestseller', + referring_domain: 'google.com', + search: 'estore bestseller', + title: 'The best sellers offered by EStore', + url: 'https://www.estore.com/best-seller/1', + }, + screen: { + density: 420, + height: 1794, + width: 1080, + innerHeight: 200, + innerWidth: 100, + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', + }, + event: 'Product Reviewed', + integrations: { + All: true, + }, + messageId: '1578564113557-af022c68-429e-4af4-b99b-2b9174056383', + properties: { + userId: 'u001', + sessionId: 's001', + review_id: 'review_id_1', + product_id: 'product_id_1', + rating: 5, + review_body: 'Sample Review Body', + latitude: 44.56, + longitude: 54.46, + region: 'Atlas', + city: 'NY', + country: 'USA', + }, + originalTimestamp: '2020-01-09T10:01:53.558Z', + type: 'track', + sentAt: '2020-01-09T10:02:03.257Z', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'Fullstory', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'dummyfullstoryAPIKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + JSON: { + name: 'Product Reviewed', + properties: { + userId: 'u001', + sessionId: 's001', + review_id: 'review_id_1', + product_id: 'product_id_1', + rating: 5, + review_body: 'Sample Review Body', + latitude: 44.56, + longitude: 54.46, + region: 'Atlas', + city: 'NY', + country: 'USA', + }, + timestamp: '2020-01-09T10:01:53.558Z', + context: { + browser: { + url: 'https://www.estore.com/best-seller/1', + user_agent: + 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', + initial_referrer: 'https://www.google.com/search', + }, + mobile: { + app_name: 'RSPM', + app_version: '1.9.0', + }, + device: { + manufacturer: 'Nokia', + model: 'N2023', + }, + location: { + ip_address: '192.0.2.0', + latitude: 44.56, + longitude: 54.46, + city: 'NY', + region: 'Atlas', + country: 'USA', + }, + }, + session: { + id: 's001', + }, + user: { + uid: 'u001', + }, + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.fullstory.com/v2/events', + headers: { + authorization: 'Basic dummyfullstoryAPIKey', + 'content-type': 'application/json', + }, + params: {}, + files: {}, + userId: '', + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'fullstory', + description: 'Missing event name', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + channel: 'web', + context: { + device: { + manufacturer: 'Nokia', + model: 'N2023', + }, + userAgent: + 'Dalvik/2.1.0 (Linux; U; Android 9; Android SDK built for x86 Build/PSR1.180720.075)', + }, + integrations: { + All: true, + }, + properties: { + userId: 'u001', + latitude: 44.56, + longitude: 54.46, + region: 'Atlas', + city: 'NY', + country: 'USA', + }, + originalTimestamp: '2020-01-09T10:01:53.558Z', + type: 'track', + sentAt: '2020-01-09T10:02:03.257Z', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'Fullstory', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'dummyfullstoryAPIKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + statusCode: 400, + error: + 'event is required for track call: Workflow: procWorkflow, Step: validateEventName, ChildStep: undefined, OriginalError: event is required for track call', + statTags: { + errorCategory: 'dataValidation', + errorType: 'instrumentation', + implementation: 'cdkV2', + destType: 'FULLSTORY', + module: 'destination', + feature: 'processor', + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + }, + { + name: 'fullstory', + description: 'Complete identify event', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'dummy-user001', + channel: 'web', + context: { + traits: { + company: 'Initech', + address: { + country: 'USA', + state: 'CA', + street: '101 dummy street', + }, + email: 'dummyuser@domain.com', + name: 'dummy user', + phone: '099-999-9999', + }, + userAgent: + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36', + }, + integrations: { + All: true, + }, + originalTimestamp: '2020-01-27T12:20:55.301Z', + receivedAt: '2020-01-27T17:50:58.657+05:30', + request_ip: '14.98.244.60', + sentAt: '2020-01-27T12:20:56.849Z', + timestamp: '2020-01-27T17:50:57.109+05:30', + type: 'identify', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'Fullstory', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'fullstoryAPIKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + JSON: { + properties: { + company: 'Initech', + address: { + country: 'USA', + state: 'CA', + street: '101 dummy street', + }, + email: 'dummyuser@domain.com', + name: 'dummy user', + phone: '099-999-9999', + }, + uid: 'dummy-user001', + email: 'dummyuser@domain.com', + display_name: 'dummy user', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.fullstory.com/v2/users', + headers: { + authorization: 'Basic fullstoryAPIKey', + 'content-type': 'application/json', + }, + params: {}, + files: {}, + userId: '', + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + statusCode: 200, + }, + ], + }, + }, + }, + { + name: 'fullstory', + description: 'Identify event with needed traits', + feature: 'processor', + module: 'destination', + version: 'v0', + input: { + request: { + body: [ + { + message: { + userId: 'dummy-user001', + channel: 'web', + context: { + traits: { + email: 'dummyuser@domain.com', + name: 'dummy user', + phone: '099-999-9999', + }, + }, + timestamp: '2020-01-27T17:50:57.109+05:30', + type: 'identify', + }, + destination: { + ID: '1pYpzzvcn7AQ2W9GGIAZSsN6Mfq', + Name: 'Fullstory', + DestinationDefinition: { + Config: { + cdkV2Enabled: true, + }, + }, + Config: { + apiKey: 'fullstoryAPIKey', + }, + Enabled: true, + Transformations: [], + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + body: { + JSON: { + properties: { + email: 'dummyuser@domain.com', + name: 'dummy user', + phone: '099-999-9999', + }, + uid: 'dummy-user001', + email: 'dummyuser@domain.com', + display_name: 'dummy user', + }, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://api.fullstory.com/v2/users', + headers: { + authorization: 'Basic fullstoryAPIKey', + 'content-type': 'application/json', + }, + params: {}, + files: {}, + userId: '', + }, + metadata: { + destinationId: 'destId', + workspaceId: 'wspId', + }, + statusCode: 200, + }, + ], + }, + }, + }, +]; +``` + +#### Running automated tests + +You can run tests only for the specific integration, for example + + + +* To test Slack destination - `npm run test:ts -- component --destination=my_destination` + +These tests will automatically be run on each commit, making sure that any new development does not break the existing integrations. + + +### 5. Add RudderStack UI configurations in integrations-config + +Add configuration for your destination integration in [rudder-integrations-config](https://github.com/rudderlabs/rudder-integrations-config) repo under `src.configurations/destinations`. At bare minimum, a db-config file is needed, here’s [an example](https://github.com/rudderlabs/rudder-integrations-config/blob/develop/src/configurations/destinations/fullstory/db-config.json) of the same for FullStory destination. Duplicate it in the directory for your integration config folder and change the relevant values for your integration. + +Alternatively, the easier path to do this is by running a script which will generate these files for you. For this, first create a copy of this `[test/configData/inputData.json](https://github.com/rudderlabs/rudder-integrations-config/blob/develop/test/configData/inputData.json)` and adjust it to what you want to see in the RudderStack dashboard ui. And use that placeholder file in the following command + +`python3 scripts/configGenerator.py <path of the placeholder file>` + +Run this command from the root directory of the rudder-integrations-config repo. The PR can then be raised after checking if everything looks good. + + +### 6. Run the transformer locally + +```bash + +nvm use v20 + +npm ci + +npm run build:start + +``` + +### References + +* [Contributing.md](https://github.com/rudderlabs/rudder-server/blob/master/CONTRIBUTING.md\) in all github repositories +* [https://www.rudderstack.com/docs/resources/community/](https://www.rudderstack.com/docs/resources/community/) +* [https://www.rudderstack.com/docs/event-spec/standard-events/](https://www.rudderstack.com/docs/event-spec/standard-events/) +* [RudderStack Workflow Engine](https://github.com/rudderlabs/rudder-workflow-engine) +* [RudderStack JSON Templating Engine](https://github.com/rudderlabs/rudder-json-template-engine) +* [Recording of the community event for new contributors](https://youtu.be/OD2vCYG-P7k?feature=shared) + We look forward to your feedback on improving this project. From a05e3397dadcf35c70fd00f531e8b93352533c8d Mon Sep 17 00:00:00 2001 From: Gauravudia <60897972+Gauravudia@users.noreply.github.com> Date: Mon, 16 Sep 2024 17:44:07 +0530 Subject: [PATCH 200/201] chore: enable router transform for http destination (#3736) --- src/features.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features.json b/src/features.json index 503df3eccf..097e4a8aa0 100644 --- a/src/features.json +++ b/src/features.json @@ -80,7 +80,7 @@ "X_AUDIENCE": true, "BLOOMREACH_CATALOG": true, "SMARTLY": true, - "WEBHOOK_V2": true + "HTTP": true }, "regulations": [ "BRAZE", From f33f52503679be9271751aaa2fdca0661fed62e9 Mon Sep 17 00:00:00 2001 From: Dilip Kola <33080863+koladilip@users.noreply.github.com> Date: Thu, 19 Sep 2024 10:59:34 +0530 Subject: [PATCH 201/201] feat: add support for vdm next to fb custom audiences (#3729) * feat: add support for vdm next to fb custom audiences Add support record v2 format for vdm next. * chore: add missing tests * chore: refactor fbca * chore: update docs * chore: update docs --- package-lock.json | 6115 +- package.json | 1 + src/types/index.ts | 11 + .../destinations/fb_custom_audience/config.js | 6 +- .../fb_custom_audience/recordTransform.js | 140 +- .../fb_custom_audience/transform.js | 42 +- .../destinations/fb_custom_audience/util.js | 9 +- src/v0/util/constant.js | 3 + src/v0/util/index.js | 8 +- test/integrations/component.test.ts | 2 +- .../destinations/fb_custom_audience/mocks.ts | 4 + .../fb_custom_audience/processor/data.ts | 52263 +--------------- .../fb_custom_audience/router/audienceList.ts | 123 - .../router/batchingRecord.ts | 130 - .../fb_custom_audience/router/data.ts | 437 +- .../fb_custom_audience/router/eventStream.ts | 137 +- .../router/{record.ts => rETL.ts} | 185 +- test/integrations/testUtils.ts | 4 +- 18 files changed, 2439 insertions(+), 57181 deletions(-) create mode 100644 test/integrations/destinations/fb_custom_audience/mocks.ts delete mode 100644 test/integrations/destinations/fb_custom_audience/router/audienceList.ts delete mode 100644 test/integrations/destinations/fb_custom_audience/router/batchingRecord.ts rename test/integrations/destinations/fb_custom_audience/router/{record.ts => rETL.ts} (57%) diff --git a/package-lock.json b/package-lock.json index cf0af8c325..fadfe7df1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,6 +86,7 @@ "@types/koa-bodyparser": "^4.3.10", "@types/lodash": "^4.14.197", "@types/node": "^20.2.5", + "@types/supertest": "^6.0.2", "@typescript-eslint/eslint-plugin": "^5.61.0", "@typescript-eslint/parser": "^5.59.2", "axios-mock-adapter": "^1.22.0", @@ -449,19 +450,6 @@ "tslib": "^2.6.2" } }, - "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==", - "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==" - }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", "license": "Apache-2.0", @@ -515,6 +503,235 @@ "tslib": "^2.6.2" } }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.650.0.tgz", + "integrity": "sha512-ng9Ta7emTgIAnUW52wi2KcNbAudGQPiXuPKJwtw67WQei3gHMpxvgCCRXP7AiB+LyB/fBURxraDkO5N+sPZp0w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/client-sts": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz", + "integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sts": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz", + "integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@aws-sdk/client-personalize": { "version": "3.642.0", "license": "Apache-2.0", @@ -1349,50 +1566,52 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.485.0.tgz", - "integrity": "sha512-apN2bEn0PZs0jD4jAfvwO3dlWqw9YIQJ6TAudM1bd3S5vzWqlBBcLfQpK6taHoQaI+WqgUWXLuOf7gRFbGXKPg==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.650.0.tgz", + "integrity": "sha512-YKm14gCMChD/jlCisFlsVqB8HJujR41bl4Fup2crHwNJxhD/9LTnzwMiVVlBqlXr41Sfa6fSxczX2AMP8NM14A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/client-sso-oidc": { @@ -1790,92 +2009,31 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/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==", - "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-sdk/client-sso/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==" - }, - "node_modules/@aws-sdk/client-sso/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==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-sso/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==" - }, - "node_modules/@aws-sdk/client-sso/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==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-sso/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==" - }, - "node_modules/@aws-sdk/client-sso/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==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/client-sso/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==" - }, "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", - "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", - "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -1886,3598 +2044,266 @@ } } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", - "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "node_modules/@aws-sdk/client-sts": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", + "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.637.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.637.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", - "dependencies": { - "@smithy/types": "^2.12.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", - "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", - "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", - "dependencies": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz", - "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.637.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.637.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", - "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.637.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", - "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", - "dependencies": { - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", - "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", - "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.637.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", - "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.637.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.637.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", - "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", - "dependencies": { - "@aws-sdk/client-sso": "3.637.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", - "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.637.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { - "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", - "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.485.0.tgz", - "integrity": "sha512-Yvi80DQcbjkYCft471ClE3HuetuNVqntCs6eFOomDcrJaqdOFrXv2kJAxky84MRA/xb7bGlDGAPbTuj1ICputg==", - "dependencies": { - "@smithy/core": "^1.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", - "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", - "dependencies": { - "@smithy/types": "^2.12.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/signature-v4": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", - "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-uri-escape": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/core/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.485.0.tgz", - "integrity": "sha512-XIy5h1AcDiY3V286X7KrLA5HAxLfzLGrUGBPFY+GTJGYetDhlJwFz12q6BOkIfeAhUbT2Umb4ptujX9eqpZJHQ==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", - "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-sdk/credential-provider-cognito-identity/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==" - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==" - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.485.0.tgz", - "integrity": "sha512-1SYhvRu/dNqQ5HcIgm7wIpyn1FsthbgG04o6QyVAnfOxmawFt4nqCEtNCwsmlX7o1ZCTYY+qNrozb7XZy+GKSQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-signing": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/client-sts": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz", - "integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", - "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", - "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", - "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", - "dependencies": { - "@smithy/types": "^2.12.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", - "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", - "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", - "dependencies": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/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==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.485.0.tgz", - "integrity": "sha512-3XkFgwVU1XOB33dV7t9BKJ/ptdl2iS+0dxE7ecq8aqT2/gsfKmLCae1G17P8WmdD3z0kMDTvnqM2aWgUnSOkmg==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.485.0.tgz", - "integrity": "sha512-2/2Y3Z7cpKf8vbQ+FzoBPxRyb0hGJZB1YrnH7hptVi5gSVe1NiwV5ZtsDnv4cwUfOBqEu97nMXw5IrRO26S0DA==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/util-stream": "^2.0.24", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.485.0.tgz", - "integrity": "sha512-cFYF/Bdw7EnT4viSxYpNIv3IBkri/Yb+JpQXl8uDq7bfVJfAN5qZmK07vRkg08xL6TC4F41wshhMSAucGdTwIw==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.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.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.485.0.tgz", - "integrity": "sha512-2DwzO2azkSzngifKDT61W/DL0tSzewuaFHiLJWdfc8Et3mdAQJ9x3KAj8u7XFpjIcGNqk7FiKjN+zeGUuNiEhA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-ini": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.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.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.485.0.tgz", - "integrity": "sha512-X9qS6ZO/rDKYDgWqD1YmSX7sAUUHax9HbXlgGiTTdtfhZvQh1ZmnH6wiPu5WNliafHZFtZT2W07kgrDLPld/Ug==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.485.0.tgz", - "integrity": "sha512-l0oC8GTrWh+LFQQfSmG1Jai1PX7Mhj9arb/CaS1/tmeZE0hgIXW++tvljYs/Dds4LGXUlaWG+P7BrObf6OyIXA==", - "dependencies": { - "@aws-sdk/client-sso": "3.485.0", - "@aws-sdk/token-providers": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.485.0.tgz", - "integrity": "sha512-WpBFZFE0iXtnibH5POMEKITj/hR0YV5l2n9p8BEvKjdJ63s3Xke1RN20ZdIyKDaRDwj8adnKDgNPEnAKdS4kLw==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.485.0.tgz", - "integrity": "sha512-SpGEmiVr+C9Dtc5tZFfFYXSNxbl1jShLlyZPWERHBn4QwGvdXcgPB96I0yvUuitBKrM0winHsCWH7CR/z24kmg==", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.485.0", - "@aws-sdk/client-sso": "3.485.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/credential-provider-cognito-identity": "3.485.0", - "@aws-sdk/credential-provider-env": "3.485.0", - "@aws-sdk/credential-provider-http": "3.485.0", - "@aws-sdk/credential-provider-ini": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/credential-provider-process": "3.485.0", - "@aws-sdk/credential-provider-sso": "3.485.0", - "@aws-sdk/credential-provider-web-identity": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@smithy/credential-provider-imds": "^2.0.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/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==", - "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-sdk/credential-providers/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==" - }, - "node_modules/@aws-sdk/credential-providers/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==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-providers/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==" - }, - "node_modules/@aws-sdk/credential-providers/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==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-providers/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==" - }, - "node_modules/@aws-sdk/credential-providers/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==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/credential-providers/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==" - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.485.0.tgz", - "integrity": "sha512-1SYhvRu/dNqQ5HcIgm7wIpyn1FsthbgG04o6QyVAnfOxmawFt4nqCEtNCwsmlX7o1ZCTYY+qNrozb7XZy+GKSQ==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.485.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-signing": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.485.0.tgz", - "integrity": "sha512-PI4q36kVF0fpIPZyeQhrwwJZ6SRkOGvU3rX5Qn4b5UY5X+Ct1aLhqSX8/OB372UZIcnh6eSvERu8POHleDO7Jw==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/core": "3.485.0", - "@aws-sdk/credential-provider-node": "3.485.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/core": "^1.2.2", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/protocol-http": "^3.0.12", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-middleware": "^2.0.9", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "fast-xml-parser": "4.2.5", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", - "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "bowser": "^2.11.0", - "tslib": "^2.5.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", - "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/core": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", - "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-retry": "^2.3.1", - "@smithy/middleware-serde": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", - "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", - "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", - "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", - "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", - "dependencies": { - "@smithy/types": "^2.12.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", - "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", - "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", - "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", - "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", - "dependencies": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", - "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/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==", - "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@aws-sdk/lib-storage": { + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { "version": "3.637.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.637.0.tgz", - "integrity": "sha512-HiNGOP4a1QrCWwO1joKw4mCp19nLXoF9K52PislBaYDI35IlHC3DP6MeOg5zmElwtL1GtEHFBy5olfPWPsLyLg==", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/smithy-client": "^3.2.0", - "buffer": "5.6.0", - "events": "3.3.0", - "stream-browserify": "3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-s3": "^3.637.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", - "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz", + "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.637.0", + "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", - "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", - "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.485.0.tgz", - "integrity": "sha512-1mAUX9dQNGo2RIKseVj7SI/D5abQJQ/Os8hQ0NyVAyyVYF+Yjx5PphKgfhM5yoBwuwZUl6q71XPYEGNx7be6SA==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz", + "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.637.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz", + "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.637.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.637.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", - "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz", + "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==", "dependencies": { + "@aws-sdk/client-sso": "3.637.0", + "@aws-sdk/token-providers": "3.614.0", "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -5485,131 +2311,117 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.485.0.tgz", - "integrity": "sha512-O8IgJ0LHi5wTs5GlpI7nqmmSSagkVdd1shpGgQWY2h0kMSCII8CJZHBG97dlFFpGTvx5EDlhPNek7rl/6F4dRw==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.485.0.tgz", - "integrity": "sha512-ZeVNATGNFcqkWDut3luVszROTUzkU5u+rJpB/xmeMoenlDAjPRiHt/ca3WkI5wAnIJ1VSNGpD2sOFLMCH+EWag==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz", + "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.637.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", - "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", "dependencies": { - "@aws-sdk/core": "3.635.0", "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.4.0", "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", "@smithy/types": "^3.3.0", "@smithy/util-config-provider": "^3.0.0", "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", - "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", "dependencies": { - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", + "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", + "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { "version": "3.609.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -5618,462 +2430,560 @@ "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz", + "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/is-array-buffer": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-buffer-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.485.0.tgz", - "integrity": "sha512-41xzT2p1sOibhsLkdE5rwPJkNbBtKD8Gp36/ySfu0KE415wfXKacElSVxAaBw39/j7iSWDYqqybeEYbAzk+3GQ==", - "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.8.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", - "dependencies": { - "@smithy/types": "^2.12.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/signature-v4": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", - "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "node_modules/@aws-sdk/core": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.649.0.tgz", + "integrity": "sha512-dheG/X2y25RHE7K+TlS32kcy7TgDg1OpWV44BQRoE0OBPAWmFR1D1qjjTZ7WWrdqRPKzcnDj1qED8ncyncOX8g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-uri-escape": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/core": "^2.4.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/signature-v4": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-middleware": "^3.0.4", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.650.0.tgz", + "integrity": "sha512-QwtRKWKE6vv78Be3Lm5GmFkSl2DGWSOXPZYgkbo8GsD6SP0ParUvJvUE8wsPS5c4tUXC9KuvJAwYAYNFN10Fnw==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/client-cognito-identity": "3.650.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.649.0.tgz", + "integrity": "sha512-tViwzM1dauksA3fdRjsg0T8mcHklDa8EfveyiQKK6pUJopkqV6FQx+X5QNda0t/LrdEVlFZvwHNdXqOEfc83TA==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.649.0.tgz", + "integrity": "sha512-ODAJ+AJJq6ozbns6ejGbicpsQ0dyMOpnGlg0J9J0jITQ05DKQZ581hdB8APDOZ9N8FstShP6dLZflSj8jb5fNA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.649.0", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-stream": "^3.1.4", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.650.0.tgz", + "integrity": "sha512-uBra5YjzS/gWSekAogfqJfY6c+oKQkkou7Cjc4d/cpMNvQtF1IBdekJ7NaE1RfsDEz3uH1+Myd07YWZAJo/2Qw==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-ini": "3.650.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", - "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz", + "integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" } }, - "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/client-sts": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz", + "integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^3.3.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.485.0.tgz", - "integrity": "sha512-CddCVOn+OPQ0CcchketIg+WF6v+MDLAf3GOYTR2htUxxIm7HABuRd6R3kvQ5Jny9CV8gMt22G1UZITsFexSJlQ==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.650.0.tgz", + "integrity": "sha512-x2M9buZxIsKuUbuDgkGHhAKYBpn0/rYdKlwuFuOhXyyAcnhvPj0lgNF2KE4ld/GF1mKr7FF/uV3G9lM6PFaYmA==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz", + "integrity": "sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.649.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", + "license": "Apache-2.0", + "peer": true, "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.485.0.tgz", - "integrity": "sha512-2FB2EQ0sIE+YgFqGtkE1lDIMIL6nYe6MkOHBwBM7bommadKIrbbr2L22bPZGs3ReTsxiJabjzxbuCAVhrpHmhg==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "@smithy/util-config-provider": "^2.1.0", - "@smithy/util-middleware": "^2.0.9", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.649.0.tgz", + "integrity": "sha512-6VYPQpEVpU+6DDS/gLoI40ppuNM5RPIEprK30qZZxnhTr5wyrGOeJ7J7wbbwPOZ5dKwta290BiJDU2ipV8Y9BQ==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.650.0.tgz", + "integrity": "sha512-069nkhcwximbvyGiAC6Fr2G+yrG/p1S3NQ5BZ2cMzB1hgUKo6TvgFK7nriYI4ljMQ+UWxqPwIdTqiUmn2iJmhg==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/client-sso": "3.650.0", + "@aws-sdk/token-providers": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz", + "integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", - "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/client-sts": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz", + "integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==", "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.649.0.tgz", + "integrity": "sha512-ZBqr+JuXI9RiN+4DSZykMx5gxpL8Dr3exIfFhxMiwAP3DQojwl0ub8ONjMuAjq9OvmX6n+jHZL6fBnNgnNFC8w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.485.0.tgz", - "integrity": "sha512-kOXA1WKIVIFNRqHL8ynVZ3hCKLsgnEmGr2iDR6agDNw5fYIlCO/6N2xR6QdGcLTvUUbwOlz4OvKLUQnWMKAnnA==", - "dependencies": { - "@aws-crypto/sha256-browser": "3.0.0", - "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.485.0", - "@aws-sdk/middleware-logger": "3.485.0", - "@aws-sdk/middleware-recursion-detection": "3.485.0", - "@aws-sdk/middleware-user-agent": "3.485.0", - "@aws-sdk/region-config-resolver": "3.485.0", - "@aws-sdk/types": "3.485.0", - "@aws-sdk/util-endpoints": "3.485.0", - "@aws-sdk/util-user-agent-browser": "3.485.0", - "@aws-sdk/util-user-agent-node": "3.485.0", - "@smithy/config-resolver": "^2.0.23", - "@smithy/fetch-http-handler": "^2.3.2", - "@smithy/hash-node": "^2.0.18", - "@smithy/invalid-dependency": "^2.0.16", - "@smithy/middleware-content-length": "^2.0.18", - "@smithy/middleware-endpoint": "^2.3.0", - "@smithy/middleware-retry": "^2.0.26", - "@smithy/middleware-serde": "^2.0.16", - "@smithy/middleware-stack": "^2.0.10", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/node-http-handler": "^2.2.2", - "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.12", - "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.2.1", - "@smithy/types": "^2.8.0", - "@smithy/url-parser": "^2.0.16", - "@smithy/util-base64": "^2.0.1", - "@smithy/util-body-length-browser": "^2.0.1", - "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.24", - "@smithy/util-defaults-mode-node": "^2.0.32", - "@smithy/util-endpoints": "^1.0.8", - "@smithy/util-retry": "^2.0.9", - "@smithy/util-utf8": "^2.0.2", - "tslib": "^2.5.0" }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/token-providers/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==", - "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-sdk/token-providers/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==" - }, - "node_modules/@aws-sdk/token-providers/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==", - "dependencies": { - "@aws-crypto/util": "^3.0.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/token-providers/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==" - }, - "node_modules/@aws-sdk/token-providers/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==", - "dependencies": { - "tslib": "^1.11.1" - } - }, - "node_modules/@aws-sdk/token-providers/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==" - }, - "node_modules/@aws-sdk/token-providers/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==", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-utf8-browser": "^3.0.0", - "tslib": "^1.11.1" + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.649.0" } }, - "node_modules/@aws-sdk/token-providers/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==" - }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.485.0.tgz", - "integrity": "sha512-QliWbjg0uOhGTcWgWTKPMY0SBi07g253DjwrCINT1auqDrdQPxa10xozpZExBYjAK2KuhYDNUzni127ae6MHOw==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/types": "^2.8.0", + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.485.0.tgz", - "integrity": "sha512-QF+aQ9jnDlPUlFBxBRqOylPf86xQuD3aEPpOErR+50qJawVvKa94uiAFdvtI9jv6hnRZmuFsTj2rsyytnbAYBA==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/node-config-provider": "^2.1.9", - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" }, "peerDependencies": { "aws-crt": ">=1.0.0" @@ -6084,555 +2994,739 @@ } } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", - "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/config-resolver": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", - "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-config-provider": "^2.3.0", - "@smithy/util-middleware": "^2.2.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/credential-provider-imds": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", - "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/fetch-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", - "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "node_modules/@aws-sdk/credential-providers": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.650.0.tgz", + "integrity": "sha512-e99xHtzfL3fwS5j2gzMXRikoux/vNO3JKlxYSTnz/yfcReYRtRIz4iNrbqOzYFIQFlPS11ToXXXcwl6FOzNM7Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", + "@aws-sdk/client-cognito-identity": "3.650.0", + "@aws-sdk/client-sso": "3.650.0", + "@aws-sdk/client-sts": "3.650.0", + "@aws-sdk/credential-provider-cognito-identity": "3.650.0", + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-ini": "3.650.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/hash-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", - "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.650.0.tgz", + "integrity": "sha512-6J7IS0f8ovhvbIAZaynOYP+jPX8344UlTjwHxjaXHgFvI8axu3+NslKtEEV5oHLhgzDvrKbinsu5lgE2n4Sqng==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/invalid-dependency": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", - "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.650.0.tgz", + "integrity": "sha512-ISK0ZQYA7O5/WYgslpWy956lUBudGC9d7eL0FFbiL0j50N80Gx3RUv22ezvZgxJWE0W3DqNr4CE19sPYn4Lw8g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.650.0", + "@aws-sdk/core": "3.649.0", + "@aws-sdk/credential-provider-node": "3.650.0", + "@aws-sdk/middleware-host-header": "3.649.0", + "@aws-sdk/middleware-logger": "3.649.0", + "@aws-sdk/middleware-recursion-detection": "3.649.0", + "@aws-sdk/middleware-user-agent": "3.649.0", + "@aws-sdk/region-config-resolver": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@aws-sdk/util-user-agent-browser": "3.649.0", + "@aws-sdk/util-user-agent-node": "3.649.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/core": "^2.4.1", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/hash-node": "^3.0.4", + "@smithy/invalid-dependency": "^3.0.4", + "@smithy/middleware-content-length": "^3.0.6", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.16", + "@smithy/util-defaults-mode-node": "^3.0.16", + "@smithy/util-endpoints": "^2.1.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-content-length": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", - "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.650.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.650.0.tgz", + "integrity": "sha512-x2M9buZxIsKuUbuDgkGHhAKYBpn0/rYdKlwuFuOhXyyAcnhvPj0lgNF2KE4ld/GF1mKr7FF/uV3G9lM6PFaYmA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/credential-provider-env": "3.649.0", + "@aws-sdk/credential-provider-http": "3.649.0", + "@aws-sdk/credential-provider-process": "3.649.0", + "@aws-sdk/credential-provider-sso": "3.650.0", + "@aws-sdk/credential-provider-web-identity": "3.649.0", + "@aws-sdk/types": "3.649.0", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.650.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-endpoint": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", - "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.649.0.tgz", + "integrity": "sha512-XVk3WsDa0g3kQFPmnCH/LaCtGY/0R2NDv7gscYZSXiBZcG/fixasglTprgWSp8zcA0t7tEIGu9suyjz8ZwhymQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", - "@smithy/url-parser": "^2.2.0", - "@smithy/util-middleware": "^2.2.0", + "@aws-sdk/types": "3.649.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.649.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-retry": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", - "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", - "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/service-error-classification": "^2.1.5", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "@smithy/util-middleware": "^2.2.0", - "@smithy/util-retry": "^2.2.0", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=14.0.0" + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.649.0.tgz", + "integrity": "sha512-IY43r256LhKAvdEVQO/FPdUyVpcZS5EVxh/WHVdNzuN1bNLoUK2rIzuZqVA0EGguvCxoXVmQv9m50GvG7cGktg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-serde": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", - "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.649.0.tgz", + "integrity": "sha512-x5DiLpZDG/AJmCIBnE3Xhpwy35QIo3WqNiOpw6ExVs1NydbM/e90zFPSfhME0FM66D/WorigvluBxxwjxDm/GA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/middleware-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", - "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", - "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/querystring-builder": "^2.2.0", - "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "node_modules/@aws-sdk/lib-storage": { + "version": "3.637.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.637.0.tgz", + "integrity": "sha512-HiNGOP4a1QrCWwO1joKw4mCp19nLXoF9K52PislBaYDI35IlHC3DP6MeOg5zmElwtL1GtEHFBy5olfPWPsLyLg==", "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/abort-controller": "^3.1.1", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/smithy-client": "^3.2.0", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.637.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/protocol-http": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", - "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-builder": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", - "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", - "@smithy/util-uri-escape": "^2.2.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/querystring-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", - "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/service-error-classification": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", - "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0" + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/smithy-client": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", - "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^2.5.1", - "@smithy/middleware-stack": "^2.2.0", - "@smithy/protocol-http": "^3.3.0", - "@smithy/types": "^2.12.0", - "@smithy/util-stream": "^2.2.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", - "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^2.2.0", - "@smithy/types": "^2.12.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-base64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", - "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", - "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.649.0.tgz", + "integrity": "sha512-PjAe2FocbicHVgNNwdSZ05upxIO7AgTPFtQLpnIAmoyzMcgv/zNB5fBn3uAnQSAeEPPCD+4SYVEUD1hw1ZBvEg==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-body-length-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", - "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", + "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", + "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", - "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", - "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.649.0.tgz", + "integrity": "sha512-qdqRx6q7lYC6KL/NT9x3ShTL0TBuxdkCczGzHzY3AnOoYUjnCDH7Vlq867O6MAvb4EnGNECFzIgtkZkQ4FhY5w==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", - "bowser": "^2.11.0", + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-defaults-mode-node": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", - "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", - "dependencies": { - "@smithy/config-resolver": "^2.2.0", - "@smithy/credential-provider-imds": "^2.3.0", - "@smithy/node-config-provider": "^2.3.0", - "@smithy/property-provider": "^2.2.0", - "@smithy/smithy-client": "^2.5.1", - "@smithy/types": "^2.12.0", + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.649.0.tgz", + "integrity": "sha512-IPnO4wlmaLRf6IYmJW2i8gJ2+UPXX0hDRv1it7Qf8DpBW+lGyF2rnoN7NrFX0WIxdGOlJF1RcOr/HjXb2QeXfQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 10.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", + "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-hex-encoding": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", - "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "license": "Apache-2.0", "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-middleware": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", - "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-retry": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", - "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^2.1.5", - "@smithy/types": "^2.12.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", - "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^2.5.0", - "@smithy/node-http-handler": "^2.5.0", - "@smithy/types": "^2.12.0", - "@smithy/util-base64": "^2.3.0", - "@smithy/util-buffer-from": "^2.2.0", - "@smithy/util-hex-encoding": "^2.2.0", - "@smithy/util-utf8": "^2.3.0", + "@smithy/is-array-buffer": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/util-uri-escape": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", - "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.485.0.tgz", - "integrity": "sha512-+QW32YQdvZRDOwrAQPo/qCyXoSjgXB6RwJwCwkd8ebJXRXw6tmGKIHaZqYHt/LtBymvnaBgBBADNa4+qFvlOFw==", + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", + "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.8.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/middleware-ssec/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.649.0.tgz", + "integrity": "sha512-q6sO10dnCXoxe9thobMJxekhJumzd1j6dxcE1+qJdYKHJr6yYgWbogJqrLCpWd30w0lEvnuAHK8lN2kWLdJxJw==", "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.649.0", + "@aws-sdk/util-endpoints": "3.649.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.485.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.485.0.tgz", - "integrity": "sha512-dTd642F7nJisApF8YjniqQ6U59CP/DCtar11fXf1nG9YNBCBsNNVw5ZfZb5nSNzaIdy27mQioWTCV18JEj1mxg==", + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.649.0.tgz", + "integrity": "sha512-xURBvdQXvRvca5Du8IlC5FyCj3pkw8Z75+373J3Wb+vyg8GjD14HfKk1Je1HCCQDyIE9VB/scYDcm9ri0ppePw==", + "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.485.0", - "@smithy/util-endpoints": "^1.0.8", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.649.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/node-config-provider": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", - "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", + "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^2.2.0", - "@smithy/shared-ini-file-loader": "^2.4.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/property-provider": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", - "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/shared-ini-file-loader": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", - "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "node_modules/@aws-sdk/types": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.649.0.tgz", + "integrity": "sha512-PuPw8RysbhJNlaD2d/PzOTf8sbf4Dsn2b7hwyGh7YVG3S75yTpxSAZxrnhKsz9fStgqFmnw/jUfV/G+uQAeTVw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^2.12.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", - "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/util-endpoints": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", - "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.649.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.649.0.tgz", + "integrity": "sha512-bZI1Wc3R/KibdDVWFxX/N4AoJFG4VJ92Dp4WYmOrVD6VPkb8jPz7ZeiYc7YwPl8NoDjYyPneBV0lEoK/V8OKAA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^2.3.0", - "@smithy/types": "^2.12.0", + "@aws-sdk/types": "3.649.0", + "@smithy/types": "^3.4.0", + "@smithy/util-endpoints": "^2.1.0", "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=16.0.0" } }, "node_modules/@aws-sdk/util-locate-window": { @@ -6700,14 +3794,6 @@ "node": ">=16.0.0" } }, - "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==", - "dependencies": { - "tslib": "^2.3.1" - } - }, "node_modules/@aws-sdk/xml-builder": { "version": "3.609.0", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", @@ -9595,11 +6681,12 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.2.tgz", + "integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -9626,13 +6713,15 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.5", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.6.tgz", + "integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.4", "tslib": "^2.6.2" }, "engines": { @@ -9640,17 +6729,19 @@ } }, "node_modules/@smithy/core": { - "version": "2.4.0", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.1.tgz", + "integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-retry": "^3.0.16", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.4", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -9691,13 +6782,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz", + "integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", "tslib": "^2.6.2" }, "engines": { @@ -9770,13 +6863,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz", + "integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } @@ -9794,10 +6888,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "3.0.3", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.4.tgz", + "integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -9891,10 +6987,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz", + "integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" } }, @@ -9959,11 +7057,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz", + "integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==", "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -9971,16 +7071,17 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz", + "integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", + "@smithy/middleware-serde": "^3.0.4", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", + "@smithy/url-parser": "^3.0.4", + "@smithy/util-middleware": "^3.0.4", "tslib": "^2.6.2" }, "engines": { @@ -9988,16 +7089,18 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.15", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz", + "integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/protocol-http": "^4.1.1", + "@smithy/service-error-classification": "^3.0.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", + "@smithy/util-middleware": "^3.0.4", + "@smithy/util-retry": "^3.0.4", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -10006,11 +7109,12 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz", + "integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10018,11 +7122,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz", + "integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10030,13 +7135,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz", + "integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==", + "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10044,14 +7150,15 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz", + "integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==", + "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/abort-controller": "^3.1.2", + "@smithy/protocol-http": "^4.1.1", + "@smithy/querystring-builder": "^3.0.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10059,11 +7166,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.4.tgz", + "integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10071,11 +7179,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.1.tgz", + "integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10083,11 +7192,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz", + "integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -10096,11 +7206,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz", + "integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10108,21 +7219,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz", + "integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0" + "@smithy/types": "^3.4.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz", + "integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10130,14 +7244,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.0", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.1.tgz", + "integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-middleware": "^3.0.4", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -10179,15 +7295,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.0.tgz", + "integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==", + "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", + "@smithy/middleware-endpoint": "^3.1.1", + "@smithy/middleware-stack": "^3.0.4", + "@smithy/protocol-http": "^4.1.1", + "@smithy/types": "^3.4.0", + "@smithy/util-stream": "^3.1.4", "tslib": "^2.6.2" }, "engines": { @@ -10195,9 +7312,10 @@ } }, "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.0.tgz", + "integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -10206,12 +7324,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.4.tgz", + "integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/querystring-parser": "^3.0.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" } }, @@ -10303,12 +7422,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.15", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz", + "integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==", "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -10317,15 +7438,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.15", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz", + "integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==", "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", + "@smithy/config-resolver": "^3.0.6", + "@smithy/credential-provider-imds": "^3.2.1", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/property-provider": "^3.1.4", + "@smithy/smithy-client": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10333,11 +7456,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz", + "integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==", "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/node-config-provider": "^3.1.5", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10356,11 +7481,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.4.tgz", + "integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==", + "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.3.0", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10368,11 +7494,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.3", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.4.tgz", + "integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==", "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", + "@smithy/service-error-classification": "^3.0.4", + "@smithy/types": "^3.4.0", "tslib": "^2.6.2" }, "engines": { @@ -10380,13 +7508,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.4.tgz", + "integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==", + "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", + "@smithy/fetch-http-handler": "^3.2.5", + "@smithy/node-http-handler": "^3.2.0", + "@smithy/types": "^3.4.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -10552,6 +7681,13 @@ "version": "0.5.8", "license": "MIT" }, + "node_modules/@types/cookiejar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/cookies": { "version": "0.7.10", "license": "MIT", @@ -10687,6 +7823,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/methods": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "license": "MIT" @@ -10741,6 +7884,30 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/superagent": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "^2.1.5", + "@types/methods": "^1.1.4", + "@types/node": "*", + "form-data": "^4.0.0" + } + }, + "node_modules/@types/supertest": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.2.tgz", + "integrity": "sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/methods": "^1.1.4", + "@types/superagent": "^8.1.0" + } + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "license": "MIT" @@ -21628,7 +18795,9 @@ } }, "node_modules/path-to-regexp": { - "version": "6.2.1", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "license": "MIT" }, "node_modules/path-type": { diff --git a/package.json b/package.json index c96d436b3d..da4891e849 100644 --- a/package.json +++ b/package.json @@ -131,6 +131,7 @@ "@types/koa-bodyparser": "^4.3.10", "@types/lodash": "^4.14.197", "@types/node": "^20.2.5", + "@types/supertest": "^6.0.2", "@typescript-eslint/eslint-plugin": "^5.61.0", "@typescript-eslint/parser": "^5.59.2", "axios-mock-adapter": "^1.22.0", diff --git a/src/types/index.ts b/src/types/index.ts index 7aa6bd8ebf..45ec7445c3 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -135,6 +135,14 @@ type Destination = { IsConnectionEnabled?: boolean; }; +type Connection = { + sourceId: string; + destinationId: string; + enabled: boolean; + config: Record; + processorEnabled?: boolean; +}; + type UserTransformationLibrary = { VersionID: string; }; @@ -151,6 +159,7 @@ type ProcessorTransformationRequest = { message: object; metadata: Metadata; destination: Destination; + connection?: Connection; libraries?: UserTransformationLibrary[]; credentials?: Credential[]; }; @@ -160,6 +169,7 @@ type RouterTransformationRequestData = { message: object; metadata: Metadata; destination: Destination; + connection?: Connection; }; type RouterTransformationRequest = { @@ -350,6 +360,7 @@ export { DeliveryJobState, DeliveryV0Response, DeliveryV1Response, + Connection, Destination, ErrorDetailer, MessageIdMetadataMap, diff --git a/src/v0/destinations/fb_custom_audience/config.js b/src/v0/destinations/fb_custom_audience/config.js index 39ca2d04c4..5a3f0742e1 100644 --- a/src/v0/destinations/fb_custom_audience/config.js +++ b/src/v0/destinations/fb_custom_audience/config.js @@ -89,10 +89,11 @@ const subTypeFields = [ 'CONTACT_IMPORTER', 'DATA_FILE', ]; -// as per real time experimentation maximum 500 users can be added at a time -// const MAX_USER_COUNT = 500; (using from destination definition) + const USER_ADD = 'add'; const USER_DELETE = 'remove'; +// https://developers.facebook.com/docs/marketing-api/audiences/guides/custom-audiences/ +const MAX_USER_COUNT = 10000; /* No official Documentation is available for this but using trial and error method we found that 65000 bytes is the maximum payload allowed size but we are 60000 just to be sure batching is done properly */ @@ -102,6 +103,7 @@ module.exports = { schemaFields, USER_ADD, USER_DELETE, + MAX_USER_COUNT, typeFields, subTypeFields, maxPayloadSize, diff --git a/src/v0/destinations/fb_custom_audience/recordTransform.js b/src/v0/destinations/fb_custom_audience/recordTransform.js index 62d4bd568b..9f48a37fca 100644 --- a/src/v0/destinations/fb_custom_audience/recordTransform.js +++ b/src/v0/destinations/fb_custom_audience/recordTransform.js @@ -1,9 +1,7 @@ /* eslint-disable no-const-assign */ const lodash = require('lodash'); -const get = require('get-value'); const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib'); -const { schemaFields } = require('./config'); -const { MappedToDestinationKey } = require('../../../constants'); +const { schemaFields, MAX_USER_COUNT } = require('./config'); const stats = require('../../../util/stats'); const { getDestinationExternalIDInfoForRetl, @@ -11,6 +9,8 @@ const { checkSubsetOfArray, returnArrayOfSubarrays, getSuccessRespEvents, + isEventSentByVDMV2Flow, + isEventSentByVDMV1Flow, } = require('../../util'); const { getErrorResponse, createFinalResponse } = require('../../util/recordUtils'); const { @@ -20,6 +20,7 @@ const { batchingWithPayloadSize, responseBuilderSimple, getDataSource, + generateAppSecretProof, } = require('./util'); const processRecordEventArray = ( @@ -31,7 +32,7 @@ const processRecordEventArray = ( prepareParams, destination, operation, - operationAudienceId, + audienceId, ) => { const toSendEvents = []; const metadata = []; @@ -88,7 +89,7 @@ const processRecordEventArray = ( operationCategory: operation, }; - const builtResponse = responseBuilderSimple(wrappedResponse, operationAudienceId); + const builtResponse = responseBuilderSimple(wrappedResponse, audienceId); toSendEvents.push(builtResponse); }); @@ -99,49 +100,26 @@ const processRecordEventArray = ( return response; }; -async function processRecordInputs(groupedRecordInputs) { - const { destination } = groupedRecordInputs[0]; - const { message } = groupedRecordInputs[0]; - const { - isHashRequired, - accessToken, - disableFormat, - type, - subType, - isRaw, - maxUserCount, - audienceId, - } = destination.Config; +function preparePayload(events, config) { + const { audienceId, userSchema, isRaw, type, subType, isHashRequired, disableFormat } = config; + const { destination } = events[0]; + const { accessToken, appSecret } = destination.Config; const prepareParams = { access_token: accessToken, }; - // maxUserCount validation - const maxUserCountNumber = parseInt(maxUserCount, 10); - if (Number.isNaN(maxUserCountNumber)) { - throw new ConfigurationError('Batch size must be an Integer.'); + if (isDefinedAndNotNullAndNotEmpty(appSecret)) { + const dateNow = Date.now(); + prepareParams.appsecret_time = Math.floor(dateNow / 1000); // Get current Unix time in seconds + prepareParams.appsecret_proof = generateAppSecretProof(accessToken, appSecret, dateNow); } - // audience id validation - let operationAudienceId = audienceId; - const mappedToDestination = get(message, MappedToDestinationKey); - if (mappedToDestination) { - const { objectType } = getDestinationExternalIDInfoForRetl(message, 'FB_CUSTOM_AUDIENCE'); - operationAudienceId = objectType; - } - if (!isDefinedAndNotNullAndNotEmpty(operationAudienceId)) { - throw new ConfigurationError('Audience ID is a mandatory field'); - } + const cleanUserSchema = userSchema.map((field) => field.trim()); - // user schema validation - let { userSchema } = destination.Config; - if (mappedToDestination) { - userSchema = getSchemaForEventMappedToDest(message); - } - if (!Array.isArray(userSchema)) { - userSchema = [userSchema]; + if (!isDefinedAndNotNullAndNotEmpty(audienceId)) { + throw new ConfigurationError('Audience ID is a mandatory field'); } - if (!checkSubsetOfArray(schemaFields, userSchema)) { + if (!checkSubsetOfArray(schemaFields, cleanUserSchema)) { throw new ConfigurationError('One or more of the schema fields are not supported'); } @@ -156,7 +134,7 @@ async function processRecordInputs(groupedRecordInputs) { paramsPayload.data_source = dataSource; } - const groupedRecordsByAction = lodash.groupBy(groupedRecordInputs, (record) => + const groupedRecordsByAction = lodash.groupBy(events, (record) => record.message.action?.toLowerCase(), ); @@ -167,55 +145,55 @@ async function processRecordInputs(groupedRecordInputs) { if (groupedRecordsByAction.delete) { const deleteRecordChunksArray = returnArrayOfSubarrays( groupedRecordsByAction.delete, - maxUserCountNumber, + MAX_USER_COUNT, ); deleteResponse = processRecordEventArray( deleteRecordChunksArray, - userSchema, + cleanUserSchema, isHashRequired, disableFormat, paramsPayload, prepareParams, destination, 'remove', - operationAudienceId, + audienceId, ); } if (groupedRecordsByAction.insert) { const insertRecordChunksArray = returnArrayOfSubarrays( groupedRecordsByAction.insert, - maxUserCountNumber, + MAX_USER_COUNT, ); insertResponse = processRecordEventArray( insertRecordChunksArray, - userSchema, + cleanUserSchema, isHashRequired, disableFormat, paramsPayload, prepareParams, destination, 'add', - operationAudienceId, + audienceId, ); } if (groupedRecordsByAction.update) { const updateRecordChunksArray = returnArrayOfSubarrays( groupedRecordsByAction.update, - maxUserCountNumber, + MAX_USER_COUNT, ); updateResponse = processRecordEventArray( updateRecordChunksArray, - userSchema, + cleanUserSchema, isHashRequired, disableFormat, paramsPayload, prepareParams, destination, 'add', - operationAudienceId, + audienceId, ); } @@ -225,6 +203,7 @@ async function processRecordInputs(groupedRecordInputs) { deleteResponse, insertResponse, updateResponse, + errorResponse, ); if (finalResponse.length === 0) { @@ -235,6 +214,67 @@ async function processRecordInputs(groupedRecordInputs) { return finalResponse; } +function processRecordInputsV1(groupedRecordInputs) { + const { destination } = groupedRecordInputs[0]; + const { message } = groupedRecordInputs[0]; + const { isHashRequired, disableFormat, type, subType, isRaw, audienceId, userSchema } = + destination.Config; + + let operationAudienceId = audienceId; + let updatedUserSchema = userSchema; + if (isEventSentByVDMV1Flow(groupedRecordInputs[0])) { + const { objectType } = getDestinationExternalIDInfoForRetl(message, 'FB_CUSTOM_AUDIENCE'); + operationAudienceId = objectType; + updatedUserSchema = getSchemaForEventMappedToDest(message); + } + + return preparePayload(groupedRecordInputs, { + audienceId: operationAudienceId, + userSchema: updatedUserSchema, + isRaw, + type, + subType, + isHashRequired, + disableFormat, + }); +} + +const processRecordInputsV2 = (groupedRecordInputs) => { + const { connection, message } = groupedRecordInputs[0]; + const { isHashRequired, disableFormat, type, subType, isRaw, audienceId } = + connection.config.destination; + // Ref: https://www.notion.so/rudderstacks/VDM-V2-Final-Config-and-Record-EventPayload-8cc80f3d88ad46c7bc43df4b87a0bbff + const identifiers = message?.identifiers; + let userSchema; + if (identifiers) { + userSchema = Object.keys(identifiers); + } + const events = groupedRecordInputs.map((record) => ({ + ...record, + message: { + ...record.message, + fields: record.message.identifiers, + }, + })); + return preparePayload(events, { + audienceId, + userSchema, + isRaw, + type, + subType, + isHashRequired, + disableFormat, + }); +}; + +function processRecordInputs(groupedRecordInputs) { + const event = groupedRecordInputs[0]; + if (isEventSentByVDMV2Flow(event)) { + return processRecordInputsV2(groupedRecordInputs); + } + return processRecordInputsV1(groupedRecordInputs); +} + module.exports = { processRecordInputs, }; diff --git a/src/v0/destinations/fb_custom_audience/transform.js b/src/v0/destinations/fb_custom_audience/transform.js index c5c340c043..d7a7b3ef63 100644 --- a/src/v0/destinations/fb_custom_audience/transform.js +++ b/src/v0/destinations/fb_custom_audience/transform.js @@ -1,5 +1,4 @@ const lodash = require('lodash'); -const get = require('get-value'); const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib'); const { checkSubsetOfArray, @@ -7,19 +6,16 @@ const { returnArrayOfSubarrays, flattenMap, simpleProcessRouterDest, - getDestinationExternalIDInfoForRetl, } = require('../../util'); const { prepareDataField, - getSchemaForEventMappedToDest, batchingWithPayloadSize, generateAppSecretProof, responseBuilderSimple, getDataSource, } = require('./util'); -const { schemaFields, USER_ADD, USER_DELETE } = require('./config'); +const { schemaFields, USER_ADD, USER_DELETE, MAX_USER_COUNT } = require('./config'); -const { MappedToDestinationKey } = require('../../../constants'); const { processRecordInputs } = require('./recordTransform'); const logger = require('../../../logger'); @@ -71,14 +67,6 @@ const prepareResponse = ( ) => { const { accessToken, disableFormat, type, subType, isRaw, appSecret } = destination.Config; - const mappedToDestination = get(message, MappedToDestinationKey); - - // If mapped to destination, use the mapped fields instead of destination userschema - if (mappedToDestination) { - // eslint-disable-next-line no-param-reassign - userSchema = getSchemaForEventMappedToDest(message); - } - const prepareParams = {}; // creating the parameters field const paramsPayload = {}; @@ -158,31 +146,17 @@ const processEvent = (message, destination) => { const respList = []; let toSendEvents = []; let { userSchema } = destination.Config; - const { isHashRequired, audienceId, maxUserCount } = destination.Config; + const { isHashRequired, audienceId } = destination.Config; if (!message.type) { throw new InstrumentationError('Message Type is not present. Aborting message.'); } - const maxUserCountNumber = parseInt(maxUserCount, 10); - if (Number.isNaN(maxUserCountNumber)) { - throw new ConfigurationError('Batch size must be an Integer.'); - } if (message.type.toLowerCase() !== 'audiencelist') { throw new InstrumentationError(` ${message.type} call is not supported `); } - let operationAudienceId = audienceId; - const mappedToDestination = get(message, MappedToDestinationKey); - if (!operationAudienceId && mappedToDestination) { - const { objectType } = getDestinationExternalIDInfoForRetl(message, 'FB_CUSTOM_AUDIENCE'); - operationAudienceId = objectType; - } - if (!isDefinedAndNotNullAndNotEmpty(operationAudienceId)) { - throw new ConfigurationError('Audience ID is a mandatory field'); - } - // If mapped to destination, use the mapped fields instead of destination userschema - if (mappedToDestination) { - userSchema = getSchemaForEventMappedToDest(message); + if (!isDefinedAndNotNullAndNotEmpty(audienceId)) { + throw new ConfigurationError('Audience ID is a mandatory field'); } // When one single schema field is added in the webapp, it does not appear to be an array @@ -198,7 +172,7 @@ const processEvent = (message, destination) => { // when "remove" is present in the payload if (isDefinedAndNotNullAndNotEmpty(listData[USER_DELETE])) { - const audienceChunksArray = returnArrayOfSubarrays(listData[USER_DELETE], maxUserCountNumber); + const audienceChunksArray = returnArrayOfSubarrays(listData[USER_DELETE], MAX_USER_COUNT); toSendEvents = prepareToSendEvents( message, destination, @@ -211,7 +185,7 @@ const processEvent = (message, destination) => { // When "add" is present in the payload if (isDefinedAndNotNullAndNotEmpty(listData[USER_ADD])) { - const audienceChunksArray = returnArrayOfSubarrays(listData[USER_ADD], maxUserCountNumber); + const audienceChunksArray = returnArrayOfSubarrays(listData[USER_ADD], MAX_USER_COUNT); toSendEvents.push( ...prepareToSendEvents( message, @@ -225,7 +199,7 @@ const processEvent = (message, destination) => { } toSendEvents.forEach((sendEvent) => { - respList.push(responseBuilderSimple(sendEvent, operationAudienceId)); + respList.push(responseBuilderSimple(sendEvent, audienceId)); }); // When userListAdd or userListDelete is absent or both passed as empty arrays if (respList.length === 0) { @@ -252,7 +226,7 @@ const processRouterDest = async (inputs, reqMetadata) => { } if (groupedInputs.record) { - transformedRecordEvent = await processRecordInputs(groupedInputs.record, reqMetadata); + transformedRecordEvent = processRecordInputs(groupedInputs.record); } if (groupedInputs.audiencelist) { diff --git a/src/v0/destinations/fb_custom_audience/util.js b/src/v0/destinations/fb_custom_audience/util.js index 401b601869..8ba1f68c93 100644 --- a/src/v0/destinations/fb_custom_audience/util.js +++ b/src/v0/destinations/fb_custom_audience/util.js @@ -1,7 +1,6 @@ const lodash = require('lodash'); const sha256 = require('sha256'); const crypto = require('crypto'); -const get = require('get-value'); const jsonSize = require('json-size'); const { InstrumentationError, ConfigurationError } = require('@rudderstack/integrations-lib'); const { TransformationError } = require('@rudderstack/integrations-lib'); @@ -14,7 +13,7 @@ const { const stats = require('../../../util/stats'); const { isDefinedAndNotNull } = require('../../util'); -const { maxPayloadSize } = require('./config'); +const config = require('./config'); /** * Example payload ={ @@ -35,9 +34,9 @@ const { maxPayloadSize } = require('./config'); } */ const batchingWithPayloadSize = (payload) => { const payloadSize = jsonSize(payload); - if (payloadSize > maxPayloadSize) { + if (payloadSize > config.maxPayloadSize) { const revisedPayloadArray = []; - const noOfBatches = Math.ceil(payloadSize / maxPayloadSize); + const noOfBatches = Math.ceil(payloadSize / config.maxPayloadSize); const revisedRecordsPerPayload = Math.floor(payload.data.length / noOfBatches); const revisedDataArray = lodash.chunk(payload.data, revisedRecordsPerPayload); revisedDataArray.forEach((data) => { @@ -49,7 +48,7 @@ const batchingWithPayloadSize = (payload) => { }; const getSchemaForEventMappedToDest = (message) => { - const mappedSchema = get(message, 'context.destinationFields'); + const mappedSchema = message?.context?.destinationFields; if (!mappedSchema) { throw new InstrumentationError( 'context.destinationFields is required property for events mapped to destination ', diff --git a/src/v0/util/constant.js b/src/v0/util/constant.js index 9996f1ea7c..8f5d6c97a1 100644 --- a/src/v0/util/constant.js +++ b/src/v0/util/constant.js @@ -13,6 +13,8 @@ const JSON_MIME_TYPE = 'application/json'; const FEATURE_FILTER_CODE = 'filter-code'; const FEATURE_GZIP_SUPPORT = 'gzip-support'; +const VDM_V2_SCHEMA_VERSION = '1.1'; + const HTTP_STATUS_CODES = { // 1xx Informational CONTINUE: 100, @@ -91,4 +93,5 @@ module.exports = { USER_LEAD_CACHE_TTL, FEATURE_FILTER_CODE, FEATURE_GZIP_SUPPORT, + VDM_V2_SCHEMA_VERSION, }; diff --git a/src/v0/util/index.js b/src/v0/util/index.js index 6eb6312589..ca81262f88 100644 --- a/src/v0/util/index.js +++ b/src/v0/util/index.js @@ -30,7 +30,7 @@ const logger = require('../../logger'); const stats = require('../../util/stats'); const { DestCanonicalNames, DestHandlerMap } = require('../../constants/destinationCanonicalNames'); const { client: errNotificationClient } = require('../../util/errorNotifier'); -const { HTTP_STATUS_CODES } = require('./constant'); +const { HTTP_STATUS_CODES, VDM_V2_SCHEMA_VERSION } = require('./constant'); const { REFRESH_TOKEN, AUTH_STATUS_INACTIVE, @@ -2322,6 +2322,10 @@ const getRelativePathFromURL = (inputUrl) => { return inputUrl; }; +const isEventSentByVDMV1Flow = (event) => event?.message?.context?.mappedToDestination; + +const isEventSentByVDMV2Flow = (event) => + event?.connection?.config?.destination?.schemaVersion === VDM_V2_SCHEMA_VERSION; // ======================================================================== // EXPORTS // ======================================================================== @@ -2390,6 +2394,8 @@ module.exports = { isDefinedAndNotNull, isDefinedAndNotNullAndNotEmpty, isEmpty, + isEventSentByVDMV1Flow, + isEventSentByVDMV2Flow, isNotEmpty, isNull, isEmptyObject, diff --git a/test/integrations/component.test.ts b/test/integrations/component.test.ts index e7645db64d..daed7c9e1f 100644 --- a/test/integrations/component.test.ts +++ b/test/integrations/component.test.ts @@ -228,7 +228,7 @@ describe.each(allTestDataFilePaths)('%s Tests', (testDataPath) => { }); } describe(`${testData[0].name} ${testData[0].module}`, () => { - test.each(testData)('$feature -> $description', async (tcData) => { + test.each(testData)('$feature -> $description (index: $#)', async (tcData) => { tcData?.mockFns?.(mockAdapter); switch (tcData.module) { diff --git a/test/integrations/destinations/fb_custom_audience/mocks.ts b/test/integrations/destinations/fb_custom_audience/mocks.ts new file mode 100644 index 0000000000..6dd61a0e1b --- /dev/null +++ b/test/integrations/destinations/fb_custom_audience/mocks.ts @@ -0,0 +1,4 @@ +export const mockFns = (_) => { + // @ts-ignore + jest.useFakeTimers().setSystemTime(new Date('2023-10-15')); +}; diff --git a/test/integrations/destinations/fb_custom_audience/processor/data.ts b/test/integrations/destinations/fb_custom_audience/processor/data.ts index 75fa321aca..44d4ecaa71 100644 --- a/test/integrations/destinations/fb_custom_audience/processor/data.ts +++ b/test/integrations/destinations/fb_custom_audience/processor/data.ts @@ -1,9 +1,6 @@ -import { getEndPoint } from '../../../../../src/v0/destinations/fb_custom_audience/config'; - -export const mockFns = (_) => { - // @ts-ignore - jest.useFakeTimers().setSystemTime(new Date('2023-10-15')); -}; +import config from '../../../../../src/v0/destinations/fb_custom_audience/config'; +import { mockFns } from '../mocks'; +const getEndPoint = config.getEndPoint; export const data = [ { @@ -84,7 +81,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -197,7 +193,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -231,119 +226,6 @@ export const data = [ }, }, }, - { - name: 'fb_custom_audience', - description: 'Non-Numerical Batch Size Event', - feature: 'processor', - module: 'destination', - version: 'v0', - input: { - request: { - body: [ - { - message: { - userId: 'user 1', - anonymousId: 'anon-id-new', - type: 'audiencelist', - event: 'event1', - properties: { - listData: { - add: [ - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'f', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - ], - remove: [ - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'f', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - ], - }, - }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - destination: { - Config: { - accessToken: 'ABC', - userSchema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - isHashRequired: false, - disableFormat: false, - audienceId: 'aud1', - isRaw: true, - type: 'UNKNOWN', - subType: 'ANYTHING', - maxUserCount: 'abc50', - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - libraries: [], - request: { - query: {}, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - error: 'Batch size must be an Integer.', - statTags: { - destType: 'FB_CUSTOM_AUDIENCE', - errorCategory: 'dataValidation', - errorType: 'configuration', - feature: 'processor', - implementation: 'native', - module: 'destination', - }, - statusCode: 400, - }, - ], - }, - }, - }, { name: 'fb_custom_audience', description: 'Audience ID Empty Event', @@ -423,7 +305,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -536,7 +417,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -747,7 +627,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -946,7 +825,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -1107,7 +985,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -1341,7 +1218,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -1575,7 +1451,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -1786,7 +1661,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -1983,7 +1857,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -2125,7 +1998,6 @@ export const data = [ isRaw: true, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -2254,7 +2126,6 @@ export const data = [ isRaw: false, type: 'UNKNOWN', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -2401,52003 +2272,84 @@ export const data = [ ST: '123abc ', COUNTRY: 'IN', }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - { - EMAIL: 'shrouti@abc.com', - DOBM: '2', - DOBD: '13', - DOBY: '2013', - PHONE: '@09432457768', - GEN: 'female', - FI: 'Ms.', - MADID: 'ABC', - ZIP: 'ZIP ', - ST: '123abc ', - COUNTRY: 'IN', - }, - ], - }, - }, - context: { - ip: '14.5.67.21', - library: { - name: 'http', - }, - }, - timestamp: '2020-02-02T00:23:09.544Z', - }, - destination: { - Config: { - accessToken: 'ABC', - userSchema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - isHashRequired: false, - disableFormat: true, - audienceId: 'aud1', - isRaw: true, - type: 'NA', - subType: 'ANYTHING', - maxUserCount: '1000', - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - }, - libraries: [], - request: { - query: {}, - }, - }, - ], - }, - }, - output: { - response: { - status: 200, - body: [ - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: getEndPoint('aud1'), - headers: {}, - params: { - access_token: 'ABC', - payload: { - is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, - schema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - data: [ - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - ], - }, - }, - userId: '', - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, - files: {}, - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: getEndPoint('aud1'), - headers: {}, - params: { - access_token: 'ABC', - payload: { - is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, - schema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - data: [ - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - ], - }, - }, - userId: '', - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, - files: {}, - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: getEndPoint('aud1'), - headers: {}, - params: { - access_token: 'ABC', - payload: { - is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, - schema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - data: [ - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - ], - }, - }, - userId: '', - body: { - JSON: {}, - XML: {}, - JSON_ARRAY: {}, - FORM: {}, - }, - files: {}, - }, - statusCode: 200, - }, - { - output: { - version: '1', - type: 'REST', - method: 'POST', - endpoint: getEndPoint('aud1'), - headers: {}, - params: { - access_token: 'ABC', - payload: { - is_raw: true, - data_source: { - sub_type: 'ANYTHING', - }, - schema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - data: [ - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], - [ - 'shrouti@abc.com', - '2', - '13', - '2013', - '@09432457768', - 'female', - 'Ms.', - 'ABC', - 'ZIP ', - '123abc ', - 'IN', - ], + ], + }, + }, + context: { + ip: '14.5.67.21', + library: { + name: 'http', + }, + }, + timestamp: '2020-02-02T00:23:09.544Z', + }, + destination: { + Config: { + accessToken: 'ABC', + userSchema: [ + 'EMAIL', + 'DOBM', + 'DOBD', + 'DOBY', + 'PHONE', + 'GEN', + 'FI', + 'MADID', + 'ZIP', + 'ST', + 'COUNTRY', + ], + isHashRequired: false, + disableFormat: true, + audienceId: 'aud1', + isRaw: true, + type: 'NA', + subType: 'ANYTHING', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + }, + libraries: [], + request: { + query: {}, + }, + }, + ], + }, + }, + output: { + response: { + status: 200, + body: [ + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', + headers: {}, + params: { + access_token: 'ABC', + payload: { + is_raw: true, + data_source: { + sub_type: 'ANYTHING', + }, + schema: [ + 'EMAIL', + 'DOBM', + 'DOBD', + 'DOBY', + 'PHONE', + 'GEN', + 'FI', + 'MADID', + 'ZIP', + 'ST', + 'COUNTRY', + ], + data: [ [ 'shrouti@abc.com', '2', @@ -54424,6 +2376,48 @@ export const data = [ '123abc ', 'IN', ], + ], + }, + }, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + userId: '', + }, + statusCode: 200, + }, + { + output: { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://graph.facebook.com/v20.0/aud1/users', + headers: {}, + params: { + access_token: 'ABC', + payload: { + is_raw: true, + data_source: { + sub_type: 'ANYTHING', + }, + schema: [ + 'EMAIL', + 'DOBM', + 'DOBD', + 'DOBY', + 'PHONE', + 'GEN', + 'FI', + 'MADID', + 'ZIP', + 'ST', + 'COUNTRY', + ], + data: [ [ 'shrouti@abc.com', '2', @@ -54453,20 +2447,24 @@ export const data = [ ], }, }, - userId: '', body: { JSON: {}, - XML: {}, JSON_ARRAY: {}, + XML: {}, FORM: {}, }, files: {}, + userId: '', }, statusCode: 200, }, ], }, }, + mockFns: () => { + jest.useFakeTimers().setSystemTime(new Date('2023-10-15')); + jest.replaceProperty(config, 'maxPayloadSize', 400 as typeof config.maxPayloadSize); + }, }, { name: 'fb_custom_audience', @@ -54534,7 +2532,6 @@ export const data = [ isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -54613,4 +2610,4 @@ export const data = [ }, }, }, -].map((d) => ({ ...d, mockFns })); +].map((d) => ({ ...d, ...{ mockFns: d.mockFns || mockFns } })); diff --git a/test/integrations/destinations/fb_custom_audience/router/audienceList.ts b/test/integrations/destinations/fb_custom_audience/router/audienceList.ts deleted file mode 100644 index c386fbf782..0000000000 --- a/test/integrations/destinations/fb_custom_audience/router/audienceList.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { Destination, RouterTransformationRequest } from '../../../../../src/types'; -import { generateMetadata } from '../../../testUtils'; - -const destination: Destination = { - Config: { - accessToken: 'ABC', - disableFormat: false, - isHashRequired: true, - isRaw: false, - maxUserCount: '50', - oneTrustCookieCategories: [], - skipVerify: false, - subType: 'NA', - type: 'NA', - userSchema: ['EMAIL'], - }, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - Name: 'FB_CUSTOM_AUDIENCE', - Enabled: true, - WorkspaceID: '1TSN08muJTZwH8iCDmnnRt1pmLd', - DestinationDefinition: { - ID: '1aIXqM806xAVm92nx07YwKbRrO9', - Name: 'FB_CUSTOM_AUDIENCE', - DisplayName: 'FB_CUSTOM_AUDIENCE', - Config: {}, - }, - Transformations: [], - IsConnectionEnabled: true, - IsProcessorEnabled: true, -}; - -export const rETLAudienceRouterRequest: RouterTransformationRequest = { - input: [ - { - message: { - sentAt: '2023-03-30 06:42:55.991938402 +0000 UTC', - userId: '2MUWghI7u85n91dd1qzGyswpZan-2MUWqbQqvctyfMGqU9QCNadpKNy', - channel: 'sources', - messageId: '4d906837-031d-4d34-b97a-62fdf51b4d3a', - event: 'Add_Audience', - context: { - destinationFields: 'EMAIL, FN', - externalId: [{ type: 'FB_CUSTOM_AUDIENCE-23848494844100489', identifierType: 'EMAIL' }], - mappedToDestination: 'true', - sources: { - job_run_id: 'cgiiurt8um7k7n5dq480', - task_run_id: 'cgiiurt8um7k7n5dq48g', - job_id: '2MUWghI7u85n91dd1qzGyswpZan', - version: '895/merge', - }, - }, - recordId: '725ad989-6750-4839-b46b-0ddb3b8e5aa2/1/10', - rudderId: '85c49666-c628-4835-937b-8f1d9ee7a724', - properties: { - listData: { - add: [ - { EMAIL: 'dede@gmail.com', FN: 'vishwa' }, - { EMAIL: 'fchsjjn@gmail.com', FN: 'hskks' }, - { EMAIL: 'fghjnbjk@gmail.com', FN: 'ghfry' }, - { EMAIL: 'gvhjkk@gmail.com', FN: 'hbcwqe' }, - { EMAIL: 'qsdwert@egf.com', FN: 'dsfds' }, - { EMAIL: 'ascscxsaca@com', FN: 'scadscdvcda' }, - { EMAIL: 'abc@gmail.com', FN: 'subscribed' }, - { EMAIL: 'ddwnkl@gmail.com', FN: 'subscribed' }, - { EMAIL: 'subscribed@eewrfrd.com', FN: 'pending' }, - { EMAIL: 'acsdvdf@ddfvf.com', FN: 'pending' }, - ], - }, - }, - type: 'audienceList', - anonymousId: '63228b51-394e-4ca2-97a0-427f6187480b', - }, - destination: destination, - metadata: generateMetadata(3), - }, - { - message: { - sentAt: '2023-03-30 06:42:55.991938402 +0000 UTC', - userId: '2MUWghI7u85n91dd1qzGyswpZan-2MUWqbQqvctyfMGqU9QCNadpKNy', - channel: 'sources', - messageId: '4d906837-031d-4d34-b97a-62fdf51b4d3a', - event: 'Add_Audience', - context: { - externalId: [{ type: 'FB_CUSTOM_AUDIENCE-23848494844100489', identifierType: 'EMAIL' }], - mappedToDestination: 'true', - sources: { - job_run_id: 'cgiiurt8um7k7n5dq480', - task_run_id: 'cgiiurt8um7k7n5dq48g', - job_id: '2MUWghI7u85n91dd1qzGyswpZan', - version: '895/merge', - }, - }, - recordId: '725ad989-6750-4839-b46b-0ddb3b8e5aa2/1/10', - rudderId: '85c49666-c628-4835-937b-8f1d9ee7a724', - properties: { - listData: { - add: [ - { EMAIL: 'dede@gmail.com', FN: 'vishwa' }, - { EMAIL: 'fchsjjn@gmail.com', FN: 'hskks' }, - { EMAIL: 'fghjnbjk@gmail.com', FN: 'ghfry' }, - { EMAIL: 'gvhjkk@gmail.com', FN: 'hbcwqe' }, - { EMAIL: 'qsdwert@egf.com', FN: 'dsfds' }, - { EMAIL: 'ascscxsaca@com', FN: 'scadscdvcda' }, - { EMAIL: 'abc@gmail.com', FN: 'subscribed' }, - { EMAIL: 'ddwnkl@gmail.com', FN: 'subscribed' }, - { EMAIL: 'subscribed@eewrfrd.com', FN: 'pending' }, - { EMAIL: 'acsdvdf@ddfvf.com', FN: 'pending' }, - ], - }, - }, - type: 'audienceList', - anonymousId: '63228b51-394e-4ca2-97a0-427f6187480b', - }, - destination: destination, - metadata: generateMetadata(4), - }, - ], - destType: 'fb_custom_audience', -}; - -module.exports = { - rETLAudienceRouterRequest, -}; diff --git a/test/integrations/destinations/fb_custom_audience/router/batchingRecord.ts b/test/integrations/destinations/fb_custom_audience/router/batchingRecord.ts deleted file mode 100644 index 0ceff5260e..0000000000 --- a/test/integrations/destinations/fb_custom_audience/router/batchingRecord.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { Destination, RouterTransformationRequest } from '../../../../../src/types'; -import { generateMetadata } from '../../../testUtils'; - -const destination: Destination = { - Config: { - accessToken: 'ABC', - disableFormat: false, - isHashRequired: true, - isRaw: false, - maxUserCount: '2', - oneTrustCookieCategories: [], - skipVerify: false, - subType: 'NA', - type: 'NA', - userSchema: ['EMAIL'], - }, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - Name: 'FB_CUSTOM_AUDIENCE', - Enabled: true, - WorkspaceID: '1TSN08muJTZwH8iCDmnnRt1pmLd', - DestinationDefinition: { - ID: '1aIXqM806xAVm92nx07YwKbRrO9', - Name: 'FB_CUSTOM_AUDIENCE', - DisplayName: 'FB_CUSTOM_AUDIENCE', - Config: {}, - }, - Transformations: [], - IsConnectionEnabled: true, - IsProcessorEnabled: true, -}; - -export const rETLBatchingRouterRequest: RouterTransformationRequest = { - input: [ - { - destination: destination, - message: { - action: 'insert', - context: { - destinationFields: 'EMAIL, FI', - externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-23848494844100489', - identifierType: 'EMAIL', - }, - ], - mappedToDestination: 'true', - sources: { - job_run_id: 'cgiiurt8um7k7n5dq480', - task_run_id: 'cgiiurt8um7k7n5dq48g', - job_id: '2MUWghI7u85n91dd1qzGyswpZan', - version: '895/merge', - }, - }, - recordId: '2', - rudderId: '2', - fields: { - EMAIL: 'subscribed@eewrfrd.com', - FI: 'ghui', - }, - type: 'record', - }, - metadata: generateMetadata(1), - }, - { - destination: destination, - message: { - action: 'insert', - context: { - destinationFields: 'EMAIL, FI', - externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-23848494844100489', - identifierType: 'EMAIL', - }, - ], - mappedToDestination: 'true', - sources: { - job_run_id: 'cgiiurt8um7k7n5dq480', - task_run_id: 'cgiiurt8um7k7n5dq48g', - job_id: '2MUWghI7u85n91dd1qzGyswpZan', - version: '895/merge', - }, - }, - recordId: '2', - rudderId: '2', - fields: { - EMAIL: 'subscribed@eewrfrd.com', - FI: 'ghui', - }, - type: 'record', - }, - metadata: generateMetadata(2), - }, - { - destination: destination, - message: { - action: 'insert', - context: { - destinationFields: 'EMAIL, FI', - externalId: [ - { - type: 'FB_CUSTOM_AUDIENCE-23848494844100489', - identifierType: 'EMAIL', - }, - ], - mappedToDestination: 'true', - sources: { - job_run_id: 'cgiiurt8um7k7n5dq480', - task_run_id: 'cgiiurt8um7k7n5dq48g', - job_id: '2MUWghI7u85n91dd1qzGyswpZan', - version: '895/merge', - }, - }, - recordId: '2', - rudderId: '2', - fields: { - EMAIL: 'subscribed@eewrfrd.com', - FI: 'ghui', - }, - type: 'record', - }, - metadata: generateMetadata(3), - }, - ], - destType: 'fb_custom_audience', -}; - -module.exports = { - rETLBatchingRouterRequest, -}; diff --git a/test/integrations/destinations/fb_custom_audience/router/data.ts b/test/integrations/destinations/fb_custom_audience/router/data.ts index ab9bfee973..cfc24968a8 100644 --- a/test/integrations/destinations/fb_custom_audience/router/data.ts +++ b/test/integrations/destinations/fb_custom_audience/router/data.ts @@ -1,12 +1,20 @@ -import { eventStreamRouterRequest } from './eventStream'; -import { rETLAudienceRouterRequest } from './audienceList'; -import { rETLBatchingRouterRequest } from './batchingRecord'; -import { rETLRecordRouterRequest } from './record'; +import { + eventStreamAudienceListRouterRequest, + eventStreamRecordV1RouterRequest, + esDestinationAudience, + esDestinationRecord, +} from './eventStream'; +import { + rETLRecordV1RouterRequest, + rETLRecordV2RouterRequest, + rETLRecordV2RouterInvalidRequest, +} from './rETL'; +import { mockFns } from '../mocks'; export const data = [ { name: 'fb_custom_audience', - description: 'eventStream tests', + description: 'eventStream using audienceList tests', scenario: 'business', successCriteria: 'event stream events should be batched correctly', feature: 'router', @@ -14,7 +22,7 @@ export const data = [ version: 'v0', input: { request: { - body: eventStreamRouterRequest, + body: eventStreamAudienceListRouterRequest, }, }, output: { @@ -143,43 +151,7 @@ export const data = [ ], batched: false, statusCode: 200, - destination: { - Config: { - accessToken: 'ABC', - userSchema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - isHashRequired: false, - disableFormat: false, - audienceId: 'aud1', - isRaw: true, - type: 'NA', - subType: 'ANYTHING', - maxUserCount: '50', - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - ID: '123', - Name: 'fb_custom_audience', - DestinationDefinition: { - ID: '123', - Name: 'fb_custom_audience', - DisplayName: 'fb_custom_audience', - Config: {}, - }, - WorkspaceID: '123', - }, + destination: esDestinationAudience, }, { batchedRequest: [ @@ -302,43 +274,7 @@ export const data = [ ], batched: false, statusCode: 200, - destination: { - Config: { - accessToken: 'ABC', - userSchema: [ - 'EMAIL', - 'DOBM', - 'DOBD', - 'DOBY', - 'PHONE', - 'GEN', - 'FI', - 'MADID', - 'ZIP', - 'ST', - 'COUNTRY', - ], - isHashRequired: false, - disableFormat: false, - audienceId: 'aud1', - isRaw: true, - type: 'NA', - subType: 'ANYTHING', - maxUserCount: '50', - }, - Enabled: true, - Transformations: [], - IsProcessorEnabled: true, - ID: '123', - Name: 'fb_custom_audience', - DestinationDefinition: { - ID: '123', - Name: 'fb_custom_audience', - DisplayName: 'fb_custom_audience', - Config: {}, - }, - WorkspaceID: '123', - }, + destination: esDestinationAudience, }, ], }, @@ -347,15 +283,15 @@ export const data = [ }, { name: 'fb_custom_audience', - description: 'rETL tests', + description: 'event stream record V1 tests', scenario: 'business', - successCriteria: 'it should transform audience event correctly', + successCriteria: 'all record events should be transformed correctly based on their operation', feature: 'router', module: 'destination', version: 'v0', input: { request: { - body: rETLAudienceRouterRequest, + body: eventStreamRecordV1RouterRequest, }, }, output: { @@ -368,53 +304,135 @@ export const data = [ { version: '1', type: 'REST', - method: 'POST', + method: 'DELETE', endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', headers: {}, params: { access_token: 'ABC', payload: { - schema: ['EMAIL', 'FN'], + schema: ['EMAIL', 'FI'], data: [ [ - '7625cab24612c37df6d2f724721bb38a25095d0295e29b807238ee188b8aca43', - 'e328a0d90d4b5132b2655cf7079b160040d2c1a83d70d4cad9cf1f69310635b3', - ], - [ - 'b2b4abadd72190af54305c0d3abf1977fec4935016bb13ff28040d5712318dfd', - 'f8147eb72c9bb356c362fdb0796b54971ebc983cb60b3cc3ff29582ce2052bad', - ], - [ - 'c4b007d1c3c9a5d31bd4082237a913e8e0db1767225c2a5ef33be2716df005fa', - 'd8bb13b95eaed7f9b6a8af276aa6122e8015e0c466c1a84e49ff7c69ad6ac911', - ], - [ - '94639be1bd9f17c05820164e9d71ef78558f117a9e8bfab43cf8015e08aa0b27', - 'b1661f97721dede0f876dcbf603289ee339f641b9c310deba53c76940f472698', - ], - [ - '39b456cfb4bb07f9e6bb18698aa173171ca49c731fccc4790e9ecea808d24ae6', - '6c882abd6d0aff713cdd6a4a31ee28c9140612fb2627a611f6f9f539bac44f81', + 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], [ - '769f73387add781a481ca08300008a08fb2f1816aaed196137efc2e05976d711', - '2222cb73346f7a01a1d4d3db28b58fd41045782bb66152b92aade379192544c5', + 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], + ], + }, + }, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 1, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 2, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + ], + batched: true, + statusCode: 200, + destination: esDestinationRecord, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', + headers: {}, + params: { + access_token: 'ABC', + payload: { + schema: ['EMAIL', 'FI'], + data: [ [ - '48ddb93f0b30c475423fe177832912c5bcdce3cc72872f8051627967ef278e08', - 'abc12f8d666517c35280bf220f5390b1f0ef4bdbbc794ac59c95bba0381bf91b', + 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], + ], + }, + }, + body: { + JSON: {}, + JSON_ARRAY: {}, + XML: {}, + FORM: {}, + }, + files: {}, + }, + ], + metadata: [ + { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 3, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', + }, + ], + batched: true, + statusCode: 200, + destination: esDestinationRecord, + }, + { + batchedRequest: [ + { + version: '1', + type: 'REST', + method: 'POST', + endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', + headers: {}, + params: { + access_token: 'ABC', + payload: { + schema: ['EMAIL', 'FI'], + data: [ [ - 'da2d431121cd10578fd81f8f80344b06db59ea2d05a7b5d27536c8789ddae8f0', - 'abc12f8d666517c35280bf220f5390b1f0ef4bdbbc794ac59c95bba0381bf91b', + 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], [ 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', - '62a2fed3d6e08c44835fce71f02210b1ddabfb066e39edf1e6c261988f824dd3', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], [ - '0c1d1b0ba547a742013366d6fbc8f71dd77f566d94e41ed9f828a74b96928161', - '62a2fed3d6e08c44835fce71f02210b1ddabfb066e39edf1e6c261988f824dd3', + 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', + '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], ], }, @@ -433,7 +451,7 @@ export const data = [ attemptNum: 1, destinationId: 'default-destinationId', dontBatch: false, - jobId: 3, + jobId: 4, secret: { accessToken: 'default-accessToken', }, @@ -441,36 +459,34 @@ export const data = [ userId: 'default-userId', workspaceId: 'default-workspaceId', }, - ], - batched: false, - statusCode: 200, - destination: { - Config: { - accessToken: 'ABC', - disableFormat: false, - isHashRequired: true, - isRaw: false, - maxUserCount: '50', - oneTrustCookieCategories: [], - skipVerify: false, - subType: 'NA', - type: 'NA', - userSchema: ['EMAIL'], + { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 5, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', }, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - Name: 'FB_CUSTOM_AUDIENCE', - Enabled: true, - WorkspaceID: '1TSN08muJTZwH8iCDmnnRt1pmLd', - DestinationDefinition: { - ID: '1aIXqM806xAVm92nx07YwKbRrO9', - Name: 'FB_CUSTOM_AUDIENCE', - DisplayName: 'FB_CUSTOM_AUDIENCE', - Config: {}, + { + attemptNum: 1, + destinationId: 'default-destinationId', + dontBatch: false, + jobId: 6, + secret: { + accessToken: 'default-accessToken', + }, + sourceId: 'default-sourceId', + userId: 'default-userId', + workspaceId: 'default-workspaceId', }, - Transformations: [], - IsConnectionEnabled: true, - IsProcessorEnabled: true, - }, + ], + batched: true, + statusCode: 200, + destination: esDestinationRecord, }, { metadata: [ @@ -478,7 +494,7 @@ export const data = [ attemptNum: 1, destinationId: 'default-destinationId', dontBatch: false, - jobId: 4, + jobId: 7, secret: { accessToken: 'default-accessToken', }, @@ -489,44 +505,16 @@ export const data = [ ], batched: false, statusCode: 400, - error: - 'context.destinationFields is required property for events mapped to destination ', + error: 'Invalid action type in record event', statTags: { errorCategory: 'dataValidation', + destinationId: 'default-destinationId', errorType: 'instrumentation', destType: 'FB_CUSTOM_AUDIENCE', - destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', module: 'destination', implementation: 'native', feature: 'router', - workspaceId: 'default-workspaceId', - }, - destination: { - Config: { - accessToken: 'ABC', - disableFormat: false, - isHashRequired: true, - isRaw: false, - maxUserCount: '50', - oneTrustCookieCategories: [], - skipVerify: false, - subType: 'NA', - type: 'NA', - userSchema: ['EMAIL'], - }, - ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', - Name: 'FB_CUSTOM_AUDIENCE', - Enabled: true, - WorkspaceID: '1TSN08muJTZwH8iCDmnnRt1pmLd', - DestinationDefinition: { - ID: '1aIXqM806xAVm92nx07YwKbRrO9', - Name: 'FB_CUSTOM_AUDIENCE', - DisplayName: 'FB_CUSTOM_AUDIENCE', - Config: {}, - }, - Transformations: [], - IsConnectionEnabled: true, - IsProcessorEnabled: true, }, }, ], @@ -536,7 +524,7 @@ export const data = [ }, { name: 'fb_custom_audience', - description: 'rETL record tests', + description: 'rETL record V1 tests', scenario: 'business', successCriteria: 'all record events should be transformed correctly based on their operation', feature: 'router', @@ -544,7 +532,7 @@ export const data = [ version: 'v0', input: { request: { - body: rETLRecordRouterRequest, + body: rETLRecordV1RouterRequest, }, }, output: { @@ -562,6 +550,9 @@ export const data = [ headers: {}, params: { access_token: 'ABC', + appsecret_proof: + 'd103874f3b5f01f57c4f84edfb96ac94055da8f83c2b45e6f26dafca9188ff4d', + appsecret_time: 1697328000, payload: { schema: ['EMAIL', 'FI'], data: [ @@ -616,10 +607,10 @@ export const data = [ destination: { Config: { accessToken: 'ABC', + appSecret: 'dummySecret', disableFormat: false, isHashRequired: true, isRaw: false, - maxUserCount: '3', oneTrustCookieCategories: [], skipVerify: false, subType: 'NA', @@ -651,6 +642,9 @@ export const data = [ headers: {}, params: { access_token: 'ABC', + appsecret_proof: + 'd103874f3b5f01f57c4f84edfb96ac94055da8f83c2b45e6f26dafca9188ff4d', + appsecret_time: 1697328000, payload: { schema: ['EMAIL', 'FI'], data: [ @@ -689,10 +683,10 @@ export const data = [ destination: { Config: { accessToken: 'ABC', + appSecret: 'dummySecret', disableFormat: false, isHashRequired: true, isRaw: false, - maxUserCount: '3', oneTrustCookieCategories: [], skipVerify: false, subType: 'NA', @@ -724,6 +718,9 @@ export const data = [ headers: {}, params: { access_token: 'ABC', + appsecret_proof: + 'd103874f3b5f01f57c4f84edfb96ac94055da8f83c2b45e6f26dafca9188ff4d', + appsecret_time: 1697328000, payload: { schema: ['EMAIL', 'FI'], data: [ @@ -794,10 +791,10 @@ export const data = [ destination: { Config: { accessToken: 'ABC', + appSecret: 'dummySecret', disableFormat: false, isHashRequired: true, isRaw: false, - maxUserCount: '3', oneTrustCookieCategories: [], skipVerify: false, subType: 'NA', @@ -855,15 +852,15 @@ export const data = [ }, { name: 'fb_custom_audience', - description: 'rETL record batching tests', + description: 'rETL record V2 tests', scenario: 'Framework', - successCriteria: 'All the record events should be batched', + successCriteria: 'all record events should be transformed correctly based on their operation', feature: 'router', module: 'destination', version: 'v0', input: { request: { - body: rETLBatchingRouterRequest, + body: rETLRecordV2RouterRequest, }, }, output: { @@ -892,28 +889,6 @@ export const data = [ 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', ], - ], - }, - }, - body: { - JSON: {}, - JSON_ARRAY: {}, - XML: {}, - FORM: {}, - }, - files: {}, - }, - { - version: '1', - type: 'REST', - method: 'POST', - endpoint: 'https://graph.facebook.com/v20.0/23848494844100489/users', - headers: {}, - params: { - access_token: 'ABC', - payload: { - schema: ['EMAIL', 'FI'], - data: [ [ 'b100c2ec0718fe6b4805b623aeec6710719d042ceea55f5c8135b010ec1c7b36', '1e14a2f476f7611a8b22bc85d14237fdc88aac828737e739416c32c5bce3bd16', @@ -976,12 +951,10 @@ export const data = [ disableFormat: false, isHashRequired: true, isRaw: false, - maxUserCount: '2', oneTrustCookieCategories: [], skipVerify: false, subType: 'NA', type: 'NA', - userSchema: ['EMAIL'], }, Name: 'FB_CUSTOM_AUDIENCE', Enabled: true, @@ -1003,4 +976,56 @@ export const data = [ }, }, }, -]; + { + name: 'fb_custom_audience', + description: 'rETL record V2 invalid connection tests', + scenario: 'Framework', + successCriteria: 'All the record V2 events should fail', + feature: 'router', + module: 'destination', + version: 'v0', + input: { + request: { + body: rETLRecordV2RouterInvalidRequest, + }, + }, + output: { + response: { + status: 200, + body: { + output: [ + { + metadata: [ + { + jobId: 1, + attemptNum: 1, + userId: 'default-userId', + sourceId: 'default-sourceId', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + secret: { + accessToken: 'default-accessToken', + }, + dontBatch: false, + }, + ], + batched: false, + statusCode: 400, + error: 'Audience ID is a mandatory field', + statTags: { + errorCategory: 'dataValidation', + errorType: 'configuration', + destType: 'FB_CUSTOM_AUDIENCE', + module: 'destination', + implementation: 'native', + feature: 'router', + destinationId: 'default-destinationId', + workspaceId: 'default-workspaceId', + }, + }, + ], + }, + }, + }, + }, +].map((d) => ({ ...d, mockFns })); diff --git a/test/integrations/destinations/fb_custom_audience/router/eventStream.ts b/test/integrations/destinations/fb_custom_audience/router/eventStream.ts index b4dcebf48b..97cd472931 100644 --- a/test/integrations/destinations/fb_custom_audience/router/eventStream.ts +++ b/test/integrations/destinations/fb_custom_audience/router/eventStream.ts @@ -1,7 +1,7 @@ import { Destination, RouterTransformationRequest } from '../../../../../src/types'; import { generateMetadata } from '../../../testUtils'; -const destination: Destination = { +export const esDestinationAudience: Destination = { Config: { accessToken: 'ABC', userSchema: [ @@ -23,7 +23,6 @@ const destination: Destination = { isRaw: true, type: 'NA', subType: 'ANYTHING', - maxUserCount: '50', }, Enabled: true, Transformations: [], @@ -39,7 +38,7 @@ const destination: Destination = { WorkspaceID: '123', }; -export const eventStreamRouterRequest: RouterTransformationRequest = { +export const eventStreamAudienceListRouterRequest: RouterTransformationRequest = { input: [ { message: { @@ -85,7 +84,7 @@ export const eventStreamRouterRequest: RouterTransformationRequest = { timestamp: '2020-02-02T00:23:09.544Z', }, metadata: generateMetadata(1), - destination: destination, + destination: esDestinationAudience, }, { message: { @@ -131,13 +130,137 @@ export const eventStreamRouterRequest: RouterTransformationRequest = { timestamp: '2020-02-02T00:23:09.544Z', }, metadata: generateMetadata(2), - destination: destination, + destination: esDestinationAudience, request: { query: {} }, }, ], destType: 'fb_custom_audience', }; -module.exports = { - eventStreamRouterRequest, +export const esDestinationRecord: Destination = { + Config: { + accessToken: 'ABC', + userSchema: ['EMAIL', 'FI'], + isHashRequired: true, + disableFormat: false, + audienceId: '23848494844100489', + isRaw: false, + type: 'NA', + subType: 'NA', + }, + Enabled: true, + Transformations: [], + IsProcessorEnabled: true, + ID: '123', + Name: 'fb_custom_audience', + DestinationDefinition: { + ID: '123', + Name: 'fb_custom_audience', + DisplayName: 'fb_custom_audience', + Config: {}, + }, + WorkspaceID: '123', +}; +export const eventStreamRecordV1RouterRequest: RouterTransformationRequest = { + input: [ + { + destination: esDestinationRecord, + message: { + action: 'insert', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(3), + }, + { + destination: esDestinationRecord, + message: { + action: 'update', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(4), + }, + { + destination: esDestinationRecord, + message: { + action: 'delete', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(1), + }, + { + destination: esDestinationRecord, + message: { + action: 'delete', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(2), + }, + { + destination: esDestinationRecord, + message: { + action: 'update', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(5), + }, + { + destination: esDestinationRecord, + message: { + action: 'update', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(6), + }, + { + destination: esDestinationRecord, + message: { + action: 'lol', + recordId: '2', + rudderId: '2', + fields: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(7), + }, + ], + destType: 'fb_custom_audience', }; diff --git a/test/integrations/destinations/fb_custom_audience/router/record.ts b/test/integrations/destinations/fb_custom_audience/router/rETL.ts similarity index 57% rename from test/integrations/destinations/fb_custom_audience/router/record.ts rename to test/integrations/destinations/fb_custom_audience/router/rETL.ts index 534c1c40c2..0ba7f8b531 100644 --- a/test/integrations/destinations/fb_custom_audience/router/record.ts +++ b/test/integrations/destinations/fb_custom_audience/router/rETL.ts @@ -1,13 +1,172 @@ -import { Destination, RouterTransformationRequest } from '../../../../../src/types'; +import { Connection, Destination, RouterTransformationRequest } from '../../../../../src/types'; +import { VDM_V2_SCHEMA_VERSION } from '../../../../../src/v0/util/constant'; import { generateMetadata } from '../../../testUtils'; -const destination: Destination = { +const destinationV2: Destination = { Config: { accessToken: 'ABC', disableFormat: false, isHashRequired: true, isRaw: false, - maxUserCount: '3', + oneTrustCookieCategories: [], + skipVerify: false, + subType: 'NA', + type: 'NA', + }, + ID: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + Name: 'FB_CUSTOM_AUDIENCE', + Enabled: true, + WorkspaceID: '1TSN08muJTZwH8iCDmnnRt1pmLd', + DestinationDefinition: { + ID: '1aIXqM806xAVm92nx07YwKbRrO9', + Name: 'FB_CUSTOM_AUDIENCE', + DisplayName: 'FB_CUSTOM_AUDIENCE', + Config: {}, + }, + Transformations: [], + IsConnectionEnabled: true, + IsProcessorEnabled: true, +}; + +const connection: Connection = { + sourceId: '2MUWghI7u85n91dd1qzGyswpZan', + destinationId: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + enabled: true, + config: { + destination: { + schemaVersion: VDM_V2_SCHEMA_VERSION, + disableFormat: false, + isHashRequired: true, + isRaw: false, + subType: 'NA', + type: 'NA', + audienceId: '23848494844100489', + }, + }, +}; + +const missingAudienceIDConnection: Connection = { + sourceId: '2MUWghI7u85n91dd1qzGyswpZan', + destinationId: '1mMy5cqbtfuaKZv1IhVQKnBdVwe', + enabled: true, + config: { + destination: { + schemaVersion: VDM_V2_SCHEMA_VERSION, + }, + }, +}; + +export const rETLRecordV2RouterRequest: RouterTransformationRequest = { + input: [ + { + destination: destinationV2, + connection: connection, + message: { + action: 'insert', + context: { + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + identifiers: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(1), + }, + { + destination: destinationV2, + connection: connection, + message: { + action: 'insert', + context: { + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + identifiers: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(2), + }, + { + destination: destinationV2, + connection: connection, + message: { + action: 'insert', + context: { + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + identifiers: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(3), + }, + ], + destType: 'fb_custom_audience', +}; + +export const rETLRecordV2RouterInvalidRequest: RouterTransformationRequest = { + input: [ + { + destination: destinationV2, + connection: missingAudienceIDConnection, + message: { + action: 'insert', + context: { + sources: { + job_run_id: 'cgiiurt8um7k7n5dq480', + task_run_id: 'cgiiurt8um7k7n5dq48g', + job_id: '2MUWghI7u85n91dd1qzGyswpZan', + version: '895/merge', + }, + }, + recordId: '2', + rudderId: '2', + identifiers: { + EMAIL: 'subscribed@eewrfrd.com', + FI: 'ghui', + }, + type: 'record', + }, + metadata: generateMetadata(1), + }, + ], + destType: 'fb_custom_audience', +}; + +export const destinationV1: Destination = { + Config: { + accessToken: 'ABC', + appSecret: 'dummySecret', + disableFormat: false, + isHashRequired: true, + isRaw: false, oneTrustCookieCategories: [], skipVerify: false, subType: 'NA', @@ -29,10 +188,10 @@ const destination: Destination = { IsProcessorEnabled: true, }; -export const rETLRecordRouterRequest: RouterTransformationRequest = { +export const rETLRecordV1RouterRequest: RouterTransformationRequest = { input: [ { - destination: destination, + destination: destinationV1, message: { action: 'insert', context: { @@ -62,7 +221,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(3), }, { - destination: destination, + destination: destinationV1, message: { action: 'update', context: { @@ -92,7 +251,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(4), }, { - destination: destination, + destination: destinationV1, message: { action: 'delete', context: { @@ -122,7 +281,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(1), }, { - destination: destination, + destination: destinationV1, message: { action: 'delete', context: { @@ -152,7 +311,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(2), }, { - destination: destination, + destination: destinationV1, message: { action: 'update', context: { @@ -182,7 +341,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(5), }, { - destination: destination, + destination: destinationV1, message: { action: 'update', context: { @@ -212,7 +371,7 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { metadata: generateMetadata(6), }, { - destination: destination, + destination: destinationV1, message: { action: 'lol', context: { @@ -244,7 +403,3 @@ export const rETLRecordRouterRequest: RouterTransformationRequest = { ], destType: 'fb_custom_audience', }; - -module.exports = { - rETLRecordRouterRequest, -}; diff --git a/test/integrations/testUtils.ts b/test/integrations/testUtils.ts index 7d1c2a4317..4eda20a901 100644 --- a/test/integrations/testUtils.ts +++ b/test/integrations/testUtils.ts @@ -33,7 +33,9 @@ export const getTestDataFilePaths = (dirPath: string, opts: OptionValues): strin ); } if (opts.feature) { - filteredTestFilePaths = testFilePaths.filter((testFile) => testFile.includes(opts.feature)); + filteredTestFilePaths = filteredTestFilePaths.filter((testFile) => + testFile.includes(opts.feature), + ); } return filteredTestFilePaths; };