diff --git a/audit-ci.jsonc b/audit-ci.jsonc index 6f5752d78..80f42e924 100644 --- a/audit-ci.jsonc +++ b/audit-ci.jsonc @@ -16,7 +16,6 @@ "GHSA-3cvr-822r-rqcc", "GHSA-8qr4-xgw6-wmr3", "GHSA-f772-66g8-q5h3", - "GHSA-cph5-m8f7-6c5x", "GHSA-cph5-m8f7-6c5x" ] } diff --git a/docs/design-bulk-transfers/outbound-sequence.md b/docs/design-bulk-transfers/outbound-sequence.md index 7b52c0116..f9da32977 100644 --- a/docs/design-bulk-transfers/outbound-sequence.md +++ b/docs/design-bulk-transfers/outbound-sequence.md @@ -32,17 +32,21 @@ sequenceDiagram loop Party Lookup per transfer - SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Read individual attributes, if the party info already exists then change the individual state to DISCOVERY_SUCCESS else publish the individual event and update the state to DISCOVERY_RECEIVED - SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Update the party request - SDKOutboundCommandEventHandler->>SDKFspiopApi: PartyInfoRequested (includes info for SDK for making a party call) - Note left of SDKFspiopApi: topic-sdk-outbound-domain-events - SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Set individual state: DISCOVERY_PROCESSING - SDKFspiopApi->>SDKFspiopApi: Process outbound Trace Headers - SDKFspiopApi->>MojaloopSwitch: GET /parties - MojaloopSwitch->>SDKFspiopApi: PUT /parties - SDKFspiopApi->>SDKFspiopApi: Process Inbound Trace Headers - SDKFspiopApi->>SDKOutboundDomainEventHandler: PartyInfoCallbackReceived - Note right of SDKOutboundDomainEventHandler: topic-sdk-outbound-domain-events + SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Update the global state to DISCOVERY_RECEIVED + alt party info already exists + SDKOutboundCommandEventHandler->>SDKOutboundDomainEventHandler: PartyInfoCallbackReceived + else party info doesn't exist + SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Update the party request + SDKOutboundCommandEventHandler->>SDKFspiopApi: PartyInfoRequested (includes info for SDK for making a party call) + Note left of SDKFspiopApi: topic-sdk-outbound-domain-events + SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Set individual state: DISCOVERY_PROCESSING + SDKFspiopApi->>SDKFspiopApi: Process outbound Trace Headers + SDKFspiopApi->>MojaloopSwitch: GET /parties + MojaloopSwitch->>SDKFspiopApi: PUT /parties + SDKFspiopApi->>SDKFspiopApi: Process Inbound Trace Headers + SDKFspiopApi->>SDKOutboundDomainEventHandler: PartyInfoCallbackReceived + Note right of SDKOutboundDomainEventHandler: topic-sdk-outbound-domain-events + end SDKOutboundDomainEventHandler->>SDKOutboundCommandEventHandler: ProcessPartyInfoCallback Note left of SDKOutboundCommandEventHandler: topic-sdk-outbound-command-events SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Update the individual state: DISCOVERY_SUCCESS / DISCOVERY_FAILED @@ -206,5 +210,4 @@ sequenceDiagram Note left of SDKOutboundCommandEventHandler: topic-sdk-outbound-command-events SDKOutboundCommandEventHandler->>SDKOutboundCommandEventHandler: Update global state "RESPONSE_SENT" SDKOutboundCommandEventHandler->>SDKOutboundDomainEventHandler: SDKOutboundBulkResponseSentProcessed - ``` diff --git a/modules/api-svc/package.json b/modules/api-svc/package.json index 327fec9bc..d9b7738df 100644 --- a/modules/api-svc/package.json +++ b/modules/api-svc/package.json @@ -59,8 +59,8 @@ "url": "git@github.com:mojaloop/sdk-scheme-adapter.git" }, "dependencies": { - "@koa/cors": "^3.4.2", - "@mojaloop/api-snippets": "16.0.3", + "@koa/cors": "^4.0.0", + "@mojaloop/api-snippets": "^16.0.4", "@mojaloop/central-services-error-handling": "^12.0.4", "@mojaloop/central-services-logger": "^11.0.1", "@mojaloop/central-services-metrics": "^12.0.5", @@ -69,11 +69,11 @@ "@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^", "@mojaloop/sdk-standard-components": "^17.1.1", "ajv": "8.11.0", - "axios": "^1.0.0", + "axios": "^1.1.2", "co-body": "^6.1.0", "dotenv": "^16.0.3", "env-var": "^7.3.0", - "express": "^4.18.1", + "express": "^4.18.2", "fast-json-patch": "^3.1.1", "javascript-state-machine": "^3.1.0", "js-yaml": "^4.1.0", @@ -93,18 +93,18 @@ }, "devDependencies": { "@babel/core": "^7.19.3", - "@babel/preset-env": "^7.19.3", + "@babel/preset-env": "^7.19.4", "@redocly/openapi-cli": "^1.0.0-beta.94", "@types/jest": "^29.1.2", "babel-jest": "^29.1.2", - "eslint": "^8.24.0", + "eslint": "^8.25.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "^27.1.1", "jest": "^29.1.2", "jest-junit": "^14.0.1", "nock": "^13.2.9", - "npm-check-updates": "^16.3.8", + "npm-check-updates": "^16.3.11", "openapi-response-validator": "^12.0.2", "openapi-typescript": "^5.4.1", "redis-mock": "^0.56.3", diff --git a/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js b/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js index 4380cc16d..38156c598 100644 --- a/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js +++ b/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js @@ -49,7 +49,7 @@ module.exports.handleBulkQuotesRequestedDmEvt = async ( bulkId: event.getKey(), content: { batchId: event.batchId, - bulkQuoteId: response.bulkQuoteId, + bulkQuoteId: event.request.bulkQuoteId, bulkQuotesResult: response, }, timestamp: Date.now(), @@ -59,5 +59,19 @@ module.exports.handleBulkQuotesRequestedDmEvt = async ( } catch (err) { logger.push({ err }).log('Error in handleBulkQuotesRequestedDmEvt'); + const bulkQuotesCallbackReceivedDmEvt = new BulkQuotesCallbackReceivedDmEvt({ + bulkId: event.getKey(), + content: { + batchId: event.batchId, + bulkQuoteId: event.request.bulkQuoteId, + bulkQuotesErrorResult: { + httpStatusCode: err.httpStatusCode, + mojaloopError: err.mojaloopError, + }, + }, + timestamp: Date.now(), + headers: [], + }); + await options.producer.sendDomainEvent(bulkQuotesCallbackReceivedDmEvt); } }; diff --git a/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js b/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js index 22ab46300..c736d32f0 100644 --- a/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js +++ b/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js @@ -49,7 +49,6 @@ module.exports.handleBulkTransfersRequestedDmEvt = async ( bulkId: event.getKey(), content: { batchId: event.batchId, - bulkTransferId: response.bulkTransferId, bulkTransfersResult: response, }, timestamp: Date.now(), @@ -59,5 +58,18 @@ module.exports.handleBulkTransfersRequestedDmEvt = async ( await options.producer.sendDomainEvent(bulkTransfersCallbackReceivedDmEvt); } catch (err) { logger.push({ err }).log('Error in handleBulkTransfersRequestedDmEvt'); + const bulkTransfersCallbackReceivedDmEvt = new BulkTransfersCallbackReceivedDmEvt({ + bulkId: event.getKey(), + content: { + batchId: event.batchId, + bulkTransfersErrorResult: { + httpStatusCode: err.httpStatusCode, + mojaloopError: err.mojaloopError, + }, + }, + timestamp: Date.now(), + headers: [], + }); + await options.producer.sendDomainEvent(bulkTransfersCallbackReceivedDmEvt); } }; diff --git a/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js b/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js index c7f7829f3..ee0d34352 100644 --- a/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js +++ b/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js @@ -24,7 +24,6 @@ const { PartyInfoRequestedDmEvt } = require('@mojaloop/sdk-scheme-adapter-private-shared-lib'); const { PartiesModel } = require('../../lib/model'); -const { SDKStateEnum } = require('../../lib/model/common'); const { PartyInfoCallbackReceivedDmEvt } = require('@mojaloop/sdk-scheme-adapter-private-shared-lib'); const { Errors } = require('@mojaloop/sdk-standard-components'); @@ -34,7 +33,7 @@ module.exports.handlePartyInfoRequestedDmEvt = async ( logger, ) => { const event = PartyInfoRequestedDmEvt.CreateFromDomainEvent(message); - const request = event.getPartyRequest(); + const request = event.partyRequest; const args = { type: request.partyIdType, id: request.partyIdentifier, subId: request.partySubIdOrType || undefined }; try { @@ -57,7 +56,7 @@ module.exports.handlePartyInfoRequestedDmEvt = async ( const partyInfoCallbackReceivedDmEvt = new PartyInfoCallbackReceivedDmEvt({ bulkId: event.getKey(), content: { - transferId: event.getTransferId(), + transferId: event.transferId, partyResult: { party: response.party?.body, currentState: response.currentState, @@ -76,13 +75,15 @@ module.exports.handlePartyInfoRequestedDmEvt = async ( const partyInfoCallbackReceivedDmEvt = new PartyInfoCallbackReceivedDmEvt({ bulkId: event.getKey(), content: { - transferId: event.getTransferId(), - partyResult: { - currentState: SDKStateEnum.ERROR_OCCURRED, - errorInformation: { - errorCode: code, - errorDescription: message - } + transferId: event.transferId, + partyErrorResult: { + httpStatusCode: err.httpStatusCode, + mojaloopError: { + errorInformation: { + errorCode: code, + errorDescription: message + }, + }, }, }, timestamp: Date.now(), diff --git a/modules/api-svc/src/index.d.ts b/modules/api-svc/src/index.d.ts deleted file mode 100644 index 297fa5957..000000000 --- a/modules/api-svc/src/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * as OutboundAPI from './OutboundServer/api_interfaces'; \ No newline at end of file diff --git a/modules/api-svc/src/index.js b/modules/api-svc/src/index.js index e92aa5f1e..0c33f9222 100644 --- a/modules/api-svc/src/index.js +++ b/modules/api-svc/src/index.js @@ -31,6 +31,7 @@ const OutboundServerMiddleware = require('./OutboundServer/middlewares.js'); const Router = require('./lib/router'); const Validate = require('./lib/validate'); const Cache = require('./lib/cache'); +const { SDKStateEnum } = require('./lib/model/common'); const { Logger, WSO2Auth } = require('@mojaloop/sdk-standard-components'); const LOG_ID = { @@ -377,4 +378,5 @@ module.exports = { Router, Server, Validate, + SDKStateEnum, }; diff --git a/modules/api-svc/src/lib/model/index.js b/modules/api-svc/src/lib/model/index.js index 453f2143a..5366f58b8 100644 --- a/modules/api-svc/src/lib/model/index.js +++ b/modules/api-svc/src/lib/model/index.js @@ -19,7 +19,7 @@ const OutboundRequestToPayTransferModel = require('./OutboundRequestToPayTransfe const AccountsModel = require('./AccountsModel'); const ProxyModel = require('./ProxyModel'); const OutboundRequestToPayModel = require('./OutboundRequestToPayModel'); -const { BackendError, PersistentStateMachine } = require('./common'); +const { SDKStateEnum, BackendError, PersistentStateMachine } = require('./common'); const PartiesModel = require('./PartiesModel'); const QuotesModel = require('./QuotesModel'); const TransfersModel = require('./TransfersModel'); @@ -37,5 +37,6 @@ module.exports = { PersistentStateMachine, PartiesModel, QuotesModel, - TransfersModel + TransfersModel, + SDKStateEnum }; diff --git a/modules/api-svc/test/unit/BackendEventHandler.test.js b/modules/api-svc/test/unit/BackendEventHandler.test.js index 7f4caa335..1e3f2191f 100644 --- a/modules/api-svc/test/unit/BackendEventHandler.test.js +++ b/modules/api-svc/test/unit/BackendEventHandler.test.js @@ -1,5 +1,6 @@ const { BackendEventHandler } = require('../../src/BackendEventHandler'); const { BackendRequests } = require('../../src/lib/model/lib/requests'); +const { SDKStateEnum } = require('../../src/lib/model/common'); const { Logger } = require('@mojaloop/sdk-standard-components'); const config = require('./data/defaultConfig.json'); const bulkTransactionResponse = require('./lib/model/data/bulkTransactionResponse.json'); @@ -110,7 +111,7 @@ describe('BackendEventHandler', () => { expect(putBulkTransactions).toBeCalledWith(bulkId, { ...bulkTransactionResponse, - currentState: 'COMPLETED', + currentState: SDKStateEnum.COMPLETED, }); const sent = KafkaDomainEventProducer.mock.sendDomainEvent.mock.calls[0][0]; diff --git a/modules/api-svc/test/unit/FSPIOPEventHandler.test.js b/modules/api-svc/test/unit/FSPIOPEventHandler.test.js index d93c5af0d..d1ae7a059 100644 --- a/modules/api-svc/test/unit/FSPIOPEventHandler.test.js +++ b/modules/api-svc/test/unit/FSPIOPEventHandler.test.js @@ -14,6 +14,7 @@ const { OutboundBulkQuotesModel, PartiesModel, OutboundBulkTransfersModel, + SDKStateEnum } = require('~/lib/model'); const logger = new Logger.Logger({ context: { app: 'FSPIOPEventHandler' }, stringify: () => '' }); @@ -71,7 +72,7 @@ describe('FSPIOPEventHandler', () => { party: { body: partyResult, }, - currentState: 'COMPLETED', + currentState: SDKStateEnum.COMPLETED, })) }; @@ -104,7 +105,7 @@ describe('FSPIOPEventHandler', () => { transferId: 'faaaea55-da85-4818-8b16-f720f9737889', partyResult: { party: partyResult, - currentState: 'COMPLETED', + currentState: SDKStateEnum.COMPLETED, } }); }); @@ -242,7 +243,6 @@ describe('FSPIOPEventHandler', () => { expect(sent._data.name).toEqual('BulkQuotesCallbackReceivedDmEvt'); expect(sent._data.content).toEqual({ batchId: '61c35bae-77d0-4f7d-b894-be375b838ff6', - bulkQuoteId: bulkQuoteResponse.bulkQuoteId, bulkQuotesResult: bulkQuoteResponse, }); }); @@ -281,7 +281,7 @@ describe('FSPIOPEventHandler', () => { const bulkTransfersResult = { bulkTransferId: '81c35bae-77d0-4f7d-b894-be375b838ff6', - currentState: 'COMPLETED', + currentState: SDKStateEnum.COMPLETED, individualTransferResults: [ { transferId: 'individual-transfer-id', @@ -317,7 +317,6 @@ describe('FSPIOPEventHandler', () => { expect(sent._data.name).toEqual('BulkTransfersCallbackReceivedDmEvt'); expect(sent._data.content).toEqual({ batchId: '61c35bae-77d0-4f7d-b894-be375b838ff6', - bulkTransferId: '81c35bae-77d0-4f7d-b894-be375b838ff6', bulkTransfersResult }); }); diff --git a/modules/outbound-command-event-handler/package.json b/modules/outbound-command-event-handler/package.json index 7e3aa8704..5fdf85816 100644 --- a/modules/outbound-command-event-handler/package.json +++ b/modules/outbound-command-event-handler/package.json @@ -39,14 +39,14 @@ "snapshot": "standard-version --no-verify --skip.changelog --prerelease snapshot --releaseCommitMessageFormat 'chore(snapshot): {{currentTag}}'" }, "dependencies": { - "@mojaloop/api-snippets": "16.0.3", + "@mojaloop/api-snippets": "^16.0.4", "@mojaloop/central-services-shared": "^17.3.1", "@mojaloop/logging-bc-client-lib": "^0.1.15", "@mojaloop/logging-bc-public-types-lib": "^0.1.12", "@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^", "ajv": "^8.11.0", "convict": "^6.2.3", - "express": "^4.18.1", + "express": "^4.18.2", "openapi-backend": "^5.5.0", "redis": "^4.3.1", "swagger-ui-express": "^4.5.0", @@ -56,18 +56,18 @@ "@types/convict": "^6.1.1", "@types/express": "^4.17.14", "@types/jest": "^29.1.2", - "@types/node": "^18.8.2", + "@types/node": "^18.8.3", "@types/node-cache": "^4.2.5", "@types/supertest": "^2.0.12", "@types/swagger-ui-express": "^4.1.3", "@types/yamljs": "^0.2.31", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.40.0", + "@typescript-eslint/parser": "^5.40.0", "copyfiles": "^2.4.1", - "eslint": "^8.24.0", + "eslint": "^8.25.0", "jest": "^29.1.2", "nodemon": "^2.0.20", - "npm-check-updates": "^16.3.8", + "npm-check-updates": "^16.3.11", "replace": "^1.2.1", "standard-version": "^9.5.0", "ts-jest": "^29.0.3", diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/prepare_sdk_outbound_bulk_response.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/prepare_sdk_outbound_bulk_response.ts index d9f4eed42..1af0289af 100644 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/prepare_sdk_outbound_bulk_response.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/prepare_sdk_outbound_bulk_response.ts @@ -28,14 +28,13 @@ import { ILogger } from '@mojaloop/logging-bc-public-types-lib'; import { BulkTransactionInternalState, CommandEvent, - IndividualTransferInternalState, PrepareSDKOutboundBulkResponseCmdEvt, SDKOutboundBulkResponsePreparedDmEvt, + SDKOutboundTransferState, } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; -import { Enum as CentralServicedSharedEnum } from '@mojaloop/central-services-shared'; export async function handlePrepareSDKOutboundBulkResponseCmdEvt( message: CommandEvent, @@ -54,47 +53,18 @@ export async function handlePrepareSDKOutboundBulkResponseCmdEvt( const bulkTransaction = bulkTransactionAgg.getBulkTransaction(); const allIndividualTransferIds = await bulkTransactionAgg.getAllIndividualTransferIds(); - const individualTransferResults = []; - for await (const individualTransferId of allIndividualTransferIds) { - const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); - const individualTransferRequest = individualTransfer.request; - const individualTransferResponse = individualTransfer.transferResponse; - - // TODO: Should we infer the FSPIOP-transferState for the individualTransfer based on the SDK-IndividualTransferInternalState? See comments below in the Fulfil mapping. - // eslint-disable-next-line max-len - const transferState = (individualTransfer.transferState === IndividualTransferInternalState.TRANSFERS_SUCCESS) ? CentralServicedSharedEnum.Transfers.TransferState.COMMITTED : CentralServicedSharedEnum.Transfers.TransferState.ABORTED; - - // TODO: Investigate how many individual transfers this message can handle. - // eslint-disable-next-line max-len - const individualTransferResult: SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionIndividualTransferResult = { - transferId: individualTransferResponse?.transferId, - homeTransactionId: individualTransferRequest.homeTransactionId, - transactionId: individualTransfer.transactionId!, // TODO: why is this failing lint? - quoteId: individualTransfer.quoteResponse?.quoteId, - to: individualTransfer.partyResponse.party, - amountType: individualTransferRequest.amountType, - amount: individualTransferRequest.amount, - currency: individualTransferRequest.currency, - quoteResponse: individualTransfer.quoteResponse as SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionIndividualTransferResult['quoteResponse'], - fulfil: { - ...individualTransferResponse as SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionIndividualTransferResult['fulfil'], - transferState, // TODO: This should be addressed as the BulkTransfers SDK model is missing the individualTransfers.transferState. Future story to address this. - // completedTimestamp?: string; // TODO: This also should be mapped from the BulkTransfers SDK model, but is currently missing. Future story (possible bug) to address this. - }, - quoteExtensions: individualTransfer.quoteResponse?.extensionList, - transferExtensions: individualTransferResponse?.extensionList, - // eslint-disable-next-line max-len - lastError: individualTransferResponse?.lastError || individualTransfer.quoteResponse?.lastError || undefined, - }; - individualTransferResults.push(individualTransferResult); - } + const individualTransferResults = await Promise.all(allIndividualTransferIds.map(async id => { + const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(id); + return individualTransfer.toIndividualTransferResult(); + })); + // TODO: Refactor SDKSchemeAdapter.V2_0_0.Inbound -> DFSP.V2_0_0.Inbound const bulkTransactionResponse: SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionResponse = { bulkHomeTransactionID: bulkTransaction.bulkHomeTransactionID, bulkTransactionId: bulkTransaction.id, - currentState: bulkTransaction.state == BulkTransactionInternalState.TRANSFERS_COMPLETED ? 'COMPLETED' : 'ERROR_OCCURRED', + currentState: bulkTransaction.state == BulkTransactionInternalState.TRANSFERS_COMPLETED ? SDKOutboundTransferState.COMPLETED : SDKOutboundTransferState.ERROR_OCCURRED, options: bulkTransaction.options, - individualTransferResults: individualTransferResults, + individualTransferResults, }; const msg = new SDKOutboundBulkResponsePreparedDmEvt({ bulkId: bulkTransaction.id, @@ -104,7 +74,7 @@ export async function handlePrepareSDKOutboundBulkResponseCmdEvt( }); await options.domainProducer.sendDomainEvent(msg); - bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.RESPONSE_PROCESSING); + await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.RESPONSE_PROCESSING); } catch (err) { logger.error(`Failed to create BulkTransactionAggregate. ${(err as Error).message}`); } diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_quotes_callback.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_quotes_callback.ts index e00c643c2..677ef9759 100755 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_quotes_callback.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_quotes_callback.ts @@ -25,10 +25,21 @@ 'use strict'; import { ILogger } from '@mojaloop/logging-bc-public-types-lib'; -import { CommandEvent, BulkQuotesCallbackProcessedDmEvt, ProcessBulkQuotesCallbackCmdEvt, SDKOutboundBulkQuotesRequestProcessedDmEvt, SDKOutboundBulkAcceptQuoteRequestedDmEvt, CoreConnectorBulkAcceptQuoteRequestIndividualTransferResult } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; +import { + CommandEvent, + BulkQuotesCallbackProcessedDmEvt, + ProcessBulkQuotesCallbackCmdEvt, + SDKOutboundBulkQuotesRequestProcessedDmEvt, + SDKOutboundBulkAcceptQuoteRequestedDmEvt, + CoreConnectorBulkAcceptQuoteRequestIndividualTransferResult, + SDKOutboundTransferState, + PrepareSDKOutboundBulkResponseCmdEvt, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; import { BulkBatchInternalState, BulkTransactionInternalState, IndividualTransferInternalState } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; +import { handlePrepareSDKOutboundBulkResponseCmdEvt } from './prepare_sdk_outbound_bulk_response'; + export async function handleProcessBulkQuotesCallbackCmdEvt( message: CommandEvent, @@ -55,8 +66,7 @@ export async function handleProcessBulkQuotesCallbackCmdEvt( // If individual quote result contains `lastError` the individual transfer state should be AGREEMENT_FAILED. // bulkQuotesResult.currentState === 'ERROR_OCCURRED' necessitates erroring out all individual transfers in that bulk batch. - if(bulkQuotesResult.currentState && - bulkQuotesResult.currentState === 'COMPLETED') { + if(bulkQuotesResult?.currentState === SDKOutboundTransferState.COMPLETED) { bulkBatch.setState(BulkBatchInternalState.AGREEMENT_COMPLETED); successCountAfterIncrement = await bulkTransactionAgg.incrementBulkQuotesSuccessCount(); @@ -66,13 +76,16 @@ export async function handleProcessBulkQuotesCallbackCmdEvt( const individualTransferId = bulkBatch.getReferenceIdForQuoteId(quoteResult.quoteId); const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); individualTransfer.setTransferState(IndividualTransferInternalState.AGREEMENT_SUCCESS); - individualTransfer.setQuoteResponse(quoteResult); + individualTransfer.setQuoteResponse({ + ...quoteResult, + expiration: bulkQuotesResult.expiration, + }); await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer); } else { const individualTransferId = bulkBatch.getReferenceIdForQuoteId(quoteResult.quoteId); const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); individualTransfer.setTransferState(IndividualTransferInternalState.AGREEMENT_FAILED); - individualTransfer.setQuoteResponse(quoteResult); + individualTransfer.setLastError(quoteResult.lastError); await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer); } } @@ -86,10 +99,16 @@ export async function handleProcessBulkQuotesCallbackCmdEvt( for await (const individualTransferId of individualTransferIds) { const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); individualTransfer.setTransferState(IndividualTransferInternalState.AGREEMENT_FAILED); + individualTransfer.setLastError(processBulkQuotesCallbackMessage.bulkQuotesErrorResult); await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer); + await bulkTransactionAgg.incrementFailedCount(); } } - bulkBatch.setBulkQuotesResponse(bulkQuotesResult); + if(bulkQuotesResult) { + bulkBatch.setBulkQuotesResponse(bulkQuotesResult); + } else if(processBulkQuotesCallbackMessage.bulkQuotesErrorResult) { + bulkBatch.setLastError(processBulkQuotesCallbackMessage.bulkQuotesErrorResult); + } await bulkTransactionAgg.setBulkBatchById(bulkBatch.id, bulkBatch); const bulkQuotesCallbackProcessedDmEvt = new BulkQuotesCallbackProcessedDmEvt({ @@ -102,9 +121,23 @@ export async function handleProcessBulkQuotesCallbackCmdEvt( }); await options.domainProducer.sendDomainEvent(bulkQuotesCallbackProcessedDmEvt); + const totalCount = await bulkTransactionAgg.getTotalCount(); + const failedCount = await bulkTransactionAgg.getFailedCount(); + + if(totalCount === failedCount) { + const prepareSDKOutboundBulkResponseCmdEvt = new PrepareSDKOutboundBulkResponseCmdEvt({ + bulkId: bulkTransactionAgg.bulkId, + timestamp: Date.now(), + headers: [], + }); + await handlePrepareSDKOutboundBulkResponseCmdEvt(prepareSDKOutboundBulkResponseCmdEvt, options, logger); + return; + } + // Progressing to the next step // Check the status of the remaining items in the bulk const bulkQuotesTotalCount = await bulkTransactionAgg.getBulkQuotesTotalCount(); + // eslint-disable-next-line max-len const bulkQuotesSuccessCount = successCountAfterIncrement || await bulkTransactionAgg.getBulkQuotesSuccessCount(); const bulkQuotesFailedCount = failedCountAfterIncrement || await bulkTransactionAgg.getBulkQuotesFailedCount(); if(bulkQuotesTotalCount === (bulkQuotesSuccessCount + bulkQuotesFailedCount)) { @@ -140,25 +173,27 @@ export async function handleProcessBulkQuotesCallbackCmdEvt( if(individualTransfer.quoteResponse) { individualTransferResults.push({ homeTransactionId: individualTransfer.request.homeTransactionId, - transactionId: individualTransfer.id, + transactionId: individualTransfer.transactionId, quoteResponse: individualTransfer.quoteResponse, }); } } - const sdkOutboundBulkAcceptQuoteRequestedDmEvt = new SDKOutboundBulkAcceptQuoteRequestedDmEvt({ - bulkId: bulkTransactionAgg.bulkId, - bulkAcceptQuoteRequest: { - bulkHomeTransactionID: bulkTransactionAgg.getBulkTransaction().bulkHomeTransactionID, - bulkTransactionId: bulkTransactionAgg.bulkId, - individualTransferResults, - }, - timestamp: Date.now(), - headers: [], - }); - await options.domainProducer.sendDomainEvent(sdkOutboundBulkAcceptQuoteRequestedDmEvt); - // Update global state AGREEMENT_ACCEPTANCE_PENDING - await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.AGREEMENT_ACCEPTANCE_PENDING); + if(individualTransferResults.length > 0) { + const sdkOutboundBulkAcceptQuoteRequestedDmEvt = new SDKOutboundBulkAcceptQuoteRequestedDmEvt({ + bulkId: bulkTransactionAgg.bulkId, + bulkAcceptQuoteRequest: { + bulkHomeTransactionID: bulkTransactionAgg.getBulkTransaction().bulkHomeTransactionID, + bulkTransactionId: bulkTransactionAgg.bulkId, + individualTransferResults, + }, + timestamp: Date.now(), + headers: [], + }); + await options.domainProducer.sendDomainEvent(sdkOutboundBulkAcceptQuoteRequestedDmEvt); + // Update global state AGREEMENT_ACCEPTANCE_PENDING + await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.AGREEMENT_ACCEPTANCE_PENDING); + } } } diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_transfers_callback.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_transfers_callback.ts index 11390d1d1..dd09e7892 100644 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_transfers_callback.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_bulk_transfers_callback.ts @@ -30,6 +30,8 @@ import { BulkTransfersCallbackProcessedDmEvt, ProcessBulkTransfersCallbackCmdEvt, SDKOutboundBulkTransfersRequestProcessedDmEvt, + BulkTransferResponse, + SDKOutboundTransferState, } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; @@ -55,12 +57,11 @@ export async function handleProcessBulkTransfersCallbackCmdEvt( const bulkBatch = await bulkTransactionAgg.getBulkBatchEntityById( processBulkTransfersCallbackMessage.batchId, ); - const bulkTransfersResult = processBulkTransfersCallbackMessage.bulkTransfersResult; + const bulkTransfersResult = processBulkTransfersCallbackMessage.bulkTransfersResult as BulkTransferResponse; // If individual transfer result contains `lastError` the individual transfer state should be TRANSFER_FAILED. // bulkTransfersResult.currentState === 'ERROR_OCCURRED' necessitates erroring out all individual transfers in that bulk batch. - if(bulkTransfersResult.currentState && - bulkTransfersResult.currentState === 'COMPLETED') { + if(bulkTransfersResult.currentState === SDKOutboundTransferState.COMPLETED) { bulkBatch.setState(BulkBatchInternalState.TRANSFERS_COMPLETED); successCount = await bulkTransactionAgg.incrementBulkTransfersSuccessCount(); @@ -71,7 +72,10 @@ export async function handleProcessBulkTransfersCallbackCmdEvt( const individualTransferId = bulkBatch.getReferenceIdForTransferId(transferResult.transferId); const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); individualTransfer.setTransferState(IndividualTransferInternalState.TRANSFERS_SUCCESS); - individualTransfer.setTransferResponse(transferResult); + individualTransfer.setTransferResponse({ + ...transferResult, + completedTimestamp: bulkTransfersResult.completedTimestamp, + }); individualTransfer.setTransactionId(bulkBatch.id); await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer); } else { diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_party_info_callback.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_party_info_callback.ts index 995c71068..ea09e403f 100755 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_party_info_callback.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_party_info_callback.ts @@ -34,10 +34,11 @@ import { BulkTransactionInternalState, SDKOutboundBulkPartyInfoRequestProcessedDmEvt, SDKOutboundBulkAutoAcceptPartyInfoRequestedDmEvt, - SDKOutboundBulkAcceptPartyInfoRequestedDmEvt, + SDKOutboundBulkAcceptPartyInfoRequestedDmEvt, PrepareSDKOutboundBulkResponseCmdEvt, } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; +import { handlePrepareSDKOutboundBulkResponseCmdEvt } from './prepare_sdk_outbound_bulk_response'; export async function handleProcessPartyInfoCallbackCmdEvt( message: CommandEvent, @@ -52,35 +53,49 @@ export async function handleProcessPartyInfoCallbackCmdEvt( // Create aggregate const bulkTransactionAgg = await BulkTransactionAgg.CreateFromRepo( - processPartyInfoCallback.getBulkId(), + processPartyInfoCallback.bulkId, options.bulkTransactionEntityRepo, logger, ); const individualTransfer = await bulkTransactionAgg.getIndividualTransferById( - processPartyInfoCallback.getTransferId(), + processPartyInfoCallback.transferId, ); - const partyResult = processPartyInfoCallback.getPartyResult(); - if(partyResult.currentState && partyResult.currentState === SDKOutboundTransferState.COMPLETED && !partyResult.errorInformation) { + if(processPartyInfoCallback.partyResult?.currentState === SDKOutboundTransferState.COMPLETED) { individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_SUCCESS); successCountAfterIncrement = await bulkTransactionAgg.incrementPartyLookupSuccessCount(); + individualTransfer.setPartyResponse(processPartyInfoCallback.partyResult); } else { individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_FAILED); failedCountAfterIncrement = await bulkTransactionAgg.incrementPartyLookupFailedCount(); + await bulkTransactionAgg.incrementFailedCount(); + individualTransfer.setLastError(processPartyInfoCallback.partyErrorResult); } - individualTransfer.setPartyResponse(partyResult); await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer); const msg = new PartyInfoCallbackProcessedDmEvt({ bulkId: processPartyInfoCallback.getKey(), content: { - transferId: processPartyInfoCallback.getTransferId(), + transferId: processPartyInfoCallback.transferId, }, timestamp: Date.now(), headers: [], }); await options.domainProducer.sendDomainEvent(msg); + const totalCount = await bulkTransactionAgg.getTotalCount(); + const failedCount = await bulkTransactionAgg.getFailedCount(); + + if(totalCount === failedCount) { + const prepareSDKOutboundBulkResponseCmdEvt = new PrepareSDKOutboundBulkResponseCmdEvt({ + bulkId: bulkTransactionAgg.bulkId, + timestamp: Date.now(), + headers: [], + }); + await handlePrepareSDKOutboundBulkResponseCmdEvt(prepareSDKOutboundBulkResponseCmdEvt, options, logger); + return; + } + // Progressing to the next step // Check the status of the remaining party lookups const partyLookupTotalCount = await bulkTransactionAgg.getPartyLookupTotalCount(); diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_party_info_request.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_party_info_request.ts index d59e44c88..54405c18c 100755 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_party_info_request.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_party_info_request.ts @@ -31,6 +31,9 @@ import { IndividualTransferInternalState, ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, PartyInfoRequestedDmEvt, + PartyInfoCallbackReceivedDmEvt, + PartyResponse, PartyErrorResponse, + SDKOutboundTransferState, } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; @@ -62,25 +65,40 @@ export async function handleProcessSDKOutboundBulkPartyInfoRequestCmdEvt( for await (const individualTransferId of allIndividualTransferIds) { const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); - if(bulkTx.isSkipPartyLookupEnabled()) { + if(bulkTx.isSkipPartyLookupEnabled() || individualTransfer.isPartyInfoExists) { + let partyResult: PartyResponse | undefined; + let partyErrorResult: PartyErrorResponse | undefined; if(individualTransfer.isPartyInfoExists) { - individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_SUCCESS); - await bulkTransactionAgg.incrementPartyLookupSuccessCount(); + partyResult = { + party: individualTransfer.payee, + currentState: SDKOutboundTransferState.COMPLETED, + }; } else { - individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_FAILED); - await bulkTransactionAgg.incrementPartyLookupFailedCount(); + partyErrorResult = { + mojaloopError: { + errorInformation: { + errorCode: '5100', + errorDescription: 'party information was not provided but skipPartyLookup is true', + }, + }, + }; } - await bulkTransactionAgg.setIndividualTransferById(individualTransferId, individualTransfer); - continue; - } - const { partyIdInfo } = individualTransfer.request.to; - - if(partyIdInfo.fspId) { - individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_SUCCESS); + const partyInfoCallbackReceivedDmEvt = new PartyInfoCallbackReceivedDmEvt({ + bulkId: bulkTx.id, + content: { + transferId: individualTransfer.id, + partyResult, + partyErrorResult, + }, + timestamp: Date.now(), + headers: [], + }); + await options.domainProducer.sendDomainEvent(partyInfoCallbackReceivedDmEvt); await bulkTransactionAgg.setIndividualTransferById(individualTransferId, individualTransfer); continue; } + const { partyIdInfo } = individualTransfer.request.to; const subId = partyIdInfo.partySubIdOrType ? `/${partyIdInfo.partySubIdOrType}` : ''; const partyInfoRequestedDmEvt = new PartyInfoRequestedDmEvt({ bulkId: bulkTx.id, diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_request.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_request.ts index 265014fef..3a8d6357a 100755 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_request.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_request.ts @@ -27,11 +27,13 @@ import { ILogger } from '@mojaloop/logging-bc-public-types-lib'; import { CommandEvent, + PrepareSDKOutboundBulkResponseCmdEvt, ProcessSDKOutboundBulkRequestCmdEvt, SDKOutboundBulkPartyInfoRequestedDmEvt, } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BulkTransactionAgg } from '..'; import { ICommandEventHandlerOptions } from '@module-types'; +import { handlePrepareSDKOutboundBulkResponseCmdEvt } from './prepare_sdk_outbound_bulk_response'; export async function handleProcessSDKOutboundBulkRequestCmdEvt( message: CommandEvent, @@ -50,12 +52,24 @@ export async function handleProcessSDKOutboundBulkRequestCmdEvt( ); logger.info(`Created BulkTransactionAggregate ${bulkTransactionAgg}`); - const msg = new SDKOutboundBulkPartyInfoRequestedDmEvt({ - bulkId: bulkTransactionAgg.bulkId, - timestamp: Date.now(), - headers: [], - }); - await options.domainProducer.sendDomainEvent(msg); + const totalCount = await bulkTransactionAgg.getTotalCount(); + const failedCount = await bulkTransactionAgg.getFailedCount(); + + if(totalCount === failedCount) { + const msg = new PrepareSDKOutboundBulkResponseCmdEvt({ + bulkId: bulkTransactionAgg.bulkId, + timestamp: Date.now(), + headers: [], + }); + await handlePrepareSDKOutboundBulkResponseCmdEvt(msg, options, logger); + } else { + const msg = new SDKOutboundBulkPartyInfoRequestedDmEvt({ + bulkId: bulkTransactionAgg.bulkId, + timestamp: Date.now(), + headers: [], + }); + await options.domainProducer.sendDomainEvent(msg); + } } catch (err) { logger.error(`Failed to create BulkTransactionAggregate. ${(err as Error).message}`); diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_response_sent.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_response_sent.ts index f2ae46ddc..fd210ef1d 100644 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_response_sent.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/handlers/process_sdk_outbound_bulk_response_sent.ts @@ -49,7 +49,7 @@ export async function handleProcessSDKOutboundBulkResponseSentCmdEvt( ); logger.info(`Created BulkTransactionAggregate ${bulkTransactionAgg}`); - bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.RESPONSE_SENT); + await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.RESPONSE_SENT); const sdkOutboundBulkResponseSentProcessedDmEvt = new SDKOutboundBulkResponseSentProcessedDmEvt({ bulkId: bulkTransactionAgg.bulkId, diff --git a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/index.ts b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/index.ts index 1063691bc..273a8b1ec 100644 --- a/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/index.ts +++ b/modules/outbound-command-event-handler/src/domain/bulk_transaction_agg/index.ts @@ -46,7 +46,6 @@ import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import CommandEventHandlerFunctions from './handlers'; import { ICommandEventHandlerOptions } from '@module-types'; -import { randomUUID } from 'crypto'; type BatchMapArray = { [fspId: string]: string[][] }; @@ -92,13 +91,19 @@ export class BulkTransactionAgg extends BaseAggregate - agg.addIndividualTransferEntity(IndividualTransferEntity.CreateFromRequest(individualTransfer)), - ), - ); + for await (const individualTransfer of request.individualTransfers) { + const entity = IndividualTransferEntity.CreateFromRequest(individualTransfer); + await agg.addIndividualTransferEntity(entity); + if(entity.lastError) { + await agg.incrementFailedCount(); + } + } + } else { + await agg.setTotalCount(0); + await agg.setFailedCount(0); } // Set initial values await agg.setBulkTransfersTotalCount(0); @@ -144,7 +149,7 @@ export class BulkTransactionAgg extends BaseAggregate { const repo = this._entity_state_repo as IBulkTransactionEntityRepo; return repo.getAllIndividualTransferIds(this._rootEntity.id); } @@ -239,6 +244,31 @@ export class BulkTransactionAgg extends BaseAggregate { + const repo = this._entity_state_repo as IBulkTransactionEntityRepo; + return repo.getTotalCount(this._rootEntity.id); + } + + async setTotalCount(totalCount: number): Promise { + await ( this._entity_state_repo) + .setTotalCount(this._rootEntity.id, totalCount); + } + + async getFailedCount(): Promise { + const repo = this._entity_state_repo as IBulkTransactionEntityRepo; + return repo.getFailedCount(this._rootEntity.id); + } + + async setFailedCount(count: number): Promise { + await ( this._entity_state_repo) + .setFailedCount(this._rootEntity.id, count); + } + + async incrementFailedCount(increment = 1): Promise { + const repo = this._entity_state_repo as IBulkTransactionEntityRepo; + return repo.incrementFailedCount(this._rootEntity.id, increment); + } + async getBulkQuotesTotalCount(): Promise { const repo = this._entity_state_repo as IBulkTransactionEntityRepo; return repo.getBulkQuotesTotalCount(this._rootEntity.id); @@ -330,8 +360,7 @@ export class BulkTransactionAgg extends BaseAggregate { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -236,7 +237,7 @@ describe("Tests for ProcessSDKOutboundBulkQuotesRequest Event Handler", () => { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -255,7 +256,7 @@ describe("Tests for ProcessSDKOutboundBulkQuotesRequest Event Handler", () => { fspId: 'differentfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), diff --git a/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_accept_party_info.test.ts b/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_accept_party_info.test.ts index 5ebc805c8..5c669e09c 100644 --- a/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_accept_party_info.test.ts +++ b/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_accept_party_info.test.ts @@ -31,24 +31,25 @@ import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import { - BulkTransactionInternalState, - DomainEvent, - IKafkaEventConsumerOptions, - IKafkaEventProducerOptions, - IndividualTransferInternalState, - IProcessPartyInfoCallbackCmdEvtData, - IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, - IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, - IProcessSDKOutboundBulkRequestCmdEvtData, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - KafkaDomainEventConsumer, - ProcessPartyInfoCallbackCmdEvt, - ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, - ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, - ProcessSDKOutboundBulkRequestCmdEvt, - RedisBulkTransactionStateRepo, -} from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + BulkTransactionInternalState, + DomainEvent, + IKafkaEventConsumerOptions, + IKafkaEventProducerOptions, + IndividualTransferInternalState, + IProcessPartyInfoCallbackCmdEvtData, + IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, + IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, + IProcessSDKOutboundBulkRequestCmdEvtData, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + KafkaDomainEventConsumer, + ProcessPartyInfoCallbackCmdEvt, + ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, + ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, + ProcessSDKOutboundBulkRequestCmdEvt, + RedisBulkTransactionStateRepo, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; // Tests can timeout in a CI pipeline so giving it leeway @@ -204,7 +205,7 @@ describe("Tests for ProcessSDKOutboundBulkAcceptPartyInfo Event Handler", () => fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -222,7 +223,7 @@ describe("Tests for ProcessSDKOutboundBulkAcceptPartyInfo Event Handler", () => fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), diff --git a/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_party_info_request.test.ts b/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_party_info_request.test.ts index 3a597aa3b..f741e147f 100644 --- a/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_party_info_request.test.ts +++ b/modules/outbound-command-event-handler/test/integration/application/discovery/process_bulk_party_info_request.test.ts @@ -29,18 +29,18 @@ import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import { - DomainEvent, - IKafkaEventConsumerOptions, - IKafkaEventProducerOptions, - IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, - IProcessSDKOutboundBulkRequestCmdEvtData, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - KafkaDomainEventConsumer, - ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, - ProcessSDKOutboundBulkRequestCmdEvt, - RedisBulkTransactionStateRepo, - } from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + DomainEvent, + IKafkaEventConsumerOptions, + IKafkaEventProducerOptions, + IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, + IProcessSDKOutboundBulkRequestCmdEvtData, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + KafkaDomainEventConsumer, + ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, + ProcessSDKOutboundBulkRequestCmdEvt, + RedisBulkTransactionStateRepo, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; // Tests can timeout in a CI pipeline so giving it leeway @@ -201,13 +201,13 @@ When inbound command event ProcessSDKOutboundBulkPartyInfoRequest is received \ Then the global state should be updated to DISCOVERY_PROCESSING. \ And PartyInfoRequested outbound event should not be published for each individual transfer. \ - And State for individual transfer should be updated to DISCOVERY_SUCCESS.", async () => { + And State for individual transfer should be updated to RECEIVED.", async () => { //Publish this message so that it is stored internally in redis const bulkTransactionId = randomUUID(); const bulkRequest: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransactionRequest = { bulkHomeTransactionID: "string", - bulkTransactionId: bulkTransactionId, + bulkTransactionId, options: { onlyValidateParty: true, autoAcceptParty: { @@ -269,7 +269,8 @@ //Check that the state of individual transfers in bulk to be RECEIVED const individualTransfers = await bulkTransactionEntityRepo.getAllIndividualTransferIds(bulkTransactionId); expect(individualTransfers.length).toBe(1); - expect((await bulkTransactionEntityRepo.getIndividualTransfer(bulkTransactionId, individualTransfers[0])).state).toBe('DISCOVERY_SUCCESS'); + const { state } = await bulkTransactionEntityRepo.getIndividualTransfer(bulkTransactionId, individualTransfers[0]); + expect(state).toBe('RECEIVED'); const filteredEvents = domainEvents.filter(domainEvent => domainEvent.getName() === 'PartyInfoRequestedDmEvt'); // Check domain events published to kafka diff --git a/modules/outbound-command-event-handler/test/integration/application/discovery/process_party_info_callback.test.ts b/modules/outbound-command-event-handler/test/integration/application/discovery/process_party_info_callback.test.ts index d03fa6025..7c740f3d8 100644 --- a/modules/outbound-command-event-handler/test/integration/application/discovery/process_party_info_callback.test.ts +++ b/modules/outbound-command-event-handler/test/integration/application/discovery/process_party_info_callback.test.ts @@ -29,20 +29,21 @@ import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import { - DomainEvent, - IKafkaEventConsumerOptions, - IKafkaEventProducerOptions, - IProcessPartyInfoCallbackCmdEvtData, - IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, - IProcessSDKOutboundBulkRequestCmdEvtData, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - KafkaDomainEventConsumer, - ProcessPartyInfoCallbackCmdEvt, - ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, - ProcessSDKOutboundBulkRequestCmdEvt, - RedisBulkTransactionStateRepo, -} from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + DomainEvent, + IKafkaEventConsumerOptions, + IKafkaEventProducerOptions, + IProcessPartyInfoCallbackCmdEvtData, + IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, + IProcessSDKOutboundBulkRequestCmdEvtData, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + KafkaDomainEventConsumer, + ProcessPartyInfoCallbackCmdEvt, + ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, + ProcessSDKOutboundBulkRequestCmdEvt, + RedisBulkTransactionStateRepo, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; // Tests can timeout in a CI pipeline so giving it leeway @@ -205,7 +206,7 @@ describe("Tests for discovery part in Outbound Command Event Handler", () => { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -333,7 +334,7 @@ describe("Tests for discovery part in Outbound Command Event Handler", () => { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), diff --git a/modules/outbound-command-event-handler/test/integration/application/transfers/process_prepare_bulk_response.test.ts b/modules/outbound-command-event-handler/test/integration/application/transfers/process_prepare_bulk_response.test.ts index 73cb36ee1..71d9b5cdb 100644 --- a/modules/outbound-command-event-handler/test/integration/application/transfers/process_prepare_bulk_response.test.ts +++ b/modules/outbound-command-event-handler/test/integration/application/transfers/process_prepare_bulk_response.test.ts @@ -29,24 +29,25 @@ import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import { - BulkTransactionInternalState, - DomainEvent, - IKafkaEventConsumerOptions, - IKafkaEventProducerOptions, - IndividualTransferInternalState, - IProcessPartyInfoCallbackCmdEvtData, - IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, - IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, - IProcessSDKOutboundBulkRequestCmdEvtData, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - KafkaDomainEventConsumer, - ProcessPartyInfoCallbackCmdEvt, - ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, - ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, - ProcessSDKOutboundBulkRequestCmdEvt, - RedisBulkTransactionStateRepo, -} from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + BulkTransactionInternalState, + DomainEvent, + IKafkaEventConsumerOptions, + IKafkaEventProducerOptions, + IndividualTransferInternalState, + IProcessPartyInfoCallbackCmdEvtData, + IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, + IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, + IProcessSDKOutboundBulkRequestCmdEvtData, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + KafkaDomainEventConsumer, + ProcessPartyInfoCallbackCmdEvt, + ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, + ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, + ProcessSDKOutboundBulkRequestCmdEvt, + RedisBulkTransactionStateRepo, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; // Tests can timeout in a CI pipeline so giving it leeway @@ -200,7 +201,7 @@ describe("Tests for PrepareSDKOutboundBulkResponseCmdEvt Command Event", () => { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -218,7 +219,7 @@ describe("Tests for PrepareSDKOutboundBulkResponseCmdEvt Command Event", () => { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), diff --git a/modules/outbound-command-event-handler/test/integration/sample_events/process_sdk_outbound_bulk_transfers_request.test.ts b/modules/outbound-command-event-handler/test/integration/sample_events/process_sdk_outbound_bulk_transfers_request.test.ts index b2993b026..7479b2db0 100644 --- a/modules/outbound-command-event-handler/test/integration/sample_events/process_sdk_outbound_bulk_transfers_request.test.ts +++ b/modules/outbound-command-event-handler/test/integration/sample_events/process_sdk_outbound_bulk_transfers_request.test.ts @@ -40,18 +40,19 @@ import { DefaultLogger } from "@mojaloop/logging-bc-client-lib"; import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { - // KafkaDomainEventProducer, - IKafkaEventProducerOptions, - RedisBulkTransactionStateRepo, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - ProcessSDKOutboundBulkTransfersRequestCmdEvt, - IProcessSDKOutboundBulkTransfersRequestCmdEvtData, - BulkTransactionInternalState, - IndividualTransferInternalState, - IPartyResult, - BulkBatchInternalState -} from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + // KafkaDomainEventProducer, + IKafkaEventProducerOptions, + RedisBulkTransactionStateRepo, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + ProcessSDKOutboundBulkTransfersRequestCmdEvt, + IProcessSDKOutboundBulkTransfersRequestCmdEvtData, + BulkTransactionInternalState, + IndividualTransferInternalState, + BulkBatchInternalState, + SDKOutboundTransferState, + PartyResponse, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; @@ -159,11 +160,11 @@ describe('processSDKOutboundBulkTransfersRequestCmdEvt', () => { const allIndividualTransferIds = await bulkTransactionAgg.getAllIndividualTransferIds(); - bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.DISCOVERY_COMPLETED) + await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.DISCOVERY_COMPLETED) const individualTransfer = await bulkTransactionAgg.getIndividualTransferById(allIndividualTransferIds[0]) // Lets add a partyResponse - const partyResponse: IPartyResult = { + const partyResponse: PartyResponse = { party: { partyIdInfo: { ...bulkTransactionRequest.individualTransfers[0].to.partyIdInfo, fspId: 'test' }, name: 'test', @@ -192,8 +193,9 @@ describe('processSDKOutboundBulkTransfersRequestCmdEvt', () => { // Lets create a bulkQuoteResult const bulkQuoteResponse: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse = { bulkQuoteId: bulkBatch.bulkQuoteId, + expiration: '2016-05-24T08:38:08.699-04:00', homeTransactionId: bulkTransactionRequest.bulkHomeTransactionID, - currentState: 'COMPLETED', + currentState: SDKOutboundTransferState.COMPLETED, individualQuoteResults: [ { quoteId: bulkBatch.bulkQuotesRequest.individualQuotes[0].quoteId, @@ -220,10 +222,10 @@ describe('processSDKOutboundBulkTransfersRequestCmdEvt', () => { // Lets complete the Agreement stage by changing the state to match the result - bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.AGREEMENT_COMPLETED); + await bulkTransactionAgg.setGlobalState(BulkTransactionInternalState.AGREEMENT_COMPLETED); const individualTransferAfterBulkQuotesResponse = await bulkTransactionAgg.getIndividualTransferById(individualTransferId); - + individualTransferAfterBulkQuotesResponse.setTransferState(IndividualTransferInternalState.AGREEMENT_SUCCESS); await bulkTransactionAgg.setIndividualTransferById(individualTransferAfterBulkQuotesResponse.id, individualTransfer); diff --git a/modules/outbound-command-event-handler/test/integration/sample_events/sdk_outbound_bulk_accept_party_info_received.test.ts b/modules/outbound-command-event-handler/test/integration/sample_events/sdk_outbound_bulk_accept_party_info_received.test.ts index 0bc4e40d4..bc4ba79ee 100644 --- a/modules/outbound-command-event-handler/test/integration/sample_events/sdk_outbound_bulk_accept_party_info_received.test.ts +++ b/modules/outbound-command-event-handler/test/integration/sample_events/sdk_outbound_bulk_accept_party_info_received.test.ts @@ -31,14 +31,15 @@ import { DefaultLogger } from "@mojaloop/logging-bc-client-lib"; import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { - KafkaDomainEventProducer, - IKafkaEventProducerOptions, - RedisBulkTransactionStateRepo, - IRedisBulkTransactionStateRepoOptions, - IndividualTransferInternalState, - SDKOutboundBulkAcceptPartyInfoReceivedDmEvt, - ISDKOutboundBulkAcceptPartyInfoReceivedDmEvtData -} from '@mojaloop/sdk-scheme-adapter-private-shared-lib' + KafkaDomainEventProducer, + IKafkaEventProducerOptions, + RedisBulkTransactionStateRepo, + IRedisBulkTransactionStateRepoOptions, + IndividualTransferInternalState, + SDKOutboundBulkAcceptPartyInfoReceivedDmEvt, + ISDKOutboundBulkAcceptPartyInfoReceivedDmEvtData, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; import { BulkTransactionAgg } from '../../../src/domain' @@ -127,7 +128,7 @@ describe.skip('SDKOutboundBulkAcceptPartyInfoRequested', () => { fspId: 'testpayeefsp1' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }) individualTransfer.setTransferState(IndividualTransferInternalState.DISCOVERY_SUCCESS) await bulkTransactionAgg.setIndividualTransferById(individualTransfer.id, individualTransfer) diff --git a/modules/outbound-command-event-handler/test/unit/domain/bulk_transaction_agg/index.test.ts b/modules/outbound-command-event-handler/test/unit/domain/bulk_transaction_agg/index.test.ts index 010e5b334..a14420a5a 100644 --- a/modules/outbound-command-event-handler/test/unit/domain/bulk_transaction_agg/index.test.ts +++ b/modules/outbound-command-event-handler/test/unit/domain/bulk_transaction_agg/index.test.ts @@ -25,12 +25,16 @@ 'use strict' import { BulkTransactionAgg } from '../../../../src/domain'; -import { InMemoryBulkTransactionStateRepo, IndividualTransferInternalState } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; +import { + InMemoryBulkTransactionStateRepo, + IndividualTransferInternalState, + PartyResponse, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { BULK_REQUEST } from '../../data/bulk_transaction_request' import { DefaultLogger } from '@mojaloop/logging-bc-client-lib'; import { ILogger, LogLevel } from '@mojaloop/logging-bc-public-types-lib'; // import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; -import { IPartyResult } from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; const logger: ILogger = new DefaultLogger('SDK-Scheme-Adapter', 'command-event-handler-unit-tests', '0.0.1', LogLevel.INFO); @@ -100,7 +104,7 @@ describe('BulkTransactionAggregate', () => { logger, ); // Simulate party resposnes - const partyResponse1: IPartyResult = { + const partyResponse1: PartyResponse = { party: { partyIdInfo: { partyIdType: 'MSISDN', @@ -108,9 +112,9 @@ describe('BulkTransactionAggregate', () => { fspId: 'dfsp1' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED } - const partyResponse2: IPartyResult = { + const partyResponse2: PartyResponse = { party: { partyIdInfo: { partyIdType: 'MSISDN', @@ -118,7 +122,7 @@ describe('BulkTransactionAggregate', () => { fspId: 'dfsp1' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED } const allIndividualTransferIds = await bulkTransactionAgg.getAllIndividualTransferIds(); const individualTransfer1 = await bulkTransactionAgg.getIndividualTransferById(allIndividualTransferIds[0]); @@ -134,7 +138,7 @@ describe('BulkTransactionAggregate', () => { afterEach(async () => { bulkTransactionAgg.destroy(); }) - + test('createBatches should create a single batch for two transfers', async () => { const generateBulkQuoteBatchesResult = await bulkTransactionAgg.generateBulkQuoteBatches(10); expect(generateBulkQuoteBatchesResult.bulkQuotesTotalCount).toEqual(1); @@ -151,7 +155,7 @@ describe('BulkTransactionAggregate', () => { test('createBatches should create two batches if there is a second fsp', async () => { // Add another individual transfer with different dfspId - const partyResponse3: IPartyResult = { + const partyResponse3: PartyResponse = { party: { partyIdInfo: { partyIdType: 'MSISDN', @@ -159,7 +163,7 @@ describe('BulkTransactionAggregate', () => { fspId: 'dfsp2' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED } const allIndividualTransferIds = await bulkTransactionAgg.getAllIndividualTransferIds(); const individualTransfer3 = await bulkTransactionAgg.getIndividualTransferById(allIndividualTransferIds[1]); diff --git a/modules/outbound-command-event-handler/test/util/generator.ts b/modules/outbound-command-event-handler/test/util/generator.ts index d651d82b5..c3884fbb8 100644 --- a/modules/outbound-command-event-handler/test/util/generator.ts +++ b/modules/outbound-command-event-handler/test/util/generator.ts @@ -31,44 +31,45 @@ import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; import { SDKSchemeAdapter } from "@mojaloop/api-snippets"; import { - BulkBatchState, - // BulkTransactionInternalState, - DomainEvent, - IBulkTransactionEntityRepo, - ICommandEventProducer, - IDomainEventProducer, - IEventConsumer, - // IEventProducer, - IKafkaEventConsumerOptions, - IKafkaEventProducerOptions, - IPrepareSDKOutboundBulkResponseCmdEvtData, - IProcessBulkQuotesCallbackCmdEvtData, - IProcessBulkTransfersCallbackCmdEvtData, - IProcessPartyInfoCallbackCmdEvtData, - IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, - IProcessSDKOutboundBulkAcceptQuoteCmdEvtData, - IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, - IProcessSDKOutboundBulkQuotesRequestCmdEvtData, - IProcessSDKOutboundBulkRequestCmdEvtData, - IProcessSDKOutboundBulkResponseSentCmdEvtData, - IProcessSDKOutboundBulkTransfersRequestCmdEvtData, - IRedisBulkTransactionStateRepoOptions, - KafkaCommandEventProducer, - KafkaDomainEventConsumer, - KafkaDomainEventProducer, - PrepareSDKOutboundBulkResponseCmdEvt, - ProcessBulkQuotesCallbackCmdEvt, - ProcessBulkTransfersCallbackCmdEvt, - ProcessPartyInfoCallbackCmdEvt, - ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, - ProcessSDKOutboundBulkAcceptQuoteCmdEvt, - ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, - ProcessSDKOutboundBulkQuotesRequestCmdEvt, - ProcessSDKOutboundBulkRequestCmdEvt, - ProcessSDKOutboundBulkResponseSentCmdEvt, - ProcessSDKOutboundBulkTransfersRequestCmdEvt, - RedisBulkTransactionStateRepo, -} from "@mojaloop/sdk-scheme-adapter-private-shared-lib" + BulkBatchState, + // BulkTransactionInternalState, + DomainEvent, + IBulkTransactionEntityRepo, + ICommandEventProducer, + IDomainEventProducer, + IEventConsumer, + // IEventProducer, + IKafkaEventConsumerOptions, + IKafkaEventProducerOptions, + IPrepareSDKOutboundBulkResponseCmdEvtData, + IProcessBulkQuotesCallbackCmdEvtData, + IProcessBulkTransfersCallbackCmdEvtData, + IProcessPartyInfoCallbackCmdEvtData, + IProcessSDKOutboundBulkAcceptPartyInfoCmdEvtData, + IProcessSDKOutboundBulkAcceptQuoteCmdEvtData, + IProcessSDKOutboundBulkPartyInfoRequestCmdEvtData, + IProcessSDKOutboundBulkQuotesRequestCmdEvtData, + IProcessSDKOutboundBulkRequestCmdEvtData, + IProcessSDKOutboundBulkResponseSentCmdEvtData, + IProcessSDKOutboundBulkTransfersRequestCmdEvtData, + IRedisBulkTransactionStateRepoOptions, + KafkaCommandEventProducer, + KafkaDomainEventConsumer, + KafkaDomainEventProducer, + PrepareSDKOutboundBulkResponseCmdEvt, + ProcessBulkQuotesCallbackCmdEvt, + ProcessBulkTransfersCallbackCmdEvt, + ProcessPartyInfoCallbackCmdEvt, + ProcessSDKOutboundBulkAcceptPartyInfoCmdEvt, + ProcessSDKOutboundBulkAcceptQuoteCmdEvt, + ProcessSDKOutboundBulkPartyInfoRequestCmdEvt, + ProcessSDKOutboundBulkQuotesRequestCmdEvt, + ProcessSDKOutboundBulkRequestCmdEvt, + ProcessSDKOutboundBulkResponseSentCmdEvt, + ProcessSDKOutboundBulkTransfersRequestCmdEvt, + RedisBulkTransactionStateRepo, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; import { randomUUID } from "crypto"; import { Timer } from "./timer"; @@ -323,7 +324,7 @@ export class ProcessHelper { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -341,7 +342,7 @@ export class ProcessHelper { fspId: 'receiverfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -359,7 +360,7 @@ export class ProcessHelper { fspId: 'differentfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -377,7 +378,7 @@ export class ProcessHelper { fspId: 'differentfsp' } }, - currentState: 'COMPLETED' + currentState: SDKOutboundTransferState.COMPLETED }, }, timestamp: Date.now(), @@ -531,7 +532,8 @@ export class ProcessHelper { bulkQuoteId: bulkQuoteId, bulkQuotesResult: { bulkQuoteId: bulkQuoteId, - currentState: 'COMPLETED', + expiration: '2022-08-08T11:12:13', + currentState: SDKOutboundTransferState.COMPLETED, individualQuoteResults: [ { quoteId: receiverFspBatch.bulkQuotesRequest.individualQuotes[quoteAmountList.indexOf('1')].quoteId, @@ -584,6 +586,7 @@ export class ProcessHelper { batchId: differentFspBatch.id, bulkQuoteId: bulkQuoteIdDifferentFsp, bulkQuotesResult: { + expiration: '2016-05-24T08:38:08.699-04:00', bulkQuoteId: bulkQuoteIdDifferentFsp, currentState: 'ERROR_OCCURRED', individualQuoteResults: [] @@ -695,7 +698,6 @@ export class ProcessHelper { bulkId: bulkTransactionId, content: { batchId: receiverFspBatch.id, - bulkTransferId: bulkTransferId, bulkTransfersResult: { bulkTransferId: receiverFspBatch.bulkTransfersRequest.bulkTransferId, bulkQuoteId: receiverFspBatch.bulkTransfersRequest.bulkQuoteId, @@ -734,7 +736,6 @@ export class ProcessHelper { const prepareSDKOutboundBulkResponseCmdEvt: IPrepareSDKOutboundBulkResponseCmdEvtData = { bulkId: bulkTransactionId, - content: null, timestamp: Date.now(), headers: null } diff --git a/modules/outbound-domain-event-handler/package.json b/modules/outbound-domain-event-handler/package.json index f18a1d9fb..3f7882180 100644 --- a/modules/outbound-domain-event-handler/package.json +++ b/modules/outbound-domain-event-handler/package.json @@ -39,12 +39,12 @@ "snapshot": "standard-version --no-verify --skip.changelog --prerelease snapshot --releaseCommitMessageFormat 'chore(snapshot): {{currentTag}}'" }, "dependencies": { - "@mojaloop/api-snippets": "16.0.3", + "@mojaloop/api-snippets": "^16.0.4", "@mojaloop/logging-bc-client-lib": "^0.1.15", "@mojaloop/logging-bc-public-types-lib": "^0.1.12", "@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^", "convict": "^6.2.3", - "express": "^4.18.1", + "express": "^4.18.2", "openapi-backend": "^5.5.0", "redis": "^4.3.1", "swagger-ui-express": "^4.5.0", @@ -54,18 +54,18 @@ "@types/convict": "^6.1.1", "@types/express": "^4.17.14", "@types/jest": "^29.1.2", - "@types/node": "^18.8.2", + "@types/node": "^18.8.3", "@types/node-cache": "^4.2.5", "@types/supertest": "^2.0.12", "@types/swagger-ui-express": "^4.1.3", "@types/yamljs": "^0.2.31", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.40.0", + "@typescript-eslint/parser": "^5.40.0", "copyfiles": "^2.4.1", - "eslint": "^8.24.0", + "eslint": "^8.25.0", "jest": "^29.1.2", "nodemon": "^2.0.20", - "npm-check-updates": "^16.3.8", + "npm-check-updates": "^16.3.11", "replace": "^1.2.1", "standard-version": "^9.5.0", "ts-jest": "^29.0.3", diff --git a/modules/outbound-domain-event-handler/src/application/handlers/bulk-quotes-callback-received.ts b/modules/outbound-domain-event-handler/src/application/handlers/bulk-quotes-callback-received.ts index ae31431af..689821fc1 100644 --- a/modules/outbound-domain-event-handler/src/application/handlers/bulk-quotes-callback-received.ts +++ b/modules/outbound-domain-event-handler/src/application/handlers/bulk-quotes-callback-received.ts @@ -19,6 +19,7 @@ export async function handleBulkQuotesCallbackReceived( batchId: bulkQuotesCallbackReceivedMessage.batchId, bulkQuoteId: bulkQuotesCallbackReceivedMessage.bulkQuoteId, bulkQuotesResult: bulkQuotesCallbackReceivedMessage.bulkQuotesResult, + bulkQuotesErrorResult: bulkQuotesCallbackReceivedMessage.bulkQuotesErrorResult, }, timestamp: Date.now(), headers: bulkQuotesCallbackReceivedMessage.getHeaders(), diff --git a/modules/outbound-domain-event-handler/src/application/handlers/bulk_transfers_callback_received.ts b/modules/outbound-domain-event-handler/src/application/handlers/bulk_transfers_callback_received.ts index 992db3cd2..34ebcd5ba 100644 --- a/modules/outbound-domain-event-handler/src/application/handlers/bulk_transfers_callback_received.ts +++ b/modules/outbound-domain-event-handler/src/application/handlers/bulk_transfers_callback_received.ts @@ -19,8 +19,8 @@ export async function handleBulkTransfersCallbackReceived( bulkId: bulkTransfersCallbackReceivedMessage.getKey(), content: { batchId: bulkTransfersCallbackReceivedMessage.batchId, - bulkTransferId: bulkTransfersCallbackReceivedMessage.bulkTransferId, bulkTransfersResult: bulkTransfersCallbackReceivedMessage.bulkTransfersResult, + bulkTransfersErrorResult: bulkTransfersCallbackReceivedMessage.bulkTransfersErrorResult, }, timestamp: Date.now(), headers: bulkTransfersCallbackReceivedMessage.getHeaders(), diff --git a/modules/outbound-domain-event-handler/src/application/handlers/party-info-callback-received.ts b/modules/outbound-domain-event-handler/src/application/handlers/party-info-callback-received.ts index bb9839b8f..4d35bc0b4 100644 --- a/modules/outbound-domain-event-handler/src/application/handlers/party-info-callback-received.ts +++ b/modules/outbound-domain-event-handler/src/application/handlers/party-info-callback-received.ts @@ -16,8 +16,9 @@ export async function handlePartyInfoCallbackReceived( const processPartyInfoCallbackMessageData: IProcessPartyInfoCallbackCmdEvtData = { bulkId: partyInfoCallbackReceived.getKey(), content: { - transferId: partyInfoCallbackReceived.getTransferId(), - partyResult: partyInfoCallbackReceived.getPartyResult(), + transferId: partyInfoCallbackReceived.transferId, + partyResult: partyInfoCallbackReceived.partyResult, + partyErrorResult: partyInfoCallbackReceived.partyErrorResult, }, timestamp: Date.now(), headers: partyInfoCallbackReceived.getHeaders(), diff --git a/modules/outbound-domain-event-handler/src/application/handlers/sdk_outbound_bulk_transfers_request_processed.ts b/modules/outbound-domain-event-handler/src/application/handlers/sdk_outbound_bulk_transfers_request_processed.ts index ef98d2d64..2b335b091 100644 --- a/modules/outbound-domain-event-handler/src/application/handlers/sdk_outbound_bulk_transfers_request_processed.ts +++ b/modules/outbound-domain-event-handler/src/application/handlers/sdk_outbound_bulk_transfers_request_processed.ts @@ -18,7 +18,6 @@ export async function handleSDKOutboundBulkTransfersRequestProcessed( const prepareSDKOutboundBulkResponseCmdEvtData: IPrepareSDKOutboundBulkResponseCmdEvtData = { bulkId: sdkOutboundBulkTransfersRequestProcessedDmEvt.getKey(), - content: null, timestamp: Date.now(), headers: sdkOutboundBulkTransfersRequestProcessedDmEvt.getHeaders(), }; diff --git a/modules/outbound-domain-event-handler/test/unit/application/handlers/bulk-transfers-callback-received.test.ts b/modules/outbound-domain-event-handler/test/unit/application/handlers/bulk-transfers-callback-received.test.ts index 079e85aef..6917c8998 100644 --- a/modules/outbound-domain-event-handler/test/unit/application/handlers/bulk-transfers-callback-received.test.ts +++ b/modules/outbound-domain-event-handler/test/unit/application/handlers/bulk-transfers-callback-received.test.ts @@ -32,17 +32,18 @@ import { DefaultLogger } from "@mojaloop/logging-bc-client-lib"; import { ILogger } from "@mojaloop/logging-bc-public-types-lib"; - import { - DomainEvent, - EventType, - IDomainEventData, - BulkTransfersCallbackReceivedDmEvt, - ProcessBulkTransfersCallbackCmdEvt, - IBulkTransfersCallbackReceivedDmEvtData, - } from "@mojaloop/sdk-scheme-adapter-private-shared-lib" - import { randomUUID } from "crypto"; - import { handleBulkTransfersCallbackReceived } from "../../../../src/application/handlers" - import { IDomainEventHandlerOptions } from "../../../../src/types"; +import { + DomainEvent, + EventType, + IDomainEventData, + BulkTransfersCallbackReceivedDmEvt, + ProcessBulkTransfersCallbackCmdEvt, + IBulkTransfersCallbackReceivedDmEvtData, + SDKOutboundTransferState, +} from '@mojaloop/sdk-scheme-adapter-private-shared-lib'; +import { randomUUID } from "crypto"; +import { handleBulkTransfersCallbackReceived } from "../../../../src/application/handlers" +import { IDomainEventHandlerOptions } from "../../../../src/types"; describe('handleBulkTransfersCallbackReceived', () => { @@ -62,10 +63,9 @@ describe('handleBulkTransfersCallbackReceived', () => { bulkId, content: { batchId: '61c35bae-77d0-4f7d-b894-be375b838ff6', - bulkTransferId: '81c35bae-77d0-4f7d-b894-be375b838ff6', bulkTransfersResult: { bulkTransferId: '81c35bae-77d0-4f7d-b894-be375b838ff6', - currentState: 'COMPLETED', + currentState: SDKOutboundTransferState.COMPLETED, individualTransferResults: [ { transferId: 'individual-transfer-id', diff --git a/modules/private-shared-lib/package.json b/modules/private-shared-lib/package.json index f8f64686a..16fc9129f 100644 --- a/modules/private-shared-lib/package.json +++ b/modules/private-shared-lib/package.json @@ -27,7 +27,8 @@ "snapshot": "standard-version --no-verify --skip.changelog --prerelease snapshot --releaseCommitMessageFormat 'chore(snapshot): {{currentTag}}'" }, "dependencies": { - "@mojaloop/api-snippets": "16.0.3", + "@mojaloop/api-snippets": "^16.0.4", + "@mojaloop/central-services-shared": "^17.3.1", "@mojaloop/logging-bc-public-types-lib": "^0.1.12", "@mojaloop/platform-shared-lib-messaging-types-lib": "^0.1.1", "@mojaloop/platform-shared-lib-nodejs-kafka-client-lib": "^0.1.1", @@ -36,10 +37,10 @@ "uuid": "^9.0.0" }, "devDependencies": { - "@types/node": "^18.8.2", - "eslint": "^8.24.0", + "@types/node": "^18.8.3", + "eslint": "^8.25.0", "jest": "^29.1.2", - "npm-check-updates": "^16.3.8", + "npm-check-updates": "^16.3.11", "replace": "^1.2.1", "standard-version": "^9.5.0", "ts-jest": "^29.0.3", diff --git a/modules/private-shared-lib/src/domain/bulk_batch_entity.ts b/modules/private-shared-lib/src/domain/bulk_batch_entity.ts index ce0249cca..94b3c1d67 100644 --- a/modules/private-shared-lib/src/domain/bulk_batch_entity.ts +++ b/modules/private-shared-lib/src/domain/bulk_batch_entity.ts @@ -29,6 +29,8 @@ import { BaseEntity, } from '.'; import { + BulkQuoteResponse, + BulkTransferResponse, SchemaValidationError, } from '..'; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; @@ -58,13 +60,12 @@ export interface BulkBatchState extends BaseEntityState { bulkQuoteId: string; bulkTransferId: string; bulkQuotesRequest: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteRequest; - bulkQuotesResponse?: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse; + bulkQuotesResponse?: BulkQuoteResponse; bulkTransfersRequest: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferRequest; - bulkTransfersResponse?: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse; + bulkTransfersResponse?: BulkTransferResponse; quoteIdReferenceIdMap: { [quoteId: string]: string }; // Key = individual quoteId from bulkQuotesRequest, Value = transactionId representing an individual transfer from the bulkTransaction transferIdReferenceIdMap: { [transactionId: string]: string }; // Key = individual transferId from bulkTransferRequest, Value = transactionId representing an individual transfer from the bulkTransaction - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - lastError?: any; // TODO: Define a format for this + lastError?: SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; } export class BulkBatchEntity extends BaseEntity { @@ -87,7 +88,7 @@ export class BulkBatchEntity extends BaseEntity { return this._state.bulkQuotesRequest; } - get bulkQuotesResponse(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse | undefined { + get bulkQuotesResponse(): BulkQuoteResponse | undefined { return this._state.bulkQuotesResponse; } @@ -95,7 +96,7 @@ export class BulkBatchEntity extends BaseEntity { return this._state.bulkTransfersRequest; } - get bulkTransfersResponse(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse | undefined { + get bulkTransfersResponse(): BulkTransferResponse | undefined { return this._state.bulkTransfersResponse; } @@ -107,6 +108,10 @@ export class BulkBatchEntity extends BaseEntity { return this._state.transferIdReferenceIdMap; } + get lastError() { + return this._state.lastError; + } + private static _convertPartyToFrom(party: SDKSchemeAdapter.V2_0_0.Outbound.Types.Party): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteRequest['from'] { return { idType: party.partyIdInfo.partyIdType, @@ -127,11 +132,12 @@ export class BulkBatchEntity extends BaseEntity { bulkTransactionEntity: BulkTransactionEntity, ): BulkBatchEntity { - const bulkQuoteId = randomUUID(); - const bulkTransferId = randomUUID(); + const id = randomUUID(); + const bulkQuoteId = id; + const bulkTransferId = id; const initialState: BulkBatchState = { - id: randomUUID(), + id, state: BulkBatchInternalState.CREATED, bulkId: bulkTransactionEntity.id, bulkQuoteId, @@ -189,14 +195,18 @@ export class BulkBatchEntity extends BaseEntity { this._state.state = state; } - setBulkQuotesResponse(response: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse) { + setBulkQuotesResponse(response: BulkQuoteResponse) { this._state.bulkQuotesResponse = response; } - setBulkTransfersResponse(response: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse) { + setBulkTransfersResponse(response: BulkTransferResponse) { this._state.bulkTransfersResponse = response; } + setLastError(response: SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError) { + this._state.lastError = response; + } + validateBulkQuotesRequest() { BulkBatchEntity._validateBulkQuotesRequest(this._state.bulkQuotesRequest); } @@ -204,7 +214,7 @@ export class BulkBatchEntity extends BaseEntity { validateBulkTransfersRequest() { BulkBatchEntity._validateBulkTransfersRequest(this._state.bulkTransfersRequest); } - + private static _validateBulkQuotesRequest(request: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteRequest): void { const requestSchema = SDKSchemeAdapter.V2_0_0.Outbound.Schemas.bulkQuoteRequest; const validate = ajv.compile(requestSchema); diff --git a/modules/private-shared-lib/src/domain/individual_transfer_entity.ts b/modules/private-shared-lib/src/domain/individual_transfer_entity.ts index 2794cab03..4c0f5b0b6 100644 --- a/modules/private-shared-lib/src/domain/individual_transfer_entity.ts +++ b/modules/private-shared-lib/src/domain/individual_transfer_entity.ts @@ -25,11 +25,12 @@ 'use strict'; import { BaseEntityState, BaseEntity } from './'; -import { IPartyResult, PartyInfoRequest } from '@module-types'; +import { PartyInfoRequest, PartyResponse } from '@module-types'; import { SchemaValidationError } from '../errors'; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; import { randomUUID } from 'crypto'; import Ajv from 'ajv'; +import { Enum as CentralServicedSharedEnum } from '@mojaloop/central-services-shared'; const ajv = new Ajv({ strict:false, allErrors: false, @@ -53,18 +54,32 @@ export enum IndividualTransferInternalState { TRANSFERS_SUCCESS = 'TRANSFERS_SUCCESS', } +export interface IndividualQuoteResponse extends SDKSchemeAdapter.V2_0_0.Outbound.Types.individualQuoteResult { + expiration: SDKSchemeAdapter.V2_0_0.Outbound.Types.DateTime; +} + +export interface IndividualTransferResponse extends SDKSchemeAdapter.V2_0_0.Outbound.Types.individualTransferResult { + completedTimestamp?: SDKSchemeAdapter.V2_0_0.Outbound.Types.DateTime; +} + +export type IndividualTransferError = SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; +// TODO: Extend API-Snippets lastError with the following types +// SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferErrorResponse | +// SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteErrorResponse | +// SDKSchemeAdapter.V2_0_0.Outbound.Types.partyError; + export interface IndividualTransferState extends BaseEntityState { id: string; request: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransactionIndividualTransfer; state: IndividualTransferInternalState; batchId?: string; partyRequest?: PartyInfoRequest; - partyResponse?: IPartyResult + partyResponse?: PartyResponse; acceptParty?: boolean; acceptQuote?: boolean; - quoteResponse?: SDKSchemeAdapter.V2_0_0.Outbound.Types.individualQuoteResult; - transferResponse?: SDKSchemeAdapter.V2_0_0.Outbound.Types.individualTransferResult; - lastError?: SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; + quoteResponse?: IndividualQuoteResponse; + transferResponse?: IndividualTransferResponse; + lastError?: IndividualTransferError; transactionId?: string; } @@ -76,26 +91,34 @@ export class IndividualTransferEntity extends BaseEntity DFSP.V2_0_0.Inbound + toIndividualTransferResult(): SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionIndividualTransferResult { + // TODO: Should we infer the FSPIOP-transferState for the individualTransfer based on the SDK-IndividualTransferInternalState? See comments below in the Fulfil mapping. + // eslint-disable-next-line max-len + const transferState = (this.transferState === IndividualTransferInternalState.TRANSFERS_SUCCESS) ? CentralServicedSharedEnum.Transfers.TransferState.COMMITTED : CentralServicedSharedEnum.Transfers.TransferState.ABORTED; + return { + transferId: this.transferId, + homeTransactionId: this.request.homeTransactionId, + transactionId: this.transactionId, + quoteId: this.quoteResponse?.quoteId, + to: this.partyResponse?.party || this.payee, + amountType: this.request.amountType, + amount: this.request.amount, + currency: this.request.currency, + quoteResponse: this.quoteResponse, + ...(this.transferResponse && { + fulfil: { + ...this.transferResponse, + transferState, + }, + }), + quoteExtensions: this.quoteResponse?.extensionList, + transferExtensions: this.transferResponse?.extensionList, + lastError: this.lastError, + }; + } + /* eslint-disable-next-line @typescript-eslint/no-useless-constructor */ constructor(initialState: IndividualTransferState) { IndividualTransferEntity._validateRequest(initialState.request); diff --git a/modules/private-shared-lib/src/events/outbound_command_event/prepare_sdk_outbound_bulk_response.ts b/modules/private-shared-lib/src/events/outbound_command_event/prepare_sdk_outbound_bulk_response.ts index 63c3496dd..87d84e9cc 100644 --- a/modules/private-shared-lib/src/events/outbound_command_event/prepare_sdk_outbound_bulk_response.ts +++ b/modules/private-shared-lib/src/events/outbound_command_event/prepare_sdk_outbound_bulk_response.ts @@ -29,7 +29,6 @@ import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-li export interface IPrepareSDKOutboundBulkResponseCmdEvtData { bulkId: string; - content: null; timestamp: number | null; headers: IMessageHeader[] | null; } @@ -51,7 +50,6 @@ export class PrepareSDKOutboundBulkResponseCmdEvt extends CommandEvent { const data: IPrepareSDKOutboundBulkResponseCmdEvtData = { timestamp: message.getTimeStamp(), headers: message.getHeaders(), - content: message.getContent() as IPrepareSDKOutboundBulkResponseCmdEvtData['content'], bulkId: message.getKey(), }; return new PrepareSDKOutboundBulkResponseCmdEvt(data); diff --git a/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_quotes_callback.ts b/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_quotes_callback.ts index a943b679d..29533a7c8 100644 --- a/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_quotes_callback.ts +++ b/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_quotes_callback.ts @@ -26,14 +26,15 @@ import { CommandEvent } from '../command_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; -import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; +import { BulkQuoteErrorResponse, BulkQuoteResponse } from '../../types'; export interface IProcessBulkQuotesCallbackCmdEvtData { bulkId: string; content: { batchId: string; bulkQuoteId: string; - bulkQuotesResult: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse; + bulkQuotesResult?: BulkQuoteResponse; + bulkQuotesErrorResult?: BulkQuoteErrorResponse; }; timestamp: number | null; headers: IMessageHeader[] | null; @@ -73,8 +74,13 @@ export class ProcessBulkQuotesCallbackCmdEvt extends CommandEvent { return content.bulkQuoteId; } - get bulkQuotesResult(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse { + get bulkQuotesResult(): BulkQuoteResponse | undefined { const content = this.getContent() as IProcessBulkQuotesCallbackCmdEvtData['content']; return content.bulkQuotesResult; } + + get bulkQuotesErrorResult(): BulkQuoteErrorResponse | undefined { + const content = this.getContent() as IProcessBulkQuotesCallbackCmdEvtData['content']; + return content.bulkQuotesErrorResult; + } } diff --git a/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_transfers_callback.ts b/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_transfers_callback.ts index ffb9abe02..d6dfc01cb 100644 --- a/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_transfers_callback.ts +++ b/modules/private-shared-lib/src/events/outbound_command_event/process_bulk_transfers_callback.ts @@ -4,12 +4,15 @@ import { CommandEvent } from '../command_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; +type BulkTransferResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse; +type BulkTransferErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferErrorResponse; + export interface IProcessBulkTransfersCallbackCmdEvtData { bulkId: string; content: { batchId: string; - bulkTransferId: string; - bulkTransfersResult: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse + bulkTransfersResult?: BulkTransferResponse; + bulkTransfersErrorResult?: BulkTransferErrorResponse; }, timestamp: number | null; headers: IMessageHeader[] | null; @@ -43,13 +46,18 @@ export class ProcessBulkTransfersCallbackCmdEvt extends CommandEvent { return content.batchId; } - get bulkTransferId(): string { + get bulkTransferId(): string | undefined { const content = this.getContent() as IProcessBulkTransfersCallbackCmdEvtData['content']; - return content.bulkTransferId; + return content.bulkTransfersResult?.bulkTransferId; } - get bulkTransfersResult(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse { + get bulkTransfersResult(): BulkTransferResponse | undefined { const content = this.getContent() as IProcessBulkTransfersCallbackCmdEvtData['content']; return content.bulkTransfersResult; } + + get bulkTransfersErrorResult(): BulkTransferErrorResponse | undefined { + const content = this.getContent() as IProcessBulkTransfersCallbackCmdEvtData['content']; + return content.bulkTransfersErrorResult; + } } diff --git a/modules/private-shared-lib/src/events/outbound_command_event/process_party_info_callback.ts b/modules/private-shared-lib/src/events/outbound_command_event/process_party_info_callback.ts index 3a336f2cb..e7657c5da 100644 --- a/modules/private-shared-lib/src/events/outbound_command_event/process_party_info_callback.ts +++ b/modules/private-shared-lib/src/events/outbound_command_event/process_party_info_callback.ts @@ -26,13 +26,14 @@ import { CommandEvent } from '../command_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; -import { IPartyResult } from '../../types'; +import { PartyErrorResponse, PartyResponse } from '@module-types'; export interface IProcessPartyInfoCallbackCmdEvtData { bulkId: string; content: { transferId: string; - partyResult: IPartyResult; + partyResult?: PartyResponse; + partyErrorResult?: PartyErrorResponse; }; timestamp: number | null; headers: IMessageHeader[] | null; @@ -49,18 +50,22 @@ export class ProcessPartyInfoCallbackCmdEvt extends CommandEvent { }); } - getBulkId() { + get bulkId() { return this.getKey(); } - getTransferId() { + get transferId() { return (this.getContent() as IProcessPartyInfoCallbackCmdEvtData['content']).transferId; } - getPartyResult() { + get partyResult() { return (this.getContent() as IProcessPartyInfoCallbackCmdEvtData['content']).partyResult; } + get partyErrorResult() { + return (this.getContent() as IProcessPartyInfoCallbackCmdEvtData['content']).partyErrorResult; + } + static CreateFromCommandEvent(message: CommandEvent): ProcessPartyInfoCallbackCmdEvt { if((message.getContent() === null || typeof message.getContent() !== 'object')) { throw new Error('Content is in unknown format'); diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/bulk_quotes_callback_received.ts b/modules/private-shared-lib/src/events/outbound_domain_event/bulk_quotes_callback_received.ts index 4d632a51d..6a8d56407 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/bulk_quotes_callback_received.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/bulk_quotes_callback_received.ts @@ -26,14 +26,15 @@ import { DomainEvent } from '../domain_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; -import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; +import { BulkQuoteErrorResponse, BulkQuoteResponse } from '@module-types'; export interface IBulkQuotesCallbackReceivedDmEvtData { bulkId: string; content: { batchId: string; bulkQuoteId: string; - bulkQuotesResult: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse; + bulkQuotesResult?: BulkQuoteResponse; + bulkQuotesErrorResult?: BulkQuoteErrorResponse; }; timestamp: number | null; headers: IMessageHeader[] | null; @@ -73,8 +74,13 @@ export class BulkQuotesCallbackReceivedDmEvt extends DomainEvent { return content.bulkQuoteId; } - get bulkQuotesResult(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse { + get bulkQuotesResult(): BulkQuoteResponse | undefined { const content = this.getContent() as IBulkQuotesCallbackReceivedDmEvtData['content']; return content.bulkQuotesResult; } + + get bulkQuotesErrorResult(): BulkQuoteErrorResponse | undefined { + const content = this.getContent() as IBulkQuotesCallbackReceivedDmEvtData['content']; + return content.bulkQuotesErrorResult; + } } diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/bulk_transfers_callback_received.ts b/modules/private-shared-lib/src/events/outbound_domain_event/bulk_transfers_callback_received.ts index 7c1936d7b..bade18d2f 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/bulk_transfers_callback_received.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/bulk_transfers_callback_received.ts @@ -2,14 +2,14 @@ import { DomainEvent } from '../domain_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; -import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; +import { BulkTransferErrorResponse, BulkTransferResponse } from '@module-types'; export type IBulkTransfersCallbackReceivedDmEvtData = { bulkId: string; content: { batchId: string; - bulkTransferId: string; - bulkTransfersResult: SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse + bulkTransfersResult?: BulkTransferResponse; + bulkTransfersErrorResult?: BulkTransferErrorResponse; }, timestamp: number | null; headers: IMessageHeader[] | null; @@ -45,13 +45,18 @@ export class BulkTransfersCallbackReceivedDmEvt extends DomainEvent { return content.batchId; } - get bulkTransferId(): string { + get bulkTransferId(): string | undefined { const content = this.getContent() as IBulkTransfersCallbackReceivedDmEvtData['content']; - return content.bulkTransferId; + return content.bulkTransfersResult?.bulkTransferId; } - get bulkTransfersResult(): SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse { + get bulkTransfersResult(): BulkTransferResponse | undefined { const content = this.getContent() as IBulkTransfersCallbackReceivedDmEvtData['content']; return content.bulkTransfersResult; } + + get bulkTransfersErrorResult(): BulkTransferErrorResponse | undefined { + const content = this.getContent() as IBulkTransfersCallbackReceivedDmEvtData['content']; + return content.bulkTransfersErrorResult; + } } diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_processed.ts b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_processed.ts index bd5225497..65dceb921 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_processed.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_processed.ts @@ -48,11 +48,11 @@ export class PartyInfoCallbackProcessedDmEvt extends DomainEvent { }); } - getBulkId() { + get bulkId() { return this.getKey(); } - getTransferId() { + get transferId() { return (this.getContent() as IPartyInfoCallbackProcessedDmEvtData['content']).transferId; } diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_received.ts b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_received.ts index 79b5760a4..ee3e9c0b8 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_received.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_callback_received.ts @@ -27,13 +27,14 @@ import { DomainEvent } from '../domain_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; -import { IPartyResult } from '../../types'; +import { PartyErrorResponse, PartyResponse } from '@module-types'; export interface IPartyInfoCallbackReceivedDmEvtData { bulkId: string; content: { transferId: string; - partyResult: IPartyResult; + partyResult?: PartyResponse; + partyErrorResult?: PartyErrorResponse; }; timestamp: number | null; headers: IMessageHeader[] | null; @@ -50,18 +51,22 @@ export class PartyInfoCallbackReceivedDmEvt extends DomainEvent { }); } - getBulkId(): string { + get bulkId(): string { return this.getKey(); } - getTransferId(): string { + get transferId(): string { return (this.getContent() as IPartyInfoCallbackReceivedDmEvtData['content']).transferId; } - getPartyResult(): IPartyResult { + get partyResult(): PartyResponse | undefined { return (this.getContent() as IPartyInfoCallbackReceivedDmEvtData['content']).partyResult; } + get partyErrorResult(): PartyErrorResponse | undefined { + return (this.getContent() as IPartyInfoCallbackReceivedDmEvtData['content']).partyErrorResult; + } + static CreateFromDomainEvent(message: DomainEvent): PartyInfoCallbackReceivedDmEvt { if((message.getContent() === null || typeof message.getContent() !== 'object')) { throw new Error('Content is in unknown format'); diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_requested.ts b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_requested.ts index 40b44ba16..f8a43151f 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/party_info_requested.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/party_info_requested.ts @@ -49,15 +49,15 @@ export class PartyInfoRequestedDmEvt extends DomainEvent { }); } - getBulkId() { + get bulkId() { return this.getKey(); } - getTransferId() { + get transferId() { return (this.getContent() as IPartyInfoRequestedDmEvtData['content']).transferId; } - getPartyRequest(): PartyInfoRequest { + get partyRequest(): PartyInfoRequest { return (this.getContent() as IPartyInfoRequestedDmEvtData['content']).request; } diff --git a/modules/private-shared-lib/src/events/outbound_domain_event/sdk_outbound_bulk_response_prepared.ts b/modules/private-shared-lib/src/events/outbound_domain_event/sdk_outbound_bulk_response_prepared.ts index 0892f1c82..a96712843 100644 --- a/modules/private-shared-lib/src/events/outbound_domain_event/sdk_outbound_bulk_response_prepared.ts +++ b/modules/private-shared-lib/src/events/outbound_domain_event/sdk_outbound_bulk_response_prepared.ts @@ -28,6 +28,7 @@ import { DomainEvent } from '../domain_event'; import { IMessageHeader } from '@mojaloop/platform-shared-lib-messaging-types-lib'; import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; +// TODO: Refactor SDKSchemeAdapter.V2_0_0.Inbound -> DFSP.V2_0_0.Inbound type BulkTransactionResponse = SDKSchemeAdapter.V2_0_0.Inbound.Types.bulkTransactionResponse; export type ISDKOutboundBulkResponsePreparedDmEvtData = { diff --git a/modules/private-shared-lib/src/infra/inmemory_bulk_transaction_repo.ts b/modules/private-shared-lib/src/infra/inmemory_bulk_transaction_repo.ts index 3ac12a2d4..758000036 100644 --- a/modules/private-shared-lib/src/infra/inmemory_bulk_transaction_repo.ts +++ b/modules/private-shared-lib/src/infra/inmemory_bulk_transaction_repo.ts @@ -43,9 +43,13 @@ export class InMemoryBulkTransactionStateRepo implements IBulkTransactionEntityR private readonly bulkBatchKeyPrefix: string = 'bulkBatch_'; - private readonly bulkTransfersTotalCountKey: string = 'bulkQuotesTotalCount'; + private readonly totalCountKey: string = 'totalCount'; - private readonly bulkTransfersSuccessCountKey: string = 'bulkQuotesSuccessCount'; + private readonly failedCountKey: string = 'failedCount'; + + private readonly bulkTransfersTotalCountKey: string = 'bulkTransfersTotalCount'; + + private readonly bulkTransfersSuccessCountKey: string = 'bulkTransfersSuccessCount'; private readonly bulkTransfersFailedCountKey: string = 'bulkTransfersFailedCount'; @@ -292,18 +296,40 @@ export class InMemoryBulkTransactionStateRepo implements IBulkTransactionEntityR } } + async getTotalCount(bulkId: string): Promise { + return this._getCount(this.totalCountKey, bulkId); + } + + async setTotalCount( + bulkId: string, + value: number, + ): Promise { + return this._setCount(this.totalCountKey, bulkId, value); + } + + async incrementFailedCount(bulkId: string, increment = 1): Promise { + return this._incrementCount(this.failedCountKey, bulkId, increment); + } + + async getFailedCount(bulkId: string): Promise { + return this._getCount(this.failedCountKey, bulkId); + } + + async setFailedCount(bulkId: string, value: number): Promise { + return this._setCount(this.failedCountKey, bulkId, value); + } + async getBulkTransfersTotalCount(bulkId: string): Promise { - return this._getCount(this.bulkQuotesTotalCountKey, bulkId); + return this._getCount(this.bulkTransfersTotalCountKey, bulkId); } async setBulkTransfersTotalCount( bulkId: string, value: number, ): Promise { - return this._setCount(this.bulkQuotesTotalCountKey, bulkId, value); + return this._setCount(this.bulkTransfersTotalCountKey, bulkId, value); } - async getBulkTransfersSuccessCount(bulkId: string): Promise { return this._getCount(this.bulkTransfersSuccessCountKey, bulkId); } @@ -329,7 +355,7 @@ export class InMemoryBulkTransactionStateRepo implements IBulkTransactionEntityR } async getBulkQuotesTotalCount(bulkId: string): Promise { - return this._getCount(this.bulkTransfersTotalCountKey, bulkId); + return this._getCount(this.bulkQuotesTotalCountKey, bulkId); } async setBulkQuotesTotalCount( diff --git a/modules/private-shared-lib/src/infra/redis_bulk_transaction_repo.ts b/modules/private-shared-lib/src/infra/redis_bulk_transaction_repo.ts index bc04d95f8..baf92f7b3 100644 --- a/modules/private-shared-lib/src/infra/redis_bulk_transaction_repo.ts +++ b/modules/private-shared-lib/src/infra/redis_bulk_transaction_repo.ts @@ -49,6 +49,10 @@ export class RedisBulkTransactionStateRepo implements IBulkTransactionEntityRepo private readonly bulkBatchKeyPrefix: string = 'bulkBatch_'; + private readonly totalCountKey: string = 'totalCount'; + + private readonly failedCountKey: string = 'failedCount'; + private readonly bulkTransfersTotalCountKey: string = 'bulkTransfersTotalCount'; private readonly bulkTransfersSuccessCountKey: string = 'bulkTransfersSuccessCount'; @@ -329,6 +333,29 @@ export class RedisBulkTransactionStateRepo implements IBulkTransactionEntityRepo } } + async getTotalCount(bulkId: string): Promise { + return this._getCount(this.totalCountKey, bulkId); + } + + async setTotalCount( + bulkId: string, + value: number, + ): Promise { + return this._setCount(this.totalCountKey, bulkId, value); + } + + async incrementFailedCount(bulkId: string, increment = 1): Promise { + return this._incrementCount(this.failedCountKey, bulkId, increment); + } + + async getFailedCount(bulkId: string): Promise { + return this._getCount(this.failedCountKey, bulkId); + } + + async setFailedCount(bulkId: string, value: number): Promise { + return this._setCount(this.failedCountKey, bulkId, value); + } + async getBulkTransfersTotalCount(bulkId: string): Promise { return this._getCount(this.bulkTransfersTotalCountKey, bulkId); } @@ -340,7 +367,6 @@ export class RedisBulkTransactionStateRepo implements IBulkTransactionEntityRepo return this._setCount(this.bulkTransfersTotalCountKey, bulkId, value); } - async getBulkTransfersSuccessCount(bulkId: string): Promise { return this._getCount(this.bulkTransfersSuccessCountKey, bulkId); } diff --git a/modules/private-shared-lib/src/types/bulk_transaction_entity_repo.ts b/modules/private-shared-lib/src/types/bulk_transaction_entity_repo.ts index c144fd3df..ce78ddf0c 100644 --- a/modules/private-shared-lib/src/types/bulk_transaction_entity_repo.ts +++ b/modules/private-shared-lib/src/types/bulk_transaction_entity_repo.ts @@ -48,6 +48,11 @@ export type IBulkTransactionEntityRepo = { value: BulkBatchState ) => Promise isBulkIdExists: (bulkId: string) => Promise + getTotalCount: (bulkId: string) => Promise + setTotalCount: (bulkId: string, totalCount: number) => Promise + incrementFailedCount: (bulkId: string, increment: number) => Promise + getFailedCount: (bulkId: string) => Promise + setFailedCount: (bulkId: string, count: number) => Promise getBulkTransfersTotalCount: (bulkId: string) => Promise setBulkTransfersTotalCount: (bulkId: string, totalCount: number) => Promise getBulkTransfersSuccessCount: (bulkId: string) => Promise diff --git a/modules/private-shared-lib/src/types/events/party-result.ts b/modules/private-shared-lib/src/types/events/PartyResponse.ts similarity index 65% rename from modules/private-shared-lib/src/types/events/party-result.ts rename to modules/private-shared-lib/src/types/events/PartyResponse.ts index 875d6e4fb..b1059f56d 100644 --- a/modules/private-shared-lib/src/types/events/party-result.ts +++ b/modules/private-shared-lib/src/types/events/PartyResponse.ts @@ -1,6 +1,5 @@ import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; -export interface IPartyResult { +export interface PartyResponse { party?: SDKSchemeAdapter.V2_0_0.Outbound.Types.Party; - errorInformation?: SDKSchemeAdapter.V2_0_0.Outbound.Types.ErrorInformation; currentState: SDKSchemeAdapter.V2_0_0.Outbound.Types.partiesByIdResponse['currentState']; } diff --git a/modules/private-shared-lib/src/types/events/index.ts b/modules/private-shared-lib/src/types/events/index.ts index 44ad1f353..e8246ef77 100644 --- a/modules/private-shared-lib/src/types/events/index.ts +++ b/modules/private-shared-lib/src/types/events/index.ts @@ -1,2 +1,2 @@ -export * from './party-result'; +export * from './PartyResponse'; export * from './PartyInfoRequest'; diff --git a/modules/private-shared-lib/src/types/index.ts b/modules/private-shared-lib/src/types/index.ts index ef5e8a25a..c61afd9d9 100644 --- a/modules/private-shared-lib/src/types/index.ts +++ b/modules/private-shared-lib/src/types/index.ts @@ -31,6 +31,16 @@ 'use strict'; +import { SDKSchemeAdapter } from '@mojaloop/api-snippets'; + export * from './infra'; export * from './events'; export * from './bulk_transaction_entity_repo'; + +export type BulkQuoteResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteResponse; +export type BulkQuoteErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; +// export type BulkQuoteErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkQuoteErrorResponse; +export type PartyErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; +export type BulkTransferResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferResponse; +export type BulkTransferErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.transferError; +// export type BulkTransferErrorResponse = SDKSchemeAdapter.V2_0_0.Outbound.Types.bulkTransferErrorResponse; diff --git a/modules/private-shared-lib/test/unit/events/outbound_domain_event/party_info_callback_received.test.ts b/modules/private-shared-lib/test/unit/events/outbound_domain_event/party_info_callback_received.test.ts index f2933d879..bfaae5eb5 100644 --- a/modules/private-shared-lib/test/unit/events/outbound_domain_event/party_info_callback_received.test.ts +++ b/modules/private-shared-lib/test/unit/events/outbound_domain_event/party_info_callback_received.test.ts @@ -79,15 +79,15 @@ describe('PartyInfoCallbackReceivedDmEvt', () => { partyInfoCallbackReceivedMessage = new PartyInfoCallbackReceivedDmEvt(samplePartyInfoCallbackReceivedMessageData) }) - test('getBulkId', async () => { - expect(partyInfoCallbackReceivedMessage.getBulkId()).toEqual(bulkId) + test('bulkId', async () => { + expect(partyInfoCallbackReceivedMessage.bulkId).toEqual(bulkId) }) - test('getTransferId', async () => { - expect(partyInfoCallbackReceivedMessage.getTransferId()).toEqual(transferId) + test('transferId', async () => { + expect(partyInfoCallbackReceivedMessage.transferId).toEqual(transferId) }) - test('getPartyResult', async () => { - expect(partyInfoCallbackReceivedMessage.getPartyResult()).toEqual(samplePartyInfoCallbackReceivedMessageData.content.partyResult) + test('partyResult', async () => { + expect(partyInfoCallbackReceivedMessage.partyResult).toEqual(samplePartyInfoCallbackReceivedMessageData.content.partyResult) }) }) diff --git a/package.json b/package.json index a143af317..56facc442 100644 --- a/package.json +++ b/package.json @@ -66,18 +66,18 @@ }, "devDependencies": { "@types/jest": "^29.1.2", - "@types/node": "^18.8.2", + "@types/node": "^18.8.3", "@types/node-cache": "^4.2.5", - "@typescript-eslint/eslint-plugin": "^5.39.0", - "@typescript-eslint/parser": "^5.39.0", + "@typescript-eslint/eslint-plugin": "^5.40.0", + "@typescript-eslint/parser": "^5.40.0", "audit-ci": "^6.3.0", - "eslint": "^8.24.0", + "eslint": "^8.25.0", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-plugin-import": "latest", "husky": "^8.0.1", "jest": "^29.1.2", "nodemon": "^2.0.20", - "npm-check-updates": "^16.3.8", + "npm-check-updates": "^16.3.11", "replace": "^1.2.1", "standard-version": "^9.5.0", "ts-jest": "^29.0.3", diff --git a/test/func/bulk-test-cases.md b/test/func/bulk-test-cases.md new file mode 100644 index 000000000..973c866d9 --- /dev/null +++ b/test/func/bulk-test-cases.md @@ -0,0 +1,49 @@ +## Happy Path: (bulk-happy-path.json) + - 1 transfer with acceptParty and acceptQuote set to true + - Bulk transaction having a format error + +## Parties Errors: (bulk-parties-error-cases.json) + - 1 transfer in the request + - Receiver sends error for in parties response + - Senderfsp sends acceptParty: false + - 2 transfers in the request + - Receiver sends an error response for one of the transfers + - Receiver times out sending response for one of the transfers + - Do not get any response from the receiver for both the transfers + + +## Quotes Errors: (bulk-quotes-error-cases.json) + - 2 transfers having the same receiver fsp id + - acceptParty + - All true + - TC-BQ1 - Receiver fsp fails the entire batch - Bug 2946 + - TC-BQ2 - Receiver fsp times out the entire batch + - TC-BQ3 - Receiver fsp sends only one response and skips the other + - TC-BQ4 - Receiver fsp sends one success response and one failure response - failing in payeefsp because of missing transfer, but is this something we need to worry about? + - TC-BQ5 - One true, one false - not getting final transfers response in TTK - PASS + - TC-BQ6 - All false - what should be the expected behavior? + - TC-BQ7 - True is sent only for one quote in PUT /bulkTxn acceptParty, ignoring second one - PASS + - TC-BQ8- false is sent only for one quote in PUT /bulkTxn acceptParty, ignoring second one - what should be the expected behavior? + - 2 transfers having different receiver fsp ids + - acceptParty + - All true + - TC-BQ9 - One batch sends an error - FAIL - no final PUT response + - TC-BQ10- Both batches sends error - FAIL - no final PUT response + - TC-BQ11 - One batch times out + - TC-BQ12 - Both batches times out + - 3 transfers with 2 transfers having 1 receiver fsp id and the other having a different one + - The batch with 2 transfers sends only 1 transfer response and the other batch sends the success response + + +## Transfers Errors: (bulk-transfer-errors.json) + - One bulkTransfer with 2 transfers + - acceptQuote + - All true + - TC-BT1 - Receiver fails the entire batch - Bug 2972. Also TTK rule for bulkQuotes not working as expected + - TC-BT2 - Receiver times out for the entire batch + - TC-BT3 - Receiver fsp sends only one response and skips the other + - TC-BT4 - Receiver fsp sends one success response and one failure - Bug 2974 Also TTK rule for bulkQuotes not working as expected + - TC-BT5 - One true one false - TC2 - Bug 2958 + - TC-BT6 - All false - TC1 + - TC-BT7 - True is sent only for one transfer in PUT /bulkTxn acceptParty, ignoring second one working + - TC-BT8- false is sent only for one transfer in PUT /bulkTxn acceptParty, ignoring second one diff --git a/test/func/config/ml-testing-toolkit/spec_files/rules_response/default.json b/test/func/config/ml-testing-toolkit/spec_files/rules_response/default.json index ce9333ccb..41ccb417e 100644 --- a/test/func/config/ml-testing-toolkit/spec_files/rules_response/default.json +++ b/test/func/config/ml-testing-toolkit/spec_files/rules_response/default.json @@ -53,7 +53,7 @@ }, { "ruleId": 2, - "priority": 1, + "priority": 2, "description": "get /parties/{idType}/{idValue} - error case - timeout", "apiVersion": { "minorVersion": 4, @@ -112,20 +112,17 @@ }, { "ruleId": 3, - "priority": 1, + "priority": 3, "description": "get /parties/{idType}/{idValue} - default path", "apiVersion": { "minorVersion": 4, "majorVersion": 1, "type": "mojaloop_simulator_inbound", - "hostnames": [ - "ttkpm4mlreceiver-ttk-backend" - ], - "specFile": "spec_files/api_definitions/payment_manager_1.4/api_spec.yaml", - "callbackMapFile": "spec_files/api_definitions/payment_manager_1.4/callback_map.json", - "responseMapFile": "spec_files/api_definitions/payment_manager_1.4/response_map.json", - "jsfRefFile": "spec_files/api_definitions/payment_manager_1.4/mockRef.json", - "triggerTemplatesFolder": "spec_files/api_definitions/payment_manager_1.4/trigger_templates" + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" }, "conditions": { "all": [ @@ -167,8 +164,8 @@ }, { "ruleId": 4, - "priority": 1, - "description": "post /bulkQuotes - receiver fspid has 2 ids", + "priority": 4, + "description": "post /bulkQuotes - receiver responds with 2 quotes results", "apiVersion": { "minorVersion": 4, "majorVersion": 1, @@ -184,8 +181,8 @@ { "fact": "body", "operator": "equal", - "value": "receiverfsphas2ids", - "path": "individualQuotes[0].to.fspId" + "value": "receiverfsphastwoids", + "path": "from.idValue" }, { "fact": "operationPath", @@ -243,8 +240,8 @@ }, { "ruleId": 5, - "priority": 1, - "description": "post /bulkQuotes - receiver fspid has 1 id", + "priority": 5, + "description": "post /bulkQuotes - receiver responds with 1 quotes result", "apiVersion": { "minorVersion": 4, "majorVersion": 1, @@ -261,7 +258,7 @@ "fact": "body", "operator": "equal", "value": "receiverfsphas1id", - "path": "individualQuotes[0].to.fspId" + "path": "from.idValue" }, { "fact": "operationPath", @@ -280,8 +277,8 @@ "path": null, "params": { "body": { - "bulkQuoteId": "{$request.body.bulkQuoteId", - "expiration": "2040-01-01T00:00:00.000Z", + "bulkQuoteId": "{$request.body.bulkQuoteId}", + "expiration": "{$request.body.expiration}", "individualQuoteResults": [ { "quoteId": "{$request.body.individualQuotes[0].quoteId}", @@ -308,8 +305,8 @@ }, { "ruleId": 6, - "priority": 1, - "description": "post /bulkQuotes - bulk quotes receiver sends error", + "priority": 6, + "description": "post /bulkQuotes - receiver fails the entire batch", "apiVersion": { "minorVersion": 4, "majorVersion": 1, @@ -345,8 +342,8 @@ "path": null, "params": { "body": { - "statusCode": "4001", - "message": "Cannot process the bulk quote" + "statusCode": "2000", + "message": "Generic Server Error" }, "statusCode": "500", "scripts": { @@ -360,8 +357,8 @@ }, { "ruleId": 6, - "priority": 1, - "description": "post /bulkQuotes - bulk quotes receiver sends response with a delay/timesout", + "priority": 6, + "description": "post /bulkQuotes - receiver fails the entire batch - same as above rule, but for a different test scenario", "apiVersion": { "minorVersion": 4, "majorVersion": 1, @@ -377,7 +374,7 @@ { "fact": "body", "operator": "equal", - "value": "bulkquotesreceiversendserror", + "value": "bulkquotesreceiversendserror2", "path": "individualQuotes[0].to.fspId" }, { @@ -397,8 +394,67 @@ "path": null, "params": { "body": { - "statusCode": "4001", - "message": "Cannot process the bulk quote" + "statusCode": "2000", + "message": "Generic Server Error" + }, + "statusCode": "500", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 6, + "priority": 6, + "description": "post /bulkQuotes - receiver times out entire batch", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "blkqtreceivertimesout", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkQuotes" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "quoteId": "{$request.body.individualQuotes[0].quoteId}", + "transferAmount": "{$request.body.individualQuotes[0].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[0].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[0].currency}" }, "statusCode": "500", "scripts": { @@ -411,9 +467,289 @@ "type": "response", "version": 1 }, + { + "ruleId": 7, + "priority": 7, + "description": "post /bulkQuotes - bulk transfer test case - receiver fails the entire batch", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "blktrfrrcvrfailsbatch", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkQuotes" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "quoteId": "{$request.body.individualQuotes[0].quoteId}", + "transferAmount": "{$request.body.individualQuotes[0].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[0].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[0].currency}" + }, + "statusCode": "500", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 8, + "priority": 8, + "description": "post /bulkQuotes - receiver sends success response for one quote and failure for other", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "bulkqtrcvrsendssuccessanderror", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkQuotes" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "bulkQuoteId": "{$request.body.bulkQuoteId}", + "expiration": "2040-01-01T00:00:00.000Z", + "individualQuoteResults": [ + { + "quoteId": "{$request.body.individualQuotes[0].quoteId}", + "transferAmount": "{$request.body.individualQuotes[0].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[0].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[0].currency}" + }, + { + "statusCode": "5101", + "message": "Payee Rejected Quote" + } + ] + }, + "statusCode": "200", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, { "ruleId": 9, - "priority": 1, + "priority": 9, + "description": "post /bulkQuotes - bulk transfer test case - receiver sends success response for one transfer and failure for other", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "blktrrcvrsendssuccessanderror", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkQuotes" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "bulkQuoteId": "{$request.body.bulkQuoteId}", + "expiration": "2040-01-01T00:00:00.000Z", + "individualQuoteResults": [ + { + "quoteId": "{$request.body.individualQuotes[0].quoteId}", + "transferAmount": "{$request.body.individualQuotes[0].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[0].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[0].currency}" + }, + { + "quoteId": "{$request.body.individualQuotes[1].quoteId}", + "transferAmount": "{$request.body.individualQuotes[1].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[1].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[1].currency}" + } + ] + }, + "statusCode": "200", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 10, + "priority": 10, + "description": "post /bulkQuotes - bulk quotes response for transfers scenario that has an error in the result", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "bulktransferresponsehas1error", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkQuotes" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "bulkQuoteId": "{$request.body.bulkQuoteId}", + "expiration": "{$request.body.expiration}", + "individualQuoteResults": [ + { + "quoteId": "{$request.body.individualQuotes[0].quoteId}", + "transferAmount": "{$request.body.individualQuotes[0].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[0].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[0].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[0].currency}" + }, + { + "quoteId": "{$request.body.individualQuotes[1].quoteId}", + "transferAmount": "{$request.body.individualQuotes[1].amount}", + "transferAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeReceiveAmount": "{$request.body.individualQuotes[1].amount}", + "payeeReceiveAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeFspFeeAmount": "0", + "payeeFspFeeAmountCurrency": "{$request.body.individualQuotes[1].currency}", + "payeeFspCommissionAmount": "0", + "payeeFspCommissionAmountCurrency": "{$request.body.individualQuotes[1].currency}" + } + ] + }, + "statusCode": "200", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 11, + "priority": 11, "description": "post /bulkQuotes - default path", "apiVersion": { "minorVersion": 4, @@ -471,8 +807,8 @@ "version": 1 }, { - "ruleId": 7, - "priority": 1, + "ruleId": 12, + "priority": 12, "description": "put /bulkTransactions/{bulkTransactionId}", "apiVersion": { "minorVersion": 4, @@ -513,9 +849,125 @@ "version": 1 }, { - "ruleId": 8, - "priority": 1, - "description": "post /bulkTransfers", + "ruleId": 13, + "priority": 13, + "description": "post /bulkTransfers - receiver fails the entire batch", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "blktrfrrcvrfailsbatch", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkTransfers" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "statusCode": "4001", + "message": "Cannot process the bulk transfer" + }, + "statusCode": "500", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 14, + "priority": 14, + "description": "post /bulkTransfers - receiver sends success response for one transfer and failure for other", + "apiVersion": { + "minorVersion": 4, + "majorVersion": 1, + "type": "mojaloop_simulator_inbound", + "hostnames": [ + "ttkpm4mlreceiver-ttk-backend" + ], + "specFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_simulator_sim_1.4/trigger_templates" + }, + "conditions": { + "all": [ + { + "fact": "body", + "operator": "equal", + "value": "blktrrcvrsendssuccessanderror", + "path": "from.idValue" + }, + { + "fact": "operationPath", + "operator": "equal", + "value": "/bulkTransfers" + }, + { + "fact": "method", + "operator": "equal", + "value": "post" + } + ] + }, + "event": { + "method": null, + "path": null, + "params": { + "body": { + "bulkTransferId": "{$request.body.bulkTransferId}", + "homeTransactionId": "{$request.body.homeTransactionId}", + "individualTransferResults": [ + { + "transferId": "{$request.body.individualTransfers[0].transferId}" + }, + { + "statusCode": "4001", + "message": "Cannot process the transfer" + } + ] + }, + "statusCode": "200", + "scripts": { + "scriptingEngine": "postman" + } + }, + "type": "FIXED_RESPONSE" + }, + "type": "response", + "version": 1 + }, + { + "ruleId": 15, + "priority": 15, + "description": "post /bulkTransfers - default path", "apiVersion": { "minorVersion": 4, "majorVersion": 1, diff --git a/test/func/ttk-testcases/bulk-happy-path.json b/test/func/ttk-testcases/bulk-happy-path.json new file mode 100644 index 000000000..fff38cf1b --- /dev/null +++ b/test/func/ttk-testcases/bulk-happy-path.json @@ -0,0 +1,3511 @@ +{ + "name": "multi", + "test_cases": [ + { + "id": 1, + "name": "TC-BHP1. Happy Path", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response receiver first name is ReceiverFirst", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" + ] + }, + { + "id": 6, + "description": "Check response receiver last name is ReceiverLast", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" + ] + }, + { + "id": 7, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()+120000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 3, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 4, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response receiver first name is ReceiverFirst", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" + ] + }, + { + "id": 6, + "description": "Check response receiver last name is ReceiverLast", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" + ] + }, + { + "id": 7, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 9, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 10, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 11, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 7, + "name": "7. When the incoming request has bulk expiration in the past, Then the PUT response should have error details of the failure", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 8, + "name": "8. When the incoming request has a format issue that fails schema validation, Then the return code should be 400 instead of 202", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(400)", + "" + ] + }, + { + "id": 2, + "description": "Check response has statusText with value Bad Request", + "exec": [ + "expect(response.statusText).to.equal('Bad Request')" + ] + }, + { + "id": 3, + "description": "Check response body message should be must be equal to one of the allowed values", + "exec": [ + "expect(response.body.message).to.equal('must be equal to one of the allowed values')" + ] + }, + { + "id": 4, + "description": "Check response body status code to be 400", + "exec": [ + "expect(response.body.statusCode).to.equal(400)" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + } + ] + }, + { + "id": 4, + "name": "4. When there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id and acceptParty is true for all the transfers, Then the PUT response should have details of all the 3 transfers for acceptQuote.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has quote result for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has ilpPacket and condition for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 9, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 2, + "name": "TC-BHP2. When the incoming request has bulk expiration in the past, Then the PUT response should have error details of the failure", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 3, + "name": "TC-BHP3. When the incoming request has a format issue that fails schema validation, Then the return code should be 400 instead of 202", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(400)", + "" + ] + }, + { + "id": 2, + "description": "Check response has statusText with value Bad Request", + "exec": [ + "expect(response.statusText).to.equal('Bad Request')" + ] + }, + { + "id": 3, + "description": "Check response body message should be must be equal to one of the allowed values", + "exec": [ + "expect(response.body.message).to.equal('must be equal to one of the allowed values')" + ] + }, + { + "id": 4, + "description": "Check response body status code to be 400", + "exec": [ + "expect(response.body.statusCode).to.equal(400)" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + } + ] + }, + { + "id": 4, + "name": "4. When there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id and acceptParty is true for all the transfers, Then the PUT response should have details of all the 3 transfers for acceptQuote.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has quote result for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has ilpPacket and condition for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 9, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 2, + "name": "2. When the receiverfsp information already exists in the request in to section, Then party lookup should be skipped and PUT /bulkTxn response should be received", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfspid" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid is receiverfspid", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.equal('receiverfspid')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 3, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 4, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 11, + "name": "11. When there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id and acceptParty is true for all the transfers, Then the PUT response should have details of all the 3 transfers for acceptQuote.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has quote result for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has ilpPacket and condition for third transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[2].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 9, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 12, + "name": "12. Given there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id, When the receiver with receiverhas1id times out sending the response, Then the PUT response should have details of all the 2 transfers from receiverfsphas2ids.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc3", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 13, + "name": "13. Given there are 2 transfers in the bulk request, When the sender fsp sends the acceptParty response for only transfers and not the second one, Then the PUT response should have details of the 1 transfer for which the acceptParty response was sent.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 15, + "name": "15. When the incoming request has bulk expiration in the past, Then the PUT response should have error details of the failure", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 16, + "name": "15. When the incoming request has a format issue that fails schema validation, Then the return code should be 400 instead of 202", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(400)", + "" + ] + }, + { + "id": 2, + "description": "Check response has statusText with value Bad Request", + "exec": [ + "expect(response.statusText).to.equal('Bad Request')" + ] + }, + { + "id": 3, + "description": "Check response body message should be must be equal to one of the allowed values", + "exec": [ + "expect(response.body.message).to.equal('must be equal to one of the allowed values')" + ] + }, + { + "id": 4, + "description": "Check response body status code to be 400", + "exec": [ + "expect(response.body.statusCode).to.equal(400)" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/func/ttk-testcases/bulk-parties-error-cases.json b/test/func/ttk-testcases/bulk-parties-error-cases.json new file mode 100644 index 000000000..9624e788e --- /dev/null +++ b/test/func/ttk-testcases/bulk-parties-error-cases.json @@ -0,0 +1,1719 @@ +{ + "name": "multi", + "test_cases": [ + { + "id": 1, + "name": "TC-BP1. When the request has a receiver-id that does not exist in payee fsp, Then the payer fsp backend should receive an ID not found as error message.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "iddoesnotexist" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check error code 4001", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorCode).to.equal('4001')" + ] + }, + { + "id": 2, + "description": "Check error description is ID Not Found", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorDescription).to.equal('ID Not Found')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + } + ] + }, + { + "id": 2, + "name": "TC-BP2. When the receiver fsp responds after the timeout elapses, Then the payer fsp should receive an timed-out as error message.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "idtimesout" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check that the response has an error code of 4001", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorCode).to.equal('2004')" + ] + }, + { + "id": 4, + "description": "Check that the response has an error description of ID Not Found", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorDescription).to.equal('Server timed out')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + } + ] + }, + { + "id": 3, + "name": "TC-BP3. Given there are 2 transfers in the bulk request, When one transfer has a succesful party lookup and the other has a failure, Then the PUT response should have details about both the transfers, And the response to PUT should only have one acceptParty.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "iddoesnotexist" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(requestVariables.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.partySuccess.to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 4, + "description": "Check response receiver first name is ReceiverFirst", + "exec": [ + "expect(environment.partySuccess.to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" + ] + }, + { + "id": 5, + "description": "Check response receiver last name is ReceiverLast", + "exec": [ + "expect(environment.partySuccess.to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" + ] + }, + { + "id": 6, + "description": "Check that the response has an error code of 4001", + "exec": [ + "expect(requestVariables.partyFailure.lastError.mojaloopError.errorCode).to.equal('4001')" + ] + }, + { + "id": 7, + "description": "Check that the response has an error description of ID Not Found", + "exec": [ + "expect(requestVariables.partyFailure.lastError.mojaloopError.errorDescription).to.equal('ID Not Found')" + ] + }, + { + "id": 8, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(requestVariables.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "requestVariables.acceptPartyCallback = acceptPartyCallback;", + "", + "acceptPartyCallback.body.individualTransferResults.forEach(individualTransferResult => {", + " if(individualTransferResult.to){", + " environment.partySuccess = individualTransferResult;", + " environment.acceptPartyCallback = individualTransferResult;", + " } else{", + " requestVariables.partyFailure = individualTransferResult;", + " }", + "});" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.partySuccess.transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check response has only one transfer result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1);" + ] + }, + { + "id": 3, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 6, + "name": "6. Given there are 2 transfers in the bulk request, When one transfer has a succesful party lookup and the other has a timeout, Then the PUT response should have details about both the transfers, And the response to PUT should only have one acceptParty.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "idtimesout" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(requestVariables.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.partySuccess.to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 4, + "description": "Check response receiver first name is ReceiverFirst", + "exec": [ + "expect(environment.partySuccess.to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" + ] + }, + { + "id": 5, + "description": "Check response receiver last name is ReceiverLast", + "exec": [ + "expect(environment.partySuccess.to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" + ] + }, + { + "id": 6, + "description": "Check that the response has an error code of 2004", + "exec": [ + "expect(requestVariables.partyFailure.lastError.mojaloopError.errorCode).to.equal('2004')" + ] + }, + { + "id": 7, + "description": "Check that the response has an error description of ID Not Found", + "exec": [ + "expect(requestVariables.partyFailure.lastError.mojaloopError.errorDescription).to.equal('Server timed out')" + ] + }, + { + "id": 8, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(requestVariables.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "requestVariables.acceptPartyCallback = acceptPartyCallback;", + "", + "acceptPartyCallback.body.individualTransferResults.forEach(individualTransferResult => {", + " if(individualTransferResult.to){", + " environment.partySuccess = individualTransferResult;", + " environment.acceptPartyCallback = individualTransferResult;", + " } else{", + " requestVariables.partyFailure = individualTransferResult;", + " }", + "});" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.partySuccess.transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check response has only one transfer result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1);" + ] + }, + { + "id": 3, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 7, + "name": "7. Given there are 2 transfers in the bulk request that has the same receiver id, When acceptParty is set to true for both the transfers in PUT request, Then the PUT response should have details about both the transfers for acceptQuote.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456007", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 13, + "name": "13. Given there are 2 transfers in the bulk request, When the sender fsp sends the acceptParty response for only transfers and not the second one, Then the PUT response should have details of the 1 transfer for which the acceptParty response was sent.", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": false, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + } + ] + }, + { + "id": 15, + "name": "15. When the incoming request has bulk expiration in the past, Then the PUT response should have error details of the failure", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 16, + "name": "15. When the incoming request has a format issue that fails schema validation, Then the return code should be 400 instead of 202", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "DOESNOTEXIST", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(400)", + "" + ] + }, + { + "id": 2, + "description": "Check response has statusText with value Bad Request", + "exec": [ + "expect(response.statusText).to.equal('Bad Request')" + ] + }, + { + "id": 3, + "description": "Check response body message should be must be equal to one of the allowed values", + "exec": [ + "expect(response.body.message).to.equal('must be equal to one of the allowed values')" + ] + }, + { + "id": 4, + "description": "Check response body status code to be 400", + "exec": [ + "expect(response.body.statusCode).to.equal(400)" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()-5000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/func/ttk-testcases/mvp-bulk.json b/test/func/ttk-testcases/bulk-quotes-error-cases.json similarity index 80% rename from test/func/ttk-testcases/mvp-bulk.json rename to test/func/ttk-testcases/bulk-quotes-error-cases.json index 58331823b..64ce83482 100644 --- a/test/func/ttk-testcases/mvp-bulk.json +++ b/test/func/ttk-testcases/bulk-quotes-error-cases.json @@ -3,7 +3,7 @@ "test_cases": [ { "id": 1, - "name": "1. Happy Path", + "name": "TC-BQ1. Given party lookup is skipped and bulk quotes request is submitted, When receiver fsp fails the entire batch and sends the error, Then the PUT response should have error details about the transfer.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -37,14 +37,14 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, - "bulkExpiration": "{$requestVariables.bulkTimeout}" + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, "from": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "16135551212" + "partyIdentifier": "12345678" } }, "individualTransfers": [ @@ -53,12 +53,13 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "56781234" + "partyIdentifier": "123456789", + "fspId": "bulkquotesreceiversendserror" } }, "amountType": "SEND", "currency": "USD", - "amount": "123.45" + "amount": "456.78" } ] }, @@ -80,48 +81,12 @@ "exec": [ "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" ] - }, - { - "id": 3, - "description": "Check response MSISDN is same as in the request", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" - ] - }, - { - "id": 4, - "description": "Check response has the receiver fspid populated", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" - ] - }, - { - "id": 5, - "description": "Check response receiver first name is ReceiverFirst", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" - ] - }, - { - "id": 6, - "description": "Check response receiver last name is ReceiverLast", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" - ] - }, - { - "id": 7, - "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", - "exec": [ - "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" - ] } ] }, "scripts": { "preRequest": { "exec": [ - "requestVariables.bulkTimeout = (new Date(Date.now()+120000)).toISOString()", "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" ] }, @@ -132,7 +97,9 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;" + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;" ] } } @@ -181,111 +148,30 @@ }, { "id": 2, - "description": "Check response has quote result", + "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" ] }, { "id": 3, - "description": "Check response has ilpPacket and condition", + "description": "Check that the response has an error code of 4001", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.errorCode).to.equal('4001')" ] }, { "id": 4, - "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", - "exec": [ - "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" - ] - } - ] - }, - "scripts": { - "preRequest": { - "exec": [ - "console.log(environment.bulkTransactionId)", - "", - "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" - ] - }, - "postRequest": { - "exec": [ - "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", - "", - "console.log(acceptQuoteCallback)", - "", - "environment.acceptQuoteCallback = acceptQuoteCallback;" - ] - } - } - }, - { - "id": 3, - "description": "put bulk transaction for acceptQuote", - "apiVersion": { - "minorVersion": 0, - "majorVersion": 1, - "type": "scheme_adapter_outbound", - "prefix": "/sdk-out", - "hostnames": [], - "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", - "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", - "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", - "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", - "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" - }, - "operationPath": "/bulkTransactions/{bulkTransactionId}", - "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", - "method": "put", - "params": { - "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" - }, - "url": "http://payer-sdk-api-svc:4001", - "body": { - "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", - "individualTransfers": [ - { - "homeTransactionId": "abc456", - "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", - "acceptQuote": true - } - ] - }, - "scriptingEngine": "javascript", - "tests": { - "assertions": [ - { - "id": 1, - "description": "Check Return Status Code", - "exec": [ - "expect(response.status).to.equal(202)" - ] - }, - { - "id": 2, - "description": "Check response has quote result", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" - ] - }, - { - "id": 3, - "description": "Check response has ilpPacket and condition", + "description": "Check that the response has an error description of ID Not Found", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.description).to.equal('Cannot process the bulk quote')" ] }, { - "id": 4, + "id": 5, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ - "expect(environment.acceptQuoteCallback.body.currentState).to.equal('COMPLETED')" + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" ] } ] @@ -313,7 +199,7 @@ }, { "id": 2, - "name": "2. When the receiverfsp information already exists in the request in to section, Then party lookup should be skipped and PUT /bulkTxn response should be received", + "name": "TC-BQ2. Given party lookup is skipped and bulk quotes request is submitted, When receiver fsp sends response after timeout while sending bulk quotes reponse, Then the PUT response should have error details about timeout.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -354,7 +240,7 @@ "from": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "16135551212" + "partyIdentifier": "blkqtreceivertimesout" } }, "individualTransfers": [ @@ -363,13 +249,13 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "56781234", - "fspId": "receiverfspid" + "partyIdentifier": "123456789", + "fspId": "bulkquotesreceivertimesout" } }, "amountType": "SEND", "currency": "USD", - "amount": "123.45" + "amount": "456.78" } ] }, @@ -391,20 +277,6 @@ "exec": [ "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" ] - }, - { - "id": 3, - "description": "Check response MSISDN is same as in the request", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" - ] - }, - { - "id": 4, - "description": "Check response has the receiver fspid is receiverfspid", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.equal('receiverfspid')" - ] } ] }, @@ -421,14 +293,18 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;" + "environment.acceptPartyCallback = acceptPartyCallback;", + "", + "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "", + "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" ] } } }, { "id": 2, - "description": "put bulk transaction for acceptParty", + "description": "put bulk transaction", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -470,100 +346,21 @@ }, { "id": 2, - "description": "Check response has quote result", + "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check response has ilpPacket and condition", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 4, - "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", - "exec": [ - "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" - ] - } - ] - }, - "scripts": { - "preRequest": { - "exec": [ - "console.log(environment.bulkTransactionId)", - "", - "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" - ] - }, - "postRequest": { - "exec": [ - "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", - "", - "console.log(acceptQuoteCallback)", - "", - "environment.acceptQuoteCallback = acceptQuoteCallback;" - ] - } - } - }, - { - "id": 3, - "description": "put bulk transaction for acceptQuote", - "apiVersion": { - "minorVersion": 0, - "majorVersion": 1, - "type": "scheme_adapter_outbound", - "prefix": "/sdk-out", - "hostnames": [], - "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", - "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", - "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", - "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", - "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" - }, - "operationPath": "/bulkTransactions/{bulkTransactionId}", - "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", - "method": "put", - "params": { - "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" - }, - "url": "http://payer-sdk-api-svc:4001", - "body": { - "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", - "individualTransfers": [ - { - "homeTransactionId": "abc456", - "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", - "acceptQuote": true - } - ] - }, - "scriptingEngine": "javascript", - "tests": { - "assertions": [ - { - "id": 1, - "description": "Check Return Status Code", - "exec": [ - "expect(response.status).to.equal(202)" - ] - }, - { - "id": 2, - "description": "Check response has quote result", + "description": "Check response has quote result for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" ] }, { - "id": 3, - "description": "Check response has ilpPacket and condition", + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", "", @@ -571,7 +368,7 @@ ] }, { - "id": 4, + "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -602,7 +399,7 @@ }, { "id": 3, - "name": "3. When the request has a receiver-id that does not exist in payee fsp, Then the payer fsp backend should receive an ID not found as error message.", + "name": "TC-BQ3. Given party lookup is skipped and bulk quotes request having 3 transfers with same receiver fsp id is submitted, When receiver fsp only sends response for 2 quotes out of the 3 while sending bulk quotes reponse, Then the PUT response should have error details about missing quote.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -636,7 +433,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -648,11 +445,38 @@ }, "individualTransfers": [ { - "homeTransactionId": "abc2", + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc1", "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "iddoesnotexist" + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" } }, "amountType": "SEND", @@ -675,16 +499,9 @@ }, { "id": 2, - "description": "Check error code 4001", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorCode).to.equal('4001')" - ] - }, - { - "id": 2, - "description": "Check error description is ID Not Found", + "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorDescription).to.equal('ID Not Found')" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" ] } ] @@ -710,19 +527,10 @@ ] } } - } - ] - }, - { - "id": 4, - "name": "4. When the receiver fsp responds after the timeout elapses, Then the payer fsp should receive an timed-out as error message.", - "fileInfo": { - "path": "ttk-testcases/mvp-bulk.json" - }, - "requests": [ + }, { - "id": 1, - "description": "Post /bulkTransaction", + "id": 2, + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -735,46 +543,33 @@ "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" }, - "operationPath": "/bulkTransactions", - "path": "/bulkTransactions", - "method": "post", + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", "body": { - "bulkHomeTransactionID": "abc123", - "bulkTransactionId": "{$function.generic.generateUUID}", - "options": { - "onlyValidateParty": true, - "autoAcceptParty": { - "enabled": false + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true }, - "autoAcceptQuote": { - "enabled": false + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true }, - "skipPartyLookup": false, - "synchronous": false, - "bulkExpiration": "2016-05-24T08:38:08.699-04:00" - }, - "from": { - "partyIdInfo": { - "partyIdType": "MSISDN", - "partyIdentifier": "16135551212" - } - }, - "individualTransfers": [ { - "homeTransactionId": "abc2", - "to": { - "partyIdInfo": { - "partyIdType": "MSISDN", - "partyIdentifier": "idtimesout" - } - }, - "amountType": "SEND", - "currency": "USD", - "amount": "456.78" + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": true } ] }, - "url": "http://payer-sdk-api-svc:4001", "scriptingEngine": "javascript", "tests": { "assertions": [ @@ -782,29 +577,53 @@ "id": 1, "description": "Check Return Status Code", "exec": [ - "expect(response.status).to.equal(202)", - "" + "expect(response.status).to.equal(202)" ] }, { "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(3)" ] }, { "id": 3, - "description": "Check that the response has an error code of 4001", + "description": "Check response has quote result for first transfer", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorCode).to.equal('2004')" + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" ] }, { "id": 4, - "description": "Check that the response has an error description of ID Not Found", + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check response has quote result for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition for second transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorDescription).to.equal('Server timed out')" + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" ] } ] @@ -812,21 +631,18 @@ "scripts": { "preRequest": { "exec": [ - "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" ] }, "postRequest": { "exec": [ - "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", - "console.log(acceptPartyCallback);", - "", - "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", - "", - "environment.acceptPartyCallback = acceptPartyCallback;", + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", "", - "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", + "console.log(acceptQuoteCallback)", "", - "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + "environment.acceptQuoteCallback = acceptQuoteCallback;" ] } } @@ -834,8 +650,8 @@ ] }, { - "id": 5, - "name": "5. Given there are 2 transfers in the bulk request, When one transfer has a succesful party lookup and the other has a failure, Then the PUT response should have details about both the transfers, And the response to PUT should only have one acceptParty.", + "id": 4, + "name": "TC-BQ4. Given there are 2 transfers in the bulk request and acceptParty is true for both the transfers, When the receiver fsp sends success response for first quote and failure for the second quote, Then the PUT response should have details of success and failure for both the quotes.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -869,14 +685,14 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, "from": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "16135551212" + "partyIdentifier": "bulkqtrcvrsendssuccessanderror" } }, "individualTransfers": [ @@ -885,7 +701,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "123456789" + "partyIdentifier": "123456789", + "fspId": "bulkqtrcvrsendssuccessanderror" } }, "amountType": "SEND", @@ -897,7 +714,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "iddoesnotexist" + "partyIdentifier": "123456789", + "fspId": "bulkqtrcvrsendssuccessanderror" } }, "amountType": "SEND", @@ -922,49 +740,14 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(requestVariables.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check response has the receiver fspid populated", - "exec": [ - "expect(environment.partySuccess.to.partyIdInfo.fspId).to.not.be.empty" - ] - }, - { - "id": 4, - "description": "Check response receiver first name is ReceiverFirst", - "exec": [ - "expect(environment.partySuccess.to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" - ] - }, - { - "id": 5, - "description": "Check response receiver last name is ReceiverLast", - "exec": [ - "expect(environment.partySuccess.to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" - ] - }, - { - "id": 6, - "description": "Check that the response has an error code of 4001", - "exec": [ - "expect(requestVariables.partyFailure.lastError.mojaloopError.errorCode).to.equal('4001')" - ] - }, - { - "id": 7, - "description": "Check that the response has an error description of ID Not Found", - "exec": [ - "expect(requestVariables.partyFailure.lastError.mojaloopError.errorDescription).to.equal('ID Not Found')" - ] - }, - { - "id": 8, "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", "exec": [ - "expect(requestVariables.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" ] } ] @@ -982,23 +765,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "requestVariables.acceptPartyCallback = acceptPartyCallback;", - "", - "acceptPartyCallback.body.individualTransferResults.forEach(individualTransferResult => {", - " if(individualTransferResult.to){", - " environment.partySuccess = individualTransferResult;", - " environment.acceptPartyCallback = individualTransferResult;", - " } else{", - " requestVariables.partyFailure = individualTransferResult;", - " }", - "});" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -1023,7 +797,12 @@ "individualTransfers": [ { "homeTransactionId": "abc456", - "transactionId": "{$environment.partySuccess.transactionId}", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", "acceptParty": true } ] @@ -1040,21 +819,21 @@ }, { "id": 2, - "description": "Check response has only one transfer result", + "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1);" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check response has quote result", + "description": "Check response has quote result for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" ] }, { "id": 4, - "description": "Check response has ilpPacket and condition", + "description": "Check response has ilpPacket and condition for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", "", @@ -1092,8 +871,8 @@ ] }, { - "id": 6, - "name": "6. Given there are 2 transfers in the bulk request, When one transfer has a succesful party lookup and the other has a timeout, Then the PUT response should have details about both the transfers, And the response to PUT should only have one acceptParty.", + "id": 5, + "name": "TC-BQ5. Given there are 2 transfers in the bulk request, When the sender fsp sends the acceptParty:true for 1 transfer and acceptParty:false for the second transfer, Then the PUT response should have details of the 1 quote for which the acceptParty:true response was sent.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -1127,7 +906,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -1143,7 +922,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "123456789" + "partyIdentifier": "123456789", + "fspId": "blkqtreceiver" } }, "amountType": "SEND", @@ -1155,7 +935,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "idtimesout" + "partyIdentifier": "123456789", + "fspId": "blkqtreceiver" } }, "amountType": "SEND", @@ -1180,49 +961,14 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(requestVariables.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check response has the receiver fspid populated", - "exec": [ - "expect(environment.partySuccess.to.partyIdInfo.fspId).to.not.be.empty" - ] - }, - { - "id": 4, - "description": "Check response receiver first name is ReceiverFirst", - "exec": [ - "expect(environment.partySuccess.to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" - ] - }, - { - "id": 5, - "description": "Check response receiver last name is ReceiverLast", - "exec": [ - "expect(environment.partySuccess.to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" - ] - }, - { - "id": 6, - "description": "Check that the response has an error code of 2004", - "exec": [ - "expect(requestVariables.partyFailure.lastError.mojaloopError.errorCode).to.equal('2004')" - ] - }, - { - "id": 7, - "description": "Check that the response has an error description of ID Not Found", - "exec": [ - "expect(requestVariables.partyFailure.lastError.mojaloopError.errorDescription).to.equal('Server timed out')" - ] - }, - { - "id": 8, "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", "exec": [ - "expect(requestVariables.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" ] } ] @@ -1240,23 +986,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "requestVariables.acceptPartyCallback = acceptPartyCallback;", - "", - "acceptPartyCallback.body.individualTransferResults.forEach(individualTransferResult => {", - " if(individualTransferResult.to){", - " environment.partySuccess = individualTransferResult;", - " environment.acceptPartyCallback = individualTransferResult;", - " } else{", - " requestVariables.partyFailure = individualTransferResult;", - " }", - "});" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -1281,8 +1018,13 @@ "individualTransfers": [ { "homeTransactionId": "abc456", - "transactionId": "{$environment.partySuccess.transactionId}", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": false } ] }, @@ -1298,21 +1040,21 @@ }, { "id": 2, - "description": "Check response has only one transfer result", + "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1);" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" ] }, { "id": 3, - "description": "Check response has quote result", + "description": "Check response has quote result for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" ] }, { "id": 4, - "description": "Check response has ilpPacket and condition", + "description": "Check response has ilpPacket and condition for first transfer", "exec": [ "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", "", @@ -1350,8 +1092,8 @@ ] }, { - "id": 7, - "name": "7. Given there are 2 transfers in the bulk request that has the same receiver id, When acceptParty is set to true for both the transfers in PUT request, Then the PUT response should have details about both the transfers for acceptQuote.", + "id": 6, + "name": "TC-BQ6. Given there are 2 transfers in the bulk request, When the sender fsp sends acceptParty:false for the both the quotes, Then the PUT response should have party details of the 2 transfers.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -1385,7 +1127,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -1402,7 +1144,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "receiverfsphas2ids" + "fspId": "blkqtreceiver" } }, "amountType": "SEND", @@ -1414,8 +1156,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "123456007", - "fspId": "receiverfsphas2ids" + "partyIdentifier": "123456789", + "fspId": "blkqtreceiver" } }, "amountType": "SEND", @@ -1465,18 +1207,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;", - "", - "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", - "", - "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -1502,12 +1240,12 @@ { "homeTransactionId": "abc456", "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", - "acceptParty": true + "acceptParty": false }, { "homeTransactionId": "abc456", "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", - "acceptParty": true + "acceptParty": false } ] }, @@ -1546,22 +1284,6 @@ }, { "id": 5, - "description": "Check response has quote result for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" - ] - }, - { - "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -1591,8 +1313,8 @@ ] }, { - "id": 8, - "name": "8. Given party lookup is skipped and bulk quotes request is submitted, When receiver fsp errors out while sending bulk quotes reponse, Then the PUT response should have error details about the transfer.", + "id": 7, + "name": "TC-BQ7. Given there are 2 transfers in the bulk request, When the sender fsp sends acceptParty:true for the one of the transfers and ignores the other, Then the PUT response should have party details of the 1 transfer for which the acceptParty response was sent.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -1633,7 +1355,7 @@ "from": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "16135551212" + "partyIdentifier": "receiverfsphas1id" } }, "individualTransfers": [ @@ -1643,12 +1365,25 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "bulkquotesreceiversendserror" + "fspId": "blkqtreceiver" } }, "amountType": "SEND", "currency": "USD", "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "blkqtreceiver" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" } ] }, @@ -1668,21 +1403,14 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check that the response has an error code of 4001", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.errorCode).to.equal('4001')" - ] - }, - { - "id": 4, - "description": "Check that the response has an error description of ID Not Found", + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.description).to.equal('ID Not Found')" + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" ] } ] @@ -1700,18 +1428,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;", - "", - "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", - "", - "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -1738,11 +1462,6 @@ "homeTransactionId": "abc456", "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", "acceptParty": true - }, - { - "homeTransactionId": "abc456", - "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", - "acceptParty": true } ] }, @@ -1760,7 +1479,7 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" ] }, { @@ -1781,22 +1500,6 @@ }, { "id": 5, - "description": "Check response has quote result for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" - ] - }, - { - "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -1826,8 +1529,8 @@ ] }, { - "id": 9, - "name": "9. Given party lookup is skipped and bulk quotes request is submitted, When receiver fsp sends response after timeout while sending bulk quotes reponse, Then the PUT response should have error details about timeout.", + "id": 8, + "name": "TC-BQ8. Given there are 2 transfers in the bulk request, When the sender fsp sends acceptParty:false for the one of the transfers and ignores the other, Then the PUT response should have party details of the 1 transfer for which the acceptParty response was sent.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -1878,12 +1581,25 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "bulkquotesreceiversendserror" + "fspId": "receiverfsphas1id" } }, "amountType": "SEND", "currency": "USD", "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" } ] }, @@ -1903,21 +1619,14 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check that the response has an error code of 4001", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.errorCode).to.equal('4001')" - ] - }, - { - "id": 4, - "description": "Check that the response has an error description of ID Not Found", + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.description).to.equal('ID Not Found')" + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" ] } ] @@ -1935,18 +1644,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;", - "", - "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", - "", - "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -1972,12 +1677,7 @@ { "homeTransactionId": "abc456", "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", - "acceptParty": true - }, - { - "homeTransactionId": "abc456", - "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", - "acceptParty": true + "acceptParty": false } ] }, @@ -1995,7 +1695,7 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(1)" ] }, { @@ -2016,22 +1716,6 @@ }, { "id": 5, - "description": "Check response has quote result for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" - ] - }, - { - "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -2061,8 +1745,8 @@ ] }, { - "id": 10, - "name": "10. Given party lookup is skipped and bulk quotes request having 2 transfers with same receiver fsp id is submitted, When receiver fsp sends response for only transfer out of the 2 while sending bulk quotes reponse, Then the PUT response should have error details about missing transfer.", + "id": 9, + "name": "TC-BQ9. Given there are 2 transfers in the bulk request with different receiver fsp ids, When one of the receivers sends an error, Then the PUT response should have details of the 2 transfers with success and failure details.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -2113,7 +1797,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "receiverfsphas1id" + "fspId": "bulkquotesreceiver" } }, "amountType": "SEND", @@ -2121,17 +1805,17 @@ "amount": "456.78" }, { - "homeTransactionId": "abc1", + "homeTransactionId": "abc2", "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "123456789", - "fspId": "receiverfsphas1id" + "partyIdentifier": "123456007", + "fspId": "bulkquotesreceiversendserror" } }, "amountType": "SEND", "currency": "USD", - "amount": "456.78" + "amount": "678.91" } ] }, @@ -2151,21 +1835,14 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(1)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { "id": 3, - "description": "Check that the response has an error code of 4001", - "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.errorCode).to.equal('4001')" - ] - }, - { - "id": 4, - "description": "Check that the response has an error description of ID Not Found", + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults[0].lastError.mojaloopError.errorInformation.description).to.equal('ID Not Found')" + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" ] } ] @@ -2309,8 +1986,8 @@ ] }, { - "id": 11, - "name": "11. When there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id and acceptParty is true for all the transfers, Then the PUT response should have details of all the 3 transfers for acceptQuote.", + "id": 10, + "name": "TC-BQ10. Given there are 2 transfers in the bulk request with different receiver fsp ids, When both the receivers sends an error, Then the PUT response should have details of the 2 transfers with failure details.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -2344,7 +2021,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -2361,7 +2038,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "receiverfsphas2ids" + "fspId": "bulkquotesreceiversendserror" } }, "amountType": "SEND", @@ -2374,20 +2051,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456007", - "fspId": "receiverfsphas2ids" - } - }, - "amountType": "SEND", - "currency": "USD", - "amount": "678.91" - }, - { - "homeTransactionId": "abc2", - "to": { - "partyIdInfo": { - "partyIdType": "MSISDN", - "partyIdentifier": "123456007", - "fspId": "receiverfsphas1id" + "fspId": "bulkquotesreceiversendserror2" } }, "amountType": "SEND", @@ -2412,7 +2076,7 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" ] }, { @@ -2502,38 +2166,6 @@ }, { "id": 3, - "description": "Check response has quote result for first transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" - ] - }, - { - "id": 4, - "description": "Check response has ilpPacket and condition for first transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 5, - "description": "Check response has quote result for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" - ] - }, - { - "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -2563,8 +2195,8 @@ ] }, { - "id": 12, - "name": "12. Given there are 3 transfers in the bulk request 2 of which that have the same receiver fsp id and the 3rd one has a different receiver fsp id, When the receiver with receiverhas1id times out sending the response, Then the PUT response should have details of all the 2 transfers from receiverfsphas2ids.", + "id": 11, + "name": "TC-BQ11. Given there are 2 transfers in the bulk request with different receiver fsp ids, When one of the receivers timesout, Then the PUT response should have details of the 2 transfers with success and timeout details.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -2598,7 +2230,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -2615,7 +2247,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "receiverfsphas2ids" + "fspId": "bulkquotesreceiver" } }, "amountType": "SEND", @@ -2628,20 +2260,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456007", - "fspId": "receiverfsphas2ids" - } - }, - "amountType": "SEND", - "currency": "USD", - "amount": "678.91" - }, - { - "homeTransactionId": "abc3", - "to": { - "partyIdInfo": { - "partyIdType": "MSISDN", - "partyIdentifier": "123456007", - "fspId": "receiverfsphas1id" + "fspId": "blkqtreceivertimesout" } }, "amountType": "SEND", @@ -2756,38 +2375,6 @@ }, { "id": 3, - "description": "Check response has quote result for first transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" - ] - }, - { - "id": 4, - "description": "Check response has ilpPacket and condition for first transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 5, - "description": "Check response has quote result for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" - ] - }, - { - "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", - "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", - "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" - ] - }, - { - "id": 7, "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" @@ -2817,8 +2404,8 @@ ] }, { - "id": 13, - "name": "13. Given there are 3 transfers in the bulk request all of which that have the same receiver fsp id, When the receiver fsp sends the response for only 2 transfers in the batch and not the third one, Then the PUT response should have details of all the 3 transfers with an error for the 3rd transfer that did not have any response.", + "id": 10, + "name": "TC-BQ10. Given there are 2 transfers in the bulk request, When the sender fsp sends the acceptParty:false for only 1 transfer and skips sending anything for the second transfer, Then the PUT response should not have details of any transfer.", "fileInfo": { "path": "ttk-testcases/mvp-bulk.json" }, @@ -2852,7 +2439,7 @@ "autoAcceptQuote": { "enabled": false }, - "skipPartyLookup": false, + "skipPartyLookup": true, "synchronous": false, "bulkExpiration": "2016-05-24T08:38:08.699-04:00" }, @@ -2869,7 +2456,7 @@ "partyIdInfo": { "partyIdType": "MSISDN", "partyIdentifier": "123456789", - "fspId": "receiverfsphas2ids" + "fspId": "receiverfsphas1id" } }, "amountType": "SEND", @@ -2881,21 +2468,8 @@ "to": { "partyIdInfo": { "partyIdType": "MSISDN", - "partyIdentifier": "123456007", - "fspId": "receiverfsphas2ids" - } - }, - "amountType": "SEND", - "currency": "USD", - "amount": "678.91" - }, - { - "homeTransactionId": "abc3", - "to": { - "partyIdInfo": { - "partyIdType": "MSISDN", - "partyIdentifier": "123456007", - "fspId": "receiverfsphas2ids" + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" } }, "amountType": "SEND", @@ -2920,7 +2494,7 @@ "id": 2, "description": "Check number of returned transfers", "exec": [ - "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" ] }, { @@ -2945,18 +2519,14 @@ "", "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", "", - "environment.acceptPartyCallback = acceptPartyCallback;", - "", - "environment.individualTransferId1 = acceptPartyCallback.body.individualTransferResults[0].transactionId;", - "", - "environment.individualTransferId2 = acceptPartyCallback.body.individualTransferResults[1].transactionId;" + "environment.acceptPartyCallback = acceptPartyCallback;" ] } } }, { "id": 2, - "description": "put bulk transaction", + "description": "put bulk transaction for acceptParty", "apiVersion": { "minorVersion": 0, "majorVersion": 1, @@ -3026,25 +2596,130 @@ }, { "id": 5, - "description": "Check response has quote result for second transfer", + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse).to.exist;" + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" ] }, { "id": 6, - "description": "Check response has ilpPacket and condition for second transfer", + "description": "Check response has ilpPacket and condition", "exec": [ - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.ilpPacket).to.not.be.empty;", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", "", - "expect(environment.acceptQuoteCallback.body.individualTransferResults[1].quoteResponse.condition).to.not.be.empty;" + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" ] }, { "id": 7, - "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "description": "Check response has fulfillment", "exec": [ - "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" ] } ] @@ -3054,21 +2729,22 @@ "exec": [ "console.log(environment.bulkTransactionId)", "", - "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" ] }, "postRequest": { "exec": [ - "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", "", - "console.log(acceptQuoteCallback)", + "console.log(transfersCallback)", "", - "environment.acceptQuoteCallback = acceptQuoteCallback;" + "environment.transfersCallback = transfersCallback;" ] } } } ] } + ] } \ No newline at end of file diff --git a/test/func/ttk-testcases/bulk-transfers-error-cases.json b/test/func/ttk-testcases/bulk-transfers-error-cases.json new file mode 100644 index 000000000..530b06169 --- /dev/null +++ b/test/func/ttk-testcases/bulk-transfers-error-cases.json @@ -0,0 +1,1364 @@ +{ + "name": "Transfers related error cases", + "test_cases": [ + { + "id": 1, + "name": "TC-BT1. Given partyLookup is skipped And there are 2 transfers with the same receiver fspid in the request and acceptParty, acceptQuote is true for both the requests, When the receiver fsp fails the entire transfer batch, Then the callback response should have the party and quote results and a failure for transfer", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "blktrfrrcvrfailsbatch" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsphastwoids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsphastwoids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 7, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()+120000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": false + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response receiver first name is ReceiverFirst", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.personalInfo.complexName.firstName).to.equal('ReceiverFirst')" + ] + }, + { + "id": 6, + "description": "Check response receiver last name is ReceiverLast", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.personalInfo.complexName.lastName).to.equal('ReceiverLast')" + ] + }, + { + "id": 7, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 10, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 11, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 3, + "name": "BT-3. Given partyLookup is skipped And there are 2 transfers with the same receiver fspid in the request, And acceptParty, acceptQuote is true for both the requests , When Payee fsp sends response for only one of the transfers instead of 2 transfers, Then the callback response should only have the party and quote results for the transfer that payee fsp did not send the response and for the other transfer where payee fsp sent the transfer response should has party, quote and transfer results", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 4, + "name": "TC-BT4. Given partyLookup is skipped And there are 2 transfers with the same receiver fspid in the request, And acceptParty, acceptQuote is true for both the requests , When Payee fsp sends success response for one of the transfers and a failure response for the other transfer, Then the callback response should have the party and quote results for the transfer that payee fsp sent failure response and for the other transfer where payee fsp sent the transfer response should has party, quote and transfer results", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "blktrrcvrsendssuccessanderror" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "bulktransferresponsehas1error" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "bulktransferresponsehas1error" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 5, + "name": "TC-BT5. Given partyLookup is skipped And there are 2 transfers with the same receiver fspid in the request, And acceptParty is true for both the transfers And acceptQuote is false for one of the requests and true for the other request, Then the callback response should only have the party and quote results for the transfer that has acceptQuote false and for the other transfer has party, quote and transfer results", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "2016-05-24T08:38:08.699-04:00" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "456.78" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas1id" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + }, + { + "homeTransactionId": "abc2", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "123456789", + "fspId": "receiverfsphas2ids" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "678.91" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(3)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition for first transfer", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptQuote": false + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(1)" + ] + }, + { + "id": 3, + "description": "Check response MSISDN is same as in the request", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.partyIdentifier).to.equal('56781234')" + ] + }, + { + "id": 4, + "description": "Check response has the receiver fspid populated", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].to.partyIdInfo.fspId).to.not.be.empty" + ] + }, + { + "id": 5, + "description": "Check response has quote result", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 6, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.transfersCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 7, + "description": "Check response has fulfillment", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.fulfilment).to.exist;" + ] + }, + { + "id": 8, + "description": "Check response has COMPLETED state", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults[0].fulfil.transferState).to.equal('COMMITTED');" + ] + }, + { + "id": 9, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/test/func/ttk-testcases/high-volume-bulk.json b/test/func/ttk-testcases/high-volume-bulk.json new file mode 100644 index 000000000..5c6a04b32 --- /dev/null +++ b/test/func/ttk-testcases/high-volume-bulk.json @@ -0,0 +1,1467 @@ +{ + "name": "Bulk Testing with large volume", + "test_cases": [ + { + "id": 1, + "name": "1. TC with 50 bulk transfers", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp1" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp2" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp3" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp4" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp5" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp6" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp7" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp8" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp9" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp10" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp11" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp12" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp13" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp14" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp15" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp16" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp17" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp18" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp19" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp20" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp21" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp22" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp23" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp24" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp25" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp26" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp27" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp28" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp29" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp30" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp31" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp32" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp33" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp34" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp35" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp36" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp37" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp38" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp39" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp40" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp41" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp42" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp43" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp44" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp45" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp46" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp47" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp48" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp49" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp50" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(50)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()+120000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[2].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[3].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[4].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[5].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[6].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[7].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[8].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[9].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[10].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[11].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[12].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[13].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[14].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[15].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[16].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[17].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[18].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[19].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[20].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[21].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[22].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[23].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[24].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[25].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[26].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[27].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[28].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[29].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[30].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[31].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[32].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[33].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[34].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[35].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[36].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[37].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[38].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[39].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[40].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[41].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[42].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[43].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[44].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[45].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[46].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[47].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[48].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[49].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(50)" + ] + }, + { + "id": 3, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(50)" + ] + }, + { + "id": 3, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + }, + { + "id": 2, + "name": "2. TC with 3 bulk transfers", + "fileInfo": { + "path": "ttk-testcases/mvp-bulk.json" + }, + "requests": [ + { + "id": 1, + "description": "Post /bulkTransaction", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions", + "path": "/bulkTransactions", + "method": "post", + "body": { + "bulkHomeTransactionID": "abc123", + "bulkTransactionId": "{$function.generic.generateUUID}", + "options": { + "onlyValidateParty": true, + "autoAcceptParty": { + "enabled": false + }, + "autoAcceptQuote": { + "enabled": false + }, + "skipPartyLookup": true, + "synchronous": false, + "bulkExpiration": "{$requestVariables.bulkTimeout}" + }, + "from": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "16135551212" + } + }, + "individualTransfers": [ + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp1" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + }, + { + "homeTransactionId": "abc1", + "to": { + "partyIdInfo": { + "partyIdType": "MSISDN", + "partyIdentifier": "56781234", + "fspId": "receiverfsp2" + } + }, + "amountType": "SEND", + "currency": "USD", + "amount": "123.45" + } + ] + }, + "url": "http://payer-sdk-api-svc:4001", + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)", + "" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptPartyCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check current state is WAITING_FOR_PARTY_ACCEPTANCE", + "exec": [ + "expect(environment.acceptPartyCallback.body.currentState).to.equal('WAITING_FOR_PARTY_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "requestVariables.bulkTimeout = (new Date(Date.now()+120000)).toISOString()", + "await inboundEvent.addListener('acceptPartyCallback', 'put', '/bulkTransactions/{$request.body.bulkTransactionId}')" + ] + }, + "postRequest": { + "exec": [ + "const acceptPartyCallback = await inboundEvent.getMessage('acceptPartyCallback')", + "console.log(acceptPartyCallback);", + "", + "environment.bulkTransactionId = acceptPartyCallback.body.bulkTransactionId;", + "", + "environment.acceptPartyCallback = acceptPartyCallback;" + ] + } + } + }, + { + "id": 2, + "description": "put bulk transaction for acceptParty", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptParty": true + }, + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[1].transactionId}", + "acceptParty": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check response has quote result", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse).to.exist;" + ] + }, + { + "id": 4, + "description": "Check response has ilpPacket and condition", + "exec": [ + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.ilpPacket).to.not.be.empty;", + "", + "expect(environment.acceptQuoteCallback.body.individualTransferResults[0].quoteResponse.condition).to.not.be.empty;" + ] + }, + { + "id": 5, + "description": "Check state is WAITING_FOR_QUOTE_ACCEPTANCE", + "exec": [ + "expect(environment.acceptQuoteCallback.body.currentState).to.equal('WAITING_FOR_QUOTE_ACCEPTANCE')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('acceptQuoteCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const acceptQuoteCallback = await inboundEvent.getMessage('acceptQuoteCallback')", + "", + "console.log(acceptQuoteCallback)", + "", + "environment.acceptQuoteCallback = acceptQuoteCallback;" + ] + } + } + }, + { + "id": 3, + "description": "put bulk transaction for acceptQuote", + "apiVersion": { + "minorVersion": 0, + "majorVersion": 1, + "type": "scheme_adapter_outbound", + "prefix": "/sdk-out", + "hostnames": [], + "specFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml", + "callbackMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/callback_map.json", + "responseMapFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json", + "jsfRefFile": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json", + "triggerTemplatesFolder": "spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/trigger_templates" + }, + "operationPath": "/bulkTransactions/{bulkTransactionId}", + "path": "/bulkTransactions/{$prev.1.request.body.bulkTransactionId}", + "method": "put", + "params": { + "bulkTransactionId": "{$prev.1.request.body.bulkTransactionId}" + }, + "url": "http://payer-sdk-api-svc:4001", + "body": { + "bulkHomeTransactionID": "{$prev.1.request.body.bulkHomeTransactionID}", + "individualTransfers": [ + { + "homeTransactionId": "abc456", + "transactionId": "{$environment.acceptPartyCallback.body.individualTransferResults[0].transactionId}", + "acceptQuote": true + } + ] + }, + "scriptingEngine": "javascript", + "tests": { + "assertions": [ + { + "id": 1, + "description": "Check Return Status Code", + "exec": [ + "expect(response.status).to.equal(202)" + ] + }, + { + "id": 2, + "description": "Check number of returned transfers", + "exec": [ + "expect(environment.transfersCallback.body.individualTransferResults.length).to.equal(2)" + ] + }, + { + "id": 3, + "description": "Check overall bulk transaction state is COMPLETED", + "exec": [ + "expect(environment.transfersCallback.body.currentState).to.equal('COMPLETED')" + ] + } + ] + }, + "scripts": { + "preRequest": { + "exec": [ + "console.log(environment.bulkTransactionId)", + "", + "await inboundEvent.addListener('transfersCallback', 'put', `/bulkTransactions/${environment.bulkTransactionId}`)" + ] + }, + "postRequest": { + "exec": [ + "const transfersCallback = await inboundEvent.getMessage('transfersCallback')", + "", + "console.log(transfersCallback)", + "", + "environment.transfersCallback = transfersCallback;" + ] + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 2e672d8de..79d153bdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -92,58 +92,21 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/compat-data@npm:7.18.8" - checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/compat-data@npm:7.18.6" - checksum: fd73a1bd7bc29be5528d2ef78248929ed3ee72e0edb69cef6051e0aad0bf8087594db6cd9e981f0d7f5bfc274fdbb77306d8abea8ceb71e95c18afc3ebd81828 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/compat-data@npm:7.19.0" - checksum: f90d25a3779578c230ad0632e12ffd5ee1033614dee2786f7f1567823a78923da7185638eedd7166f31e4771a3398ae6a28ab8e680b96cc25bafb38a3b66ff11 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.19.3": +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.19.3": version: 7.19.3 resolution: "@babel/compat-data@npm:7.19.3" checksum: e6014cdb31f3e893a1bde6dd3ae05c8f946778318fa337b18b546ace6f9c9f7a5033fd9447070ebc8e820fa9fc7e0a30d4e354989e091900305a876b44346c8f languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.18.6 - resolution: "@babel/core@npm:7.18.6" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.6 - "@babel/helper-compilation-targets": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helpers": ^7.18.6 - "@babel/parser": ^7.18.6 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.18.6 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.1 - semver: ^6.3.0 - checksum: 711459ebf7afab7b8eff88b7155c3f4a62690545f1c8c2eb6ba5ebaed01abeecb984cf9657847a2151ad24a5645efce765832aa343ce0f0386f311b67b59589a +"@babel/compat-data@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/compat-data@npm:7.19.4" + checksum: 757fdaeb6756c2d323ff56f60fb8e670292108cda6abf762a56c0d40910ecc4d2c7e283dbdfbcee6bc28c74ad659144352609e1cb49d31e101ab13ea5ce90072 languageName: node linkType: hard -"@babel/core@npm:^7.19.3": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.19.3": version: 7.19.3 resolution: "@babel/core@npm:7.19.3" dependencies: @@ -166,51 +129,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.18.10": - version: 7.18.12 - resolution: "@babel/generator@npm:7.18.12" - dependencies: - "@babel/types": ^7.18.10 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 07dd71d255144bb703a80ab0156c35d64172ce81ddfb70ff24e2be687b052080233840c9a28d92fa2c33f7ecb8a8b30aef03b807518afc53b74c7908bf8859b1 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.18.6, @babel/generator@npm:^7.7.2": - version: 7.18.7 - resolution: "@babel/generator@npm:7.18.7" - dependencies: - "@babel/types": ^7.18.7 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: aad4b6873130165e9483af2888bce5a3a5ad9cca0757fc90ae11a0396757d0b295a3bff49282c8df8ab01b31972cc855ae88fd9ddc9ab00d9427dc0e01caeea9 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/generator@npm:7.18.9" - dependencies: - "@babel/types": ^7.18.9 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 1c271e0c6f33e59f7845d88a1b0b9b0dce88164e80dec9274a716efa54c260e405e9462b160843e73f45382bf5b24d8e160e0121207e480c29b30e2ed0eb16d4 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/generator@npm:7.19.0" - dependencies: - "@babel/types": ^7.19.0 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: aa3d5785cf8f8e81672dcc61aef351188efeadb20d9f66d79113d82cbcf3bbbdeb829989fa14582108572ddbc4e4027bdceb06ccaf5ec40fa93c2dda8fbcd4aa - languageName: node - linkType: hard - -"@babel/generator@npm:^7.19.3": +"@babel/generator@npm:^7.19.3, @babel/generator@npm:^7.7.2": version: 7.19.3 resolution: "@babel/generator@npm:7.19.3" dependencies: @@ -231,58 +150,16 @@ __metadata: linkType: hard "@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.6" - dependencies: - "@babel/helper-explode-assignable-expression": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: c4d71356e0adbc20ce9fe7c1e1181ff65a78603f8bba7615745f0417fed86bad7dc0a54a840bc83667c66709b3cb3721edcb9be0d393a298ce4e9eb6d085f3c1 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9": version: 7.18.9 - resolution: "@babel/helper-compilation-targets@npm:7.18.9" + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.20.2 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-compilation-targets@npm:7.18.6" - dependencies: - "@babel/compat-data": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.20.2 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f09ddaddc83c241cb7a040025e2ba558daa1c950ce878604d91230aed8d8a90f10dfd5bb0b67bc5b3db8af1576a0d0dac1d65959a06a17259243dbb5730d0ed1 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-compilation-targets@npm:7.19.0" - dependencies: - "@babel/compat-data": ^7.19.0 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.20.2 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 5f1be9811d53a5e43eb4b9b402517dec79bfa3a55e9fbc131a106914a78b435bc08a4b35591e424665c36c2c1eceb864ec2ca2c2f3dcf240a1551a28530428f9 + "@babel/helper-explode-assignable-expression": ^7.18.6 + "@babel/types": ^7.18.9 + checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.19.3": +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.0, @babel/helper-compilation-targets@npm:^7.19.3": version: 7.19.3 resolution: "@babel/helper-compilation-targets@npm:7.19.3" dependencies: @@ -297,35 +174,23 @@ __metadata: linkType: hard "@babel/helper-create-class-features-plugin@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-create-class-features-plugin@npm:7.18.6" + version: 7.19.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-function-name": ^7.18.6 - "@babel/helper-member-expression-to-functions": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.6 + "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 4d6da441ce329867338825c044c143f0b273cbfc6a20b9099e824a46f916584f44eabab073f78f02047d86719913e8f1a8bd72f42099ebe52691c29fabb992e4 + checksum: f0c6fb77b6f113d70f308e7093f60dd465b697818badf5df0519d8dd12b6bfb1f4ad300b923207ce9f9c1c940ef58bff12ac4270c0863eadf9e303b7dd6d01b6 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.1.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2d76e660cbfd0bfcb01ca9f177f0e9091c871a6b99f68ece6bcf4ab4a9df073485bdc2d87ecdfbde44b7f3723b26d13085d0f92082adb3ae80d31b246099f10a - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.19.0": +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" dependencies: @@ -353,13 +218,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-environment-visitor@npm:7.18.6" - checksum: 64fce65a26efb50d2496061ab2de669dc4c42175a8e05c82279497127e5c542538ed22b38194f6f5a4e86bed6ef5a4890aed23408480db0555728b4ca660fc9c - languageName: node - linkType: hard - "@babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" @@ -376,27 +234,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-function-name@npm:7.18.6" - dependencies: - "@babel/template": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: bf84c2e0699aa07c3559d4262d199d4a9d0320037c2932efe3246866c3e01ce042c9c2131b5db32ba2409a9af01fb468171052819af759babc8ca93bdc6c9aeb - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-function-name@npm:7.18.9" - dependencies: - "@babel/template": ^7.18.6 - "@babel/types": ^7.18.9 - checksum: d04c44e0272f887c0c868651be7fc3c5690531bea10936f00d4cca3f6d5db65e76dfb49e8d553c42ae1fe1eba61ccce9f3d93ba2df50a66408c8d4c3cc61cf0c - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.19.0": +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-function-name@npm:7.19.0" dependencies: @@ -415,15 +253,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-member-expression-to-functions@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: 20c8e82d2375534dfe4d4adeb01d94906e5e616143bb2775e9f1d858039d87a0f79220e0a5c2ed410c54ccdeda47a4c09609b396db1f98fe8ce9e420894ac2f3 - languageName: node - linkType: hard - "@babel/helper-member-expression-to-functions@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" @@ -442,23 +271,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-transforms@npm:7.18.6" - dependencies: - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.18.6 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: 75d90be9ecd314fe2f1b668ce065d7e8b3dff82eddea88480259c5d4bd54f73a909d0998909ffe734a44ba8be85ba233359033071cc800db209d37173bd26db2 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.19.0": +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-module-transforms@npm:7.19.0" dependencies: @@ -483,42 +296,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.18.6 - resolution: "@babel/helper-plugin-utils@npm:7.18.6" - checksum: 3dbfceb6c10fdf6c78a0e57f24e991ff8967b8a0bd45fe0314fb4a8ccf7c8ad4c3778c319a32286e7b1f63d507173df56b4e69fb31b71e1b447a73efa1ca723e - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-plugin-utils@npm:7.18.9" - checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.19.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.19.0 resolution: "@babel/helper-plugin-utils@npm:7.19.0" checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-remap-async-to-generator@npm:7.18.6" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-wrap-function": ^7.18.6 - "@babel/types": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 83e890624da9413c74a8084f6b5f7bfe93abad8a6e1a33464f3086e2a1336751672e6ac6d74dddd35b641d19584cc0f93d02c52a4f33385b3be5b40942fe30da - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.18.9": +"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -532,29 +317,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-replace-supers@npm:7.18.6" - dependencies: - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-member-expression-to-functions": ^7.18.6 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: 48e869dc8d3569136d239cd6354687e49c3225b114cb2141ed3a5f31cff5278f463eb25913df3345489061f377ad5d6e49778bddedd098fa8ee3adcec07cc1d3 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-replace-supers@npm:7.18.9" +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": + version: 7.19.1 + resolution: "@babel/helper-replace-supers@npm:7.19.1" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 + "@babel/traverse": ^7.19.1 + "@babel/types": ^7.19.0 + checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 languageName: node linkType: hard @@ -592,14 +364,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-identifier@npm:7.18.6" - checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648 +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.19.1": +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a @@ -613,38 +385,15 @@ __metadata: languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-wrap-function@npm:7.18.6" - dependencies: - "@babel/helper-function-name": ^7.18.6 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: b7a4f59b302ed77407e5c2005d8677ebdeabbfa69230e15f80b5e06cc532369c1e48399ec3e67dd3341e7ab9b3f84f17a255e2c1ec4e0d42bb571a4dac5472d6 - languageName: node - linkType: hard - "@babel/helper-wrap-function@npm:^7.18.9": - version: 7.18.11 - resolution: "@babel/helper-wrap-function@npm:7.18.11" + version: 7.19.0 + resolution: "@babel/helper-wrap-function@npm:7.19.0" dependencies: - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/template": ^7.18.10 - "@babel/traverse": ^7.18.11 - "@babel/types": ^7.18.10 - checksum: e2fb909cdeb5c8688513261202cdeab7c6a8ac1f30daa5a1e0111631f270c26118c2e6b27014fc9f5d2c0ee1182fc40a3db2d30e45425587067f49dcae737dc9 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helpers@npm:7.18.6" - dependencies: - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: 5dea4fa53776703ae4190cacd3f81464e6e00cf0b6908ea9b0af2b3d9992153f3746dd8c33d22ec198f77a8eaf13a273d83cd8847f7aef983801e7bfafa856ec + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 2453a6b134f12cc779179188c4358a66252c29b634a8195c0cf626e17f9806c3c4c40e159cd8056c2ec82b69b9056a088014fa43d6ccc1aca67da8d9605da8fd languageName: node linkType: hard @@ -670,43 +419,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/parser@npm:7.18.6" - bin: - parser: ./bin/babel-parser.js - checksum: 533ffc26667b7e2e0d87ae11368d90b6a3a468734d6dfe9c4697c24f48373cf9cc35ee08e416728f087fc56531b68022f752097941feddc60e0223d69a4d4cad - languageName: node - linkType: hard - -"@babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.11": - version: 7.18.11 - resolution: "@babel/parser@npm:7.18.11" - bin: - parser: ./bin/babel-parser.js - checksum: 5ecc75b83e62ec53a947b1635a6ca75d6210d4a4f962f9f16f4239a6783f98e57f9662b598fa2fb1b8e12c0ad5c2bd86846ed0b97b85eb73dd7498b3a6d71a4b - languageName: node - linkType: hard - -"@babel/parser@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/parser@npm:7.18.9" - bin: - parser: ./bin/babel-parser.js - checksum: 81a966b334e3ef397e883c64026265a5ae0ad435a86f52a84f60a5ee1efc0738c1f42c55e0dc5f191cc6a83ba0c61350433eee417bf1dff160ca5f3cfde244c6 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/parser@npm:7.19.0" - bin: - parser: ./bin/babel-parser.js - checksum: af86d829bfeb60e0dcf54a43489c2514674b6c8d9bb24cf112706772125752fcd517877ad30501d533fa85f70a439d02eebeec3be9c2e95499853367184e0da7 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.19.3": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.3": version: 7.19.3 resolution: "@babel/parser@npm:7.19.3" bin: @@ -850,18 +563,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" +"@babel/plugin-proposal-object-rest-spread@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.19.4" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.19.4 + "@babel/helper-compilation-targets": ^7.19.3 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 "@babel/plugin-transform-parameters": ^7.18.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 66b9bae741d46edf1c96776d26dfe5d335981e57164ec2450583e3d20dfaa08a5137ffebb897e443913207789f9816bfec4ae845f38762c0196a60949eaffdba + checksum: 90a2a59da305e6c8c83831e16079193df33d727a77a90972e286af2c8c0295fddb91b0978b88f16f63080d08a82b08ce3ee82a88b0488b3c51decc73c1d35786 languageName: node linkType: hard @@ -1172,14 +885,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" +"@babel/plugin-transform-block-scoping@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/plugin-transform-block-scoping@npm:7.19.4" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f8064ea431eb7aa349dc5b6be87a650f912b48cd65afde917e8644f6f840d7f9d2ce4795f2aa3955aa5b23a73d4ad38abd03386ae109b4b8702b746c6d35bda3 + checksum: 86353ccbb57b4a0513ac2b1209271858f9c3f2c56b15a6225ff5f1c97ffb1c48f8984046a718a9835ecdae100cbe80ed0b9ca15a5554e33386671b56a8cd887c languageName: node linkType: hard @@ -1213,14 +926,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.18.13": - version: 7.18.13 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" +"@babel/plugin-transform-destructuring@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/plugin-transform-destructuring@npm:7.19.4" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 83e44ec93a4cfbf69376db8836d00ec803820081bf0f8b6cea73a9b3cd320b8285768d5b385744af4a27edda4b6502245c52d3ed026ea61356faf57bfe78effb + checksum: 0ca40f6abf7273dafefb7a1cc11fef2b9ab3edbd23188cdcff8cd5e30783b89d64e7813e44aae9efab417b90972ae80971bf6c4130eeeb112bcfb44100c72657 languageName: node linkType: hard @@ -1518,11 +1231,11 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.19.3": - version: 7.19.3 - resolution: "@babel/preset-env@npm:7.19.3" +"@babel/preset-env@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/preset-env@npm:7.19.4" dependencies: - "@babel/compat-data": ^7.19.3 + "@babel/compat-data": ^7.19.4 "@babel/helper-compilation-targets": ^7.19.3 "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-option": ^7.18.6 @@ -1537,7 +1250,7 @@ __metadata: "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.18.9 + "@babel/plugin-proposal-object-rest-spread": ^7.19.4 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 "@babel/plugin-proposal-optional-chaining": ^7.18.9 "@babel/plugin-proposal-private-methods": ^7.18.6 @@ -1561,10 +1274,10 @@ __metadata: "@babel/plugin-transform-arrow-functions": ^7.18.6 "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.18.9 + "@babel/plugin-transform-block-scoping": ^7.19.4 "@babel/plugin-transform-classes": ^7.19.0 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.13 + "@babel/plugin-transform-destructuring": ^7.19.4 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -1591,7 +1304,7 @@ __metadata: "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.19.3 + "@babel/types": ^7.19.4 babel-plugin-polyfill-corejs2: ^0.3.3 babel-plugin-polyfill-corejs3: ^0.6.0 babel-plugin-polyfill-regenerator: ^0.4.1 @@ -1599,7 +1312,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f967cf48fa54f4b87cfd6dcad0d8c6249379af55c657f7519d2e3538ebb5e3f73b465677d88a6730e569f45150a2966e14b43bd1134d434a12ca351c14381871 + checksum: f12af25281f3c5e7df60fa1e79ad481ddd7f6a111d4c0fabcffdabf0eaed3a01b4f8c647ae5445ed1f58df70f52083ffd283e8919ade7afa73801a49c733d22c languageName: node linkType: hard @@ -1619,15 +1332,15 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.8.4": - version: 7.18.6 - resolution: "@babel/runtime@npm:7.18.6" + version: 7.19.0 + resolution: "@babel/runtime@npm:7.19.0" dependencies: regenerator-runtime: ^0.13.4 - checksum: 8b707b64ae0524db617d0c49933b258b96376a38307dc0be8fb42db5697608bcc1eba459acce541e376cff5ed5c5287d24db5780bd776b7c75ba2c2e26ff8a2c + checksum: fa69c351bb05e1db3ceb9a02fdcf620c234180af68cdda02152d3561015f6d55277265d3109815992f96d910f3db709458cae4f8df1c3def66f32e0867d82294 languageName: node linkType: hard -"@babel/template@npm:^7.18.10": +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.3.3": version: 7.18.10 resolution: "@babel/template@npm:7.18.10" dependencies: @@ -1638,90 +1351,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": - version: 7.18.6 - resolution: "@babel/template@npm:7.18.6" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: cb02ed804b7b1938dbecef4e01562013b80681843dd391933315b3dd9880820def3b5b1bff6320d6e4c6a1d63d1d5799630d658ec6b0369c5505e7e4029c38fb - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.11": - version: 7.18.11 - resolution: "@babel/traverse@npm:7.18.11" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.10 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.18.11 - "@babel/types": ^7.18.10 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 727409464d5cf27f33555010098ce9bb435f0648cc76e674f4fb7513522356655ba62be99c8df330982b391ccf5f0c0c23c7bd7453d4936d47e2181693fed14c - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.6, @babel/traverse@npm:^7.7.2": - version: 7.18.6 - resolution: "@babel/traverse@npm:7.18.6" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-function-name": ^7.18.6 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.18.6 - "@babel/types": ^7.18.6 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 5427a9db63984b2600f62b257dab18e3fc057997b69d708573bfc88eb5eacd6678fb24fddba082d6ac050734b8846ce110960be841ea1e461d66e2cde72b6b07 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/traverse@npm:7.18.9" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.9 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.18.9 - "@babel/types": ^7.18.9 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 0445a51952ea1664a5719d9b1f8bf04be6f1933bcf54915fecc544c844a5dad2ac56f3b555723bbf741ef680d7fd64f6a5d69cfd08d518a4089c79a734270162 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/traverse@npm:7.19.0" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.0 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.19.0 - "@babel/types": ^7.19.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: dcbd1316c9f4bf3cefee45b6f5194590563aa5d123500a60d3c8d714bef279205014c8e599ebafc469967199a7622e1444cd0235c16d4243da437e3f1281771e - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.19.3": +"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.19.3, @babel/traverse@npm:^7.7.2": version: 7.19.3 resolution: "@babel/traverse@npm:7.19.3" dependencies: @@ -1739,56 +1369,25 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.18.7 - resolution: "@babel/types@npm:7.18.7" - dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - to-fast-properties: ^2.0.0 - checksum: 3114ce161c4ebcb70271e168aa5af5cecedf3278209161d5ba6124bd3f9cb02e3f3ace587ad1b53f7baa153b6b3714720721c72a9ef3ec451663862f9cc1f014 - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/types@npm:7.18.10" - dependencies: - "@babel/helper-string-parser": ^7.18.10 - "@babel/helper-validator-identifier": ^7.18.6 - to-fast-properties: ^2.0.0 - checksum: 11632c9b106e54021937a6498138014ebc9ad6c327a07b2af3ba8700773945aba4055fd136431cbe3a500d0f363cbf9c68eb4d6d38229897c5de9d06e14c85e8 - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/types@npm:7.18.9" - dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - to-fast-properties: ^2.0.0 - checksum: f0e0147267895fd8a5b82133e711ce7ce99941f3ce63647e0e3b00656a7afe48a8aa48edbae27543b701794d2b29a562a08f51f88f41df401abce7c3acc5e13a - languageName: node - linkType: hard - -"@babel/types@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/types@npm:7.19.0" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.19.3 + resolution: "@babel/types@npm:7.19.3" dependencies: "@babel/helper-string-parser": ^7.18.10 - "@babel/helper-validator-identifier": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: 9b346715a68aeede70ba9c685a144b0b26c53bcd595d448e24c8fa8df4d5956a5712e56ebadb7c85dcc32f218ee42788e37b93d50d3295c992072224cb3ef3fe + checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77 languageName: node linkType: hard -"@babel/types@npm:^7.19.3": - version: 7.19.3 - resolution: "@babel/types@npm:7.19.3" +"@babel/types@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/types@npm:7.19.4" dependencies: - "@babel/helper-string-parser": ^7.18.10 + "@babel/helper-string-parser": ^7.19.4 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77 + checksum: 4032f6407093f80dd4f4764be676f7527d2a5c0381586967cd79683cf8af01cdc16745a381b9cef045f702f0c9b0dffd880d84ee55dad59ba01bd23d5d52a8e0 languageName: node linkType: hard @@ -1826,9 +1425,9 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.3.2": - version: 1.3.2 - resolution: "@eslint/eslintrc@npm:1.3.2" +"@eslint/eslintrc@npm:^1.3.3": + version: 1.3.3 + resolution: "@eslint/eslintrc@npm:1.3.3" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -1839,7 +1438,7 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 2074dca47d7e1c5c6323ff353f690f4b25d3ab53fe7d27337e2592d37a894cf60ca0e85ca66b50ff2db0bc7e630cc1e9c7347d65bb185b61416565584c38999c + checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694 languageName: node linkType: hard @@ -1913,9 +1512,9 @@ __metadata: linkType: hard "@hapi/hoek@npm:10.x.x, @hapi/hoek@npm:^10.0.0": - version: 10.0.0 - resolution: "@hapi/hoek@npm:10.0.0" - checksum: d665c61b0a12b017ec442eea441e698c5ed0752b4f092b2494f6507da359996447113838702eb072ea161ba85cb8dbac339b6c8d65e0eab3f39aa712e4346922 + version: 10.0.1 + resolution: "@hapi/hoek@npm:10.0.1" + checksum: 6dbcd7ae138fc751b2d81169516668bc6e4b878bb2bfdfab5eb3d51fdfd361544cc791ff12375587bf71dbeb801810cd62105f5d744dfa457140fb1709bbea6f languageName: node linkType: hard @@ -1964,20 +1563,13 @@ __metadata: linkType: hard "@humanwhocodes/config-array@npm:^0.10.5": - version: 0.10.5 - resolution: "@humanwhocodes/config-array@npm:0.10.5" + version: 0.10.7 + resolution: "@humanwhocodes/config-array@npm:0.10.7" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 minimatch: ^3.0.4 - checksum: af4fa2633c57414be22ddba0a072cc611ef9a07104542fa24bde918a0153b89b6e08ca6a20ccc9079de6079e219e2406e38414d1b662db8bb59a3ba9d6eee6e3 - languageName: node - linkType: hard - -"@humanwhocodes/gitignore-to-minimatch@npm:^1.0.2": - version: 1.0.2 - resolution: "@humanwhocodes/gitignore-to-minimatch@npm:1.0.2" - checksum: aba5c40c9e3770ed73a558b0bfb53323842abfc2ce58c91d7e8b1073995598e6374456d38767be24ab6176915f0a8d8b23eaae5c85e2b488c0dccca6d795e2ad + checksum: 009d64be8d5bd098ff04e10af79e34f5633245250581fca032fac12a8667b2df8e7d169e69c05bff4d83ea3dd3c7d2d0e05ea9b94d89a7d092e26530caf6f8a3 languageName: node linkType: hard @@ -2089,15 +1681,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/expect-utils@npm:29.0.1" - dependencies: - jest-get-type: ^29.0.0 - checksum: d2cfe72f91fcb86a3f2ffc7c09e02cba7e9da0c41705a98e7fbed016b2141ab29764b15615806ece4ed6a21b60252f024b121be68c2bd66d055305a1d34b10f8 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.1.2": version: 29.1.2 resolution: "@jest/expect-utils@npm:29.1.2" @@ -2248,34 +1831,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/types@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 50a3658d69cad32fe270ef22e9a21cbad38c387d0b17cb1f23b144f9c9081e81623feda940b6b23459df656f88153ffe7765f36cd3bc3f3b2d8cd0ca246d75b2 - languageName: node - linkType: hard - -"@jest/types@npm:^29.0.2": - version: 29.0.2 - resolution: "@jest/types@npm:29.0.2" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: f093f4548f8022f5ac9d1edf712edbb5c8edb101017f4afd95b9f9eb978328d099dcb77e2f1893a6dfeb9a7dfdd6cc589b2d83829490cee7e9afa9166c2945bd - languageName: node - linkType: hard - "@jest/types@npm:^29.1.2": version: 29.1.2 resolution: "@jest/types@npm:29.1.2" @@ -2342,17 +1897,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.14 - resolution: "@jridgewell/trace-mapping@npm:0.3.14" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: b9537b9630ffb631aef9651a085fe361881cde1772cd482c257fe3c78c8fd5388d681f504a9c9fe1081b1c05e8f75edf55ee10fdb58d92bbaa8dbf6a7bd6b18c - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.15": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.15 resolution: "@jridgewell/trace-mapping@npm:0.3.15" dependencies: @@ -2369,18 +1914,18 @@ __metadata: languageName: node linkType: hard -"@koa/cors@npm:^3.4.2": - version: 3.4.2 - resolution: "@koa/cors@npm:3.4.2" +"@koa/cors@npm:^4.0.0": + version: 4.0.0 + resolution: "@koa/cors@npm:4.0.0" dependencies: vary: ^1.1.2 - checksum: 33e60724907bba1490a107a58925a7a4d9144333ad35060a059b0f22a068913c642a913bb530e2050293630193f6cc5ae3edc158d472fb71a0aa0dde4e878e2f + checksum: e0760544823532f2d71d792e3076858e38bab9b1c090abea175f1319fd91ea58a1da384a2fe7f5108f1c681e3830b01f62a1cafe271d6406751976af443187aa languageName: node linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.4": - version: 1.0.9 - resolution: "@mapbox/node-pre-gyp@npm:1.0.9" + version: 1.0.10 + resolution: "@mapbox/node-pre-gyp@npm:1.0.10" dependencies: detect-libc: ^2.0.0 https-proxy-agent: ^5.0.0 @@ -2393,16 +1938,16 @@ __metadata: tar: ^6.1.11 bin: node-pre-gyp: bin/node-pre-gyp - checksum: 1b9c4c87a68d200daa13151d0fe033aa7aa8f7b26f3585255424dd8dfee2ec672c3e9bea4071c624469bc0aebbbcde08f8a300c8a958db52c50abadd5fb56920 + checksum: 1a98db05d955b74dad3814679593df293b9194853698f3f5f1ed00ecd93128cdd4b14fb8767fe44ac6981ef05c23effcfdc88710e7c1de99ccb6f647890597c8 languageName: node linkType: hard -"@mojaloop/api-snippets@npm:16.0.3": - version: 16.0.3 - resolution: "@mojaloop/api-snippets@npm:16.0.3" +"@mojaloop/api-snippets@npm:^16.0.4": + version: 16.0.4 + resolution: "@mojaloop/api-snippets@npm:16.0.4" dependencies: "@apidevtools/json-schema-ref-parser": ^9.0.9 - commander: ^9.4.0 + commander: ^9.4.1 jest-ts-auto-mock: ^2.1.0 js-yaml: ^4.1.0 json-refs: ^3.0.15 @@ -2410,7 +1955,7 @@ __metadata: openapi-typescript: ^5.4.1 ts-auto-mock: ^3.6.2 ttypescript: ^1.5.13 - checksum: 2e577cf39a9c51d4b673a3ca6f06af959106d98a3a69178cc3caa70931403fae6e25b15c7db0f96957896902e43f35da455daa1e07c00d4e58205e41ac928aa9 + checksum: d9a80d291011f1a63cb27111f38ccec3aba8caccf109fdb1d9584fc8abf5649030cf92b36efb2cf9fe755c693dcc6802a8e05033cd221c7dfcca5b6af0e2f96f languageName: node linkType: hard @@ -2532,27 +2077,13 @@ __metadata: languageName: node linkType: hard -"@mojaloop/logging-bc-public-types-lib@npm:^0.1.11": - version: 0.1.11 - resolution: "@mojaloop/logging-bc-public-types-lib@npm:0.1.11" - checksum: ab0bc7189c752ad14f748b08e30944a9ea48e2845613406ff4179460629aa55a74382f2e5aa06eecb0330c6f4c976620d937ef7e7cf4829457b7bd01c3cbb14b - languageName: node - linkType: hard - -"@mojaloop/logging-bc-public-types-lib@npm:^0.1.12": +"@mojaloop/logging-bc-public-types-lib@npm:^0.1.11, @mojaloop/logging-bc-public-types-lib@npm:^0.1.12, @mojaloop/logging-bc-public-types-lib@npm:~0.1.0": version: 0.1.12 resolution: "@mojaloop/logging-bc-public-types-lib@npm:0.1.12" checksum: 66858386c1f1aa19731675618fc7dc1c3dc592f81f66fd6462911339591e0f53602cdd03fbeac3d80746b8f6b8a6a2230930b84d678468e7f509c94c9b231ccc languageName: node linkType: hard -"@mojaloop/logging-bc-public-types-lib@npm:~0.1.0": - version: 0.1.8 - resolution: "@mojaloop/logging-bc-public-types-lib@npm:0.1.8" - checksum: e42f4c60efba21d57a38b3dc442f1c29fbc8cbf8c060b34d469158237acde175bd898ab7a97a2c6b432a256e91ca155eb878cebc5ce2f2b733b1bf48c8ab45b4 - languageName: node - linkType: hard - "@mojaloop/platform-shared-lib-messaging-types-lib@npm:^0.1.1, @mojaloop/platform-shared-lib-messaging-types-lib@npm:~0.1.0": version: 0.1.1 resolution: "@mojaloop/platform-shared-lib-messaging-types-lib@npm:0.1.1" @@ -2561,9 +2092,9 @@ __metadata: linkType: hard "@mojaloop/platform-shared-lib-messaging-types-lib@npm:~0.2.0": - version: 0.2.0 - resolution: "@mojaloop/platform-shared-lib-messaging-types-lib@npm:0.2.0" - checksum: d10678bc22d4b154f44be14106d57695d97ec049d24554605870a98ca4cf4e7f3d907566b87612563217b17c0b9628b319493319b75fc892f157f7a3413daac6 + version: 0.2.7 + resolution: "@mojaloop/platform-shared-lib-messaging-types-lib@npm:0.2.7" + checksum: 91d31f83c614ac33d80cd935e0eab4b21c457e605fd34f1b2680ecd06fe484cc150ea57cc54dd3d614cd2a7674cb0634b61e004f8a7fa077d850cfc51f2ad0e4 languageName: node linkType: hard @@ -2579,13 +2110,13 @@ __metadata: linkType: hard "@mojaloop/platform-shared-lib-nodejs-kafka-client-lib@npm:~0.2.0": - version: 0.2.0 - resolution: "@mojaloop/platform-shared-lib-nodejs-kafka-client-lib@npm:0.2.0" + version: 0.2.4 + resolution: "@mojaloop/platform-shared-lib-nodejs-kafka-client-lib@npm:0.2.4" dependencies: "@mojaloop/logging-bc-public-types-lib": ^0.1.11 "@mojaloop/platform-shared-lib-messaging-types-lib": ~0.2.0 node-rdkafka: ~2.13.0 - checksum: 159e8d3b668baa932bf28d78c21e9c519bb3e445e2a010904fdf9e9b15542719419dd97b35aeb85910d36825f87c4c4ca2cd239cea6bee725b7bb8cf4d59b646 + checksum: 86760be3e94645cbdacc35320dcbe5221478b60ea4324a925a9f1e35f845bac1a671c4e95d9adb316e3b61b4569321680aec1ff0cb65240ec09bff0b9a6c8ee8 languageName: node linkType: hard @@ -2594,9 +2125,9 @@ __metadata: resolution: "@mojaloop/sdk-scheme-adapter-api-svc@workspace:modules/api-svc" dependencies: "@babel/core": ^7.19.3 - "@babel/preset-env": ^7.19.3 - "@koa/cors": ^3.4.2 - "@mojaloop/api-snippets": 16.0.3 + "@babel/preset-env": ^7.19.4 + "@koa/cors": ^4.0.0 + "@mojaloop/api-snippets": ^16.0.4 "@mojaloop/central-services-error-handling": ^12.0.4 "@mojaloop/central-services-logger": ^11.0.1 "@mojaloop/central-services-metrics": ^12.0.5 @@ -2607,16 +2138,16 @@ __metadata: "@redocly/openapi-cli": ^1.0.0-beta.94 "@types/jest": ^29.1.2 ajv: 8.11.0 - axios: ^1.0.0 + axios: ^1.1.2 babel-jest: ^29.1.2 co-body: ^6.1.0 dotenv: ^16.0.3 env-var: ^7.3.0 - eslint: ^8.24.0 + eslint: ^8.25.0 eslint-config-airbnb-base: ^15.0.0 eslint-plugin-import: ^2.26.0 eslint-plugin-jest: ^27.1.1 - express: ^4.18.1 + express: ^4.18.2 fast-json-patch: ^3.1.1 javascript-state-machine: ^3.1.0 jest: ^29.1.2 @@ -2628,7 +2159,7 @@ __metadata: lodash: ^4.17.21 module-alias: ^2.2.2 nock: ^13.2.9 - npm-check-updates: ^16.3.8 + npm-check-updates: ^16.3.11 oauth2-server: ^4.0.0-dev.2 openapi-jsonschema-parameters: ^12.0.2 openapi-response-validator: ^12.0.2 @@ -2651,7 +2182,7 @@ __metadata: version: 0.0.0-use.local resolution: "@mojaloop/sdk-scheme-adapter-outbound-command-event-handler@workspace:modules/outbound-command-event-handler" dependencies: - "@mojaloop/api-snippets": 16.0.3 + "@mojaloop/api-snippets": ^16.0.4 "@mojaloop/central-services-shared": ^17.3.1 "@mojaloop/logging-bc-client-lib": ^0.1.15 "@mojaloop/logging-bc-public-types-lib": ^0.1.12 @@ -2659,21 +2190,21 @@ __metadata: "@types/convict": ^6.1.1 "@types/express": ^4.17.14 "@types/jest": ^29.1.2 - "@types/node": ^18.8.2 + "@types/node": ^18.8.3 "@types/node-cache": ^4.2.5 "@types/supertest": ^2.0.12 "@types/swagger-ui-express": ^4.1.3 "@types/yamljs": ^0.2.31 - "@typescript-eslint/eslint-plugin": ^5.39.0 - "@typescript-eslint/parser": ^5.39.0 + "@typescript-eslint/eslint-plugin": ^5.40.0 + "@typescript-eslint/parser": ^5.40.0 ajv: ^8.11.0 convict: ^6.2.3 copyfiles: ^2.4.1 - eslint: ^8.24.0 - express: ^4.18.1 + eslint: ^8.25.0 + express: ^4.18.2 jest: ^29.1.2 nodemon: ^2.0.20 - npm-check-updates: ^16.3.8 + npm-check-updates: ^16.3.11 openapi-backend: ^5.5.0 redis: ^4.3.1 replace: ^1.2.1 @@ -2690,27 +2221,27 @@ __metadata: version: 0.0.0-use.local resolution: "@mojaloop/sdk-scheme-adapter-outbound-domain-event-handler@workspace:modules/outbound-domain-event-handler" dependencies: - "@mojaloop/api-snippets": 16.0.3 + "@mojaloop/api-snippets": ^16.0.4 "@mojaloop/logging-bc-client-lib": ^0.1.15 "@mojaloop/logging-bc-public-types-lib": ^0.1.12 "@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^" "@types/convict": ^6.1.1 "@types/express": ^4.17.14 "@types/jest": ^29.1.2 - "@types/node": ^18.8.2 + "@types/node": ^18.8.3 "@types/node-cache": ^4.2.5 "@types/supertest": ^2.0.12 "@types/swagger-ui-express": ^4.1.3 "@types/yamljs": ^0.2.31 - "@typescript-eslint/eslint-plugin": ^5.39.0 - "@typescript-eslint/parser": ^5.39.0 + "@typescript-eslint/eslint-plugin": ^5.40.0 + "@typescript-eslint/parser": ^5.40.0 convict: ^6.2.3 copyfiles: ^2.4.1 - eslint: ^8.24.0 - express: ^4.18.1 + eslint: ^8.25.0 + express: ^4.18.2 jest: ^29.1.2 nodemon: ^2.0.20 - npm-check-updates: ^16.3.8 + npm-check-updates: ^16.3.11 openapi-backend: ^5.5.0 redis: ^4.3.1 replace: ^1.2.1 @@ -2727,15 +2258,16 @@ __metadata: version: 0.0.0-use.local resolution: "@mojaloop/sdk-scheme-adapter-private-shared-lib@workspace:modules/private-shared-lib" dependencies: - "@mojaloop/api-snippets": 16.0.3 + "@mojaloop/api-snippets": ^16.0.4 + "@mojaloop/central-services-shared": ^17.3.1 "@mojaloop/logging-bc-public-types-lib": ^0.1.12 "@mojaloop/platform-shared-lib-messaging-types-lib": ^0.1.1 "@mojaloop/platform-shared-lib-nodejs-kafka-client-lib": ^0.1.1 - "@types/node": ^18.8.2 + "@types/node": ^18.8.3 ajv: ^8.11.0 - eslint: ^8.24.0 + eslint: ^8.25.0 jest: ^29.1.2 - npm-check-updates: ^16.3.8 + npm-check-updates: ^16.3.11 redis: ^4.3.1 replace: ^1.2.1 standard-version: ^9.5.0 @@ -2750,18 +2282,18 @@ __metadata: resolution: "@mojaloop/sdk-scheme-adapter@workspace:." dependencies: "@types/jest": ^29.1.2 - "@types/node": ^18.8.2 + "@types/node": ^18.8.3 "@types/node-cache": ^4.2.5 - "@typescript-eslint/eslint-plugin": ^5.39.0 - "@typescript-eslint/parser": ^5.39.0 + "@typescript-eslint/eslint-plugin": ^5.40.0 + "@typescript-eslint/parser": ^5.40.0 audit-ci: ^6.3.0 - eslint: ^8.24.0 + eslint: ^8.25.0 eslint-config-airbnb-typescript: ^17.0.0 eslint-plugin-import: latest husky: ^8.0.1 jest: ^29.1.2 nodemon: ^2.0.20 - npm-check-updates: ^16.3.8 + npm-check-updates: ^16.3.11 nx: 14.8.3 replace: ^1.2.1 standard-version: ^9.5.0 @@ -2814,18 +2346,18 @@ __metadata: linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/fs@npm:2.1.0" + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 languageName: node linkType: hard "@npmcli/git@npm:^3.0.0": - version: 3.0.1 - resolution: "@npmcli/git@npm:3.0.1" + version: 3.0.2 + resolution: "@npmcli/git@npm:3.0.2" dependencies: "@npmcli/promise-spawn": ^3.0.0 lru-cache: ^7.4.4 @@ -2836,7 +2368,7 @@ __metadata: promise-retry: ^2.0.1 semver: ^7.3.5 which: ^2.0.2 - checksum: 0e289d11e2d6034652993f2d05f68396d8377603a1c1f983b2d0893e7591a22bcf3896a43c7dfbcc43f03c308a110f0b9ec37e0191e48b0bd1d236e0f57a3ec6 + checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 languageName: node linkType: hard @@ -2853,12 +2385,12 @@ __metadata: linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/move-file@npm:2.0.0" + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard @@ -2879,15 +2411,15 @@ __metadata: linkType: hard "@npmcli/run-script@npm:^4.1.0": - version: 4.1.5 - resolution: "@npmcli/run-script@npm:4.1.5" + version: 4.2.1 + resolution: "@npmcli/run-script@npm:4.2.1" dependencies: "@npmcli/node-gyp": ^2.0.0 "@npmcli/promise-spawn": ^3.0.0 node-gyp: ^9.0.0 read-package-json-fast: ^2.0.3 which: ^2.0.2 - checksum: a71736c628c747edd3275861a60bf8d76f8e954d0ab9561f0364d07f7a24ebf81159d0826a2c85705eae6391ffae6328bae6ca581264b5b3f3ca029510201387 + checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 languageName: node linkType: hard @@ -2932,12 +2464,12 @@ __metadata: linkType: hard "@pnpm/npm-conf@npm:^1.0.4": - version: 1.0.4 - resolution: "@pnpm/npm-conf@npm:1.0.4" + version: 1.0.5 + resolution: "@pnpm/npm-conf@npm:1.0.5" dependencies: "@pnpm/network.ca-file": ^1.0.1 config-chain: ^1.1.11 - checksum: f94afa48ce88688f0d9f923c8a9b3c290b25a8046bfd618d2ce1244e1f66c8b448f80a42fed0f1fe8a3001d320f5beefeebe752131498bfa521ebb1e339137ec + checksum: 0c5f1a63782309a877b70e3cbdd21ff1da57549924a941772bafd0117323881fdcda0e9753f0a695c3f85f4360f5ca27a0e20153abae6985350502f2d94b7d40 languageName: node linkType: hard @@ -3071,14 +2603,14 @@ __metadata: linkType: hard "@redocly/ajv@npm:^8.6.4": - version: 8.6.4 - resolution: "@redocly/ajv@npm:8.6.4" + version: 8.11.0 + resolution: "@redocly/ajv@npm:8.11.0" dependencies: fast-deep-equal: ^3.1.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 uri-js: ^4.2.2 - checksum: fcf2529289e9e210a8c11246b62c9b0415b7966532e326f89d8d788279872a154e173182e3c0c773faa7036c6085c4f97b23b58d1314091322c5d1a561cce8db + checksum: 3e4c7a18226aefd2016628eed88a84588c49f6e721a1009081a20873f374a3d765c6a640856f6cb6bdd1732b027e3c82ea5c06d27427bc5a8af2cf8bb69bbd9b languageName: node linkType: hard @@ -3122,16 +2654,16 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.20 - resolution: "@sinclair/typebox@npm:0.24.20" - checksum: bb2e95ab60236ebbcaf3c0735b01a8ce6bea068bb1214a8016f8fea7bc2027d69b08437998425d93a3ac38ded3dbe8c64e218e635c09282cb3dd5d5a64269076 + version: 0.24.44 + resolution: "@sinclair/typebox@npm:0.24.44" + checksum: 773d9efc85cea69129659239ebda902c1b09e3e82f19358e5cd0f60ba21203ea694afce71bca1062376550b2bd99de6eeea98e6c273eb233d25daca95357f0cf languageName: node linkType: hard -"@sindresorhus/is@npm:^4.6.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 +"@sindresorhus/is@npm:^5.2.0": + version: 5.3.0 + resolution: "@sindresorhus/is@npm:5.3.0" + checksum: b31cebabcdece3d5322de2a4dbc8c0f004e04147a00f2606787bcaf5655ad4b1954f6727fc6914c524009b2b9a2cc01c42835b55f651ce69fd2a0083b60bb852 languageName: node linkType: hard @@ -3230,11 +2762,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.17.1 - resolution: "@types/babel__traverse@npm:7.17.1" + version: 7.18.2 + resolution: "@types/babel__traverse@npm:7.18.2" dependencies: "@babel/types": ^7.3.0 - checksum: 8992d8c1eaaf1c793e9184b930767883446939d2744c40ea4e9591086e79b631189dc519931ed8864f1e016742a189703c217db59b800aca84870b865009d8b4 + checksum: 05972775e21cf07753b3bec725bf76f5a9804f99f660d323040746e3c8a4fe1b4ef6df17d7a80c4e2e335382cc72c62fc5a7079af836871ff9cbf0c21804e6d9 languageName: node linkType: hard @@ -3249,24 +2781,12 @@ __metadata: linkType: hard "@types/bytebuffer@npm:^5.0.40": - version: 5.0.43 - resolution: "@types/bytebuffer@npm:5.0.43" - dependencies: - "@types/long": "*" - "@types/node": "*" - checksum: d04ffcec5a25084577362c278e30cf6ee87da2160117a3bae60ff2a5e437e57f730d802806b6e7ba96ebcaf268711a0b1681b09c002ac585d5db5103d0f78a7f - languageName: node - linkType: hard - -"@types/cacheable-request@npm:^6.0.2": - version: 6.0.2 - resolution: "@types/cacheable-request@npm:6.0.2" + version: 5.0.44 + resolution: "@types/bytebuffer@npm:5.0.44" dependencies: - "@types/http-cache-semantics": "*" - "@types/keyv": "*" + "@types/long": ^3.0.0 "@types/node": "*" - "@types/responselike": "*" - checksum: 667d25808dbf46fe104d6f029e0281ff56058d50c7c1b9182774b3e38bb9c1124f56e4c367ba54f92dbde2d1cc573f26eb0e9748710b2822bc0fd1e5498859c6 + checksum: 86a58be037037b039a645da89b4319f5923b7d506fa770312e8f5f37d251a70cc4f34e59d7d392651a9223d85ca1d072e9ae8126eb874ab0302b91dc40cf352c languageName: node linkType: hard @@ -3296,29 +2816,17 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:^4.17.18": - version: 4.17.29 - resolution: "@types/express-serve-static-core@npm:4.17.29" + version: 4.17.31 + resolution: "@types/express-serve-static-core@npm:4.17.31" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" - checksum: ec4194dc59276ec6dd906887fc377be0cadf4aaa4d535d9052ab9624937ef2b984a8d9da2c11c96979e21f3d9f78f1da93e767dbcec637f7f13d2e3003151145 + checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df languageName: node linkType: hard -"@types/express@npm:*": - version: 4.17.13 - resolution: "@types/express@npm:4.17.13" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.18 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 12a2a0e6c4b993fc0854bec665906788aea0d8ee4392389d7a98a5de1eefdd33c9e1e40a91f3afd274011119c506f7b4126acb97fae62ae20b654974d44cba12 - languageName: node - linkType: hard - -"@types/express@npm:^4.17.14": +"@types/express@npm:*, @types/express@npm:^4.17.14": version: 4.17.14 resolution: "@types/express@npm:4.17.14" dependencies: @@ -3356,12 +2864,12 @@ __metadata: linkType: hard "@types/glob@npm:*": - version: 7.2.0 - resolution: "@types/glob@npm:7.2.0" + version: 8.0.0 + resolution: "@types/glob@npm:8.0.0" dependencies: "@types/minimatch": "*" "@types/node": "*" - checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 + checksum: 1817b05f5a8aed851d102a65b5e926d5c777bef927ea62b36d635860eef5364f2046bb5a692d135b6f2b28f34e4a9d44ade9396122c0845bcc7636d35f624747 languageName: node linkType: hard @@ -3374,7 +2882,7 @@ __metadata: languageName: node linkType: hard -"@types/http-cache-semantics@npm:*": +"@types/http-cache-semantics@npm:^4.0.1": version: 4.0.1 resolution: "@types/http-cache-semantics@npm:4.0.1" checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 @@ -3416,13 +2924,6 @@ __metadata: languageName: node linkType: hard -"@types/json-buffer@npm:~3.0.0": - version: 3.0.0 - resolution: "@types/json-buffer@npm:3.0.0" - checksum: 6b0a371dd603f0eec9d00874574bae195382570e832560dadf2193ee0d1062b8e0694bbae9798bc758632361c227b1e3b19e3bd914043b498640470a2da38b77 - languageName: node - linkType: hard - "@types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -3437,15 +2938,6 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:*": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "*" - checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d - languageName: node - linkType: hard - "@types/lodash-es@npm:^4.17.6": version: 4.17.6 resolution: "@types/lodash-es@npm:4.17.6" @@ -3456,30 +2948,37 @@ __metadata: linkType: hard "@types/lodash@npm:*": - version: 4.14.182 - resolution: "@types/lodash@npm:4.14.182" - checksum: 7dd137aa9dbabd632408bd37009d984655164fa1ecc3f2b6eb94afe35bf0a5852cbab6183148d883e9c73a958b7fec9a9bcf7c8e45d41195add6a18c34958209 + version: 4.14.186 + resolution: "@types/lodash@npm:4.14.186" + checksum: ee0c1368a8100bb6efb88335107473a41928fc307ff1ef4ff1278868ccddba9c04c68c36d1ffe3a0392ef4a956e1955f7de3203ec09df4f1655dd1b88485c549 + languageName: node + linkType: hard + +"@types/long@npm:^3.0.0": + version: 3.0.32 + resolution: "@types/long@npm:3.0.32" + checksum: 7c64c64b4a8bf38d9a6690f725ed5e92383905b22c1320493749729c4f476a74fa2507cc9364268ecdfdba1cf11573a46648157f3e34cb0c39f51b05d13c37eb languageName: node linkType: hard -"@types/long@npm:*, @types/long@npm:^4.0.1": +"@types/long@npm:^4.0.1": version: 4.0.2 resolution: "@types/long@npm:4.0.2" checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4 languageName: node linkType: hard -"@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd +"@types/mime@npm:*": + version: 3.0.1 + resolution: "@types/mime@npm:3.0.1" + checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 languageName: node linkType: hard "@types/minimatch@npm:*": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 languageName: node linkType: hard @@ -3499,24 +2998,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*": - version: 18.0.3 - resolution: "@types/node@npm:18.0.3" - checksum: 5dec59fbbc1186c808b53df1ca717dad034dbd6a901c75f5b052c845618b531b05f27217122c6254db99529a68618e4cfc534ae3dbf4e88754e9e572df80defa - languageName: node - linkType: hard - -"@types/node@npm:>=13.7.0": - version: 18.0.6 - resolution: "@types/node@npm:18.0.6" - checksum: 780f8885a6b6eb12f4c0246617747fdc37a451931b3c01ce8148d356c0903b705dcb16cc6a914de63d48b0dc1b002c7a3dfae681f580e1761aa551d3cd996813 +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 18.8.0 + resolution: "@types/node@npm:18.8.0" + checksum: 3433cbc22e90fafb047f93b3ef05ba01a07f780a24ff1af393f435f807537b533fe9e8a816586825f4c5fd5336c3e80225571f44ec3b6479c463408c072773e7 languageName: node linkType: hard "@types/node@npm:^14.11.8": - version: 14.18.21 - resolution: "@types/node@npm:14.18.21" - checksum: 4ed35b76609647a4e36a194702e31cdda9ed42174ddaf7937bc5498984e98a99e8a42ea895ea17dd9c5ec18080112c29ab670c34f90eb9f7a4703b85b31e34fa + version: 14.18.31 + resolution: "@types/node@npm:14.18.31" + checksum: df33021d673a5e3c943cf96c9f3fbccf364d20f487b2ab7eb49db144974c2049f0a91e9358df09235f543c1f0b11388c5b0b636ae1f2ed55a27c75f63bc3d2c5 languageName: node linkType: hard @@ -3527,10 +3019,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^18.8.2": - version: 18.8.2 - resolution: "@types/node@npm:18.8.2" - checksum: b7c74dea0e835fb7faf69b4a2e87d43c1d228d88adacdff464d9e92d18a0b43bec6147b9eb3287650ac75fe5af730c53391869d02175e6b032dcb99ae2f54c92 +"@types/node@npm:^18.8.3": + version: 18.8.3 + resolution: "@types/node@npm:18.8.3" + checksum: 9201adc6dc389644c9f478f950ef8926a93e5827865dcd80d7d12fefacab665c96879c87cd6ec74d5eccdd998c4603d02e1e07a35d71a63fe4c20670a381f6ef languageName: node linkType: hard @@ -3542,9 +3034,9 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.6.3 - resolution: "@types/prettier@npm:2.6.3" - checksum: e1836699ca189fff6d2a73dc22e028b6a6f693ed1180d5998ac29fa197caf8f85aa92cb38db642e4a370e616b451cb5722ad2395dab11c78e025a1455f37d1f0 + version: 2.7.1 + resolution: "@types/prettier@npm:2.7.1" + checksum: 5e3f58e229d6c73b5f5cae2e8f96c1c4a5b5805f83459e17a045ba8e96152b1d38e86b63e3172fb159dac923388699660862b75b2d37e54220805f0e691e26f1 languageName: node linkType: hard @@ -3562,15 +3054,6 @@ __metadata: languageName: node linkType: hard -"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/responselike@npm:1.0.0" - dependencies: - "@types/node": "*" - checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 - languageName: node - linkType: hard - "@types/semver@npm:^7.3.12": version: 7.3.12 resolution: "@types/semver@npm:7.3.12" @@ -3579,12 +3062,12 @@ __metadata: linkType: hard "@types/serve-static@npm:*": - version: 1.13.10 - resolution: "@types/serve-static@npm:1.13.10" + version: 1.15.0 + resolution: "@types/serve-static@npm:1.15.0" dependencies: - "@types/mime": ^1 + "@types/mime": "*" "@types/node": "*" - checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 + checksum: b6ac93d471fb0f53ddcac1f9b67572a09cd62806f7db5855244b28f6f421139626f24799392566e97d1ffc61b12f9de7f30380c39fcae3c8a161fe161d44edf2 languageName: node linkType: hard @@ -3646,11 +3129,11 @@ __metadata: linkType: hard "@types/yargs@npm:^17.0.8": - version: 17.0.10 - resolution: "@types/yargs@npm:17.0.10" + version: 17.0.13 + resolution: "@types/yargs@npm:17.0.13" dependencies: "@types/yargs-parser": "*" - checksum: f0673cbfc08e17239dc58952a88350d6c4db04a027a28a06fbad27d87b670e909f9cd9e66f9c64cebdd5071d1096261e33454a55868395f125297e5c50992ca8 + checksum: 0ab269abc2da2223cf0a8c16d578850fbe327d40fb85724b5c3f9f6cf38d03656ef699518c05d4df3bc337339ec6d0aad7df01682a9dca4783ad1ccc7336cf12 languageName: node linkType: hard @@ -3661,13 +3144,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.39.0" +"@typescript-eslint/eslint-plugin@npm:^5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.40.0" dependencies: - "@typescript-eslint/scope-manager": 5.39.0 - "@typescript-eslint/type-utils": 5.39.0 - "@typescript-eslint/utils": 5.39.0 + "@typescript-eslint/scope-manager": 5.40.0 + "@typescript-eslint/type-utils": 5.40.0 + "@typescript-eslint/utils": 5.40.0 debug: ^4.3.4 ignore: ^5.2.0 regexpp: ^3.2.0 @@ -3679,53 +3162,53 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 9d6835f3c2558f2287c5a45dc7d3b17b19c6777b5915b6ad737d892e5938746a3e76c3efd0e01156da0b17432a50d1e02480efc5105e8f9c75f1a3d45e18d6ee + checksum: ac9e8fcea3545eb33353373c5094fd0a7b79647b37066adbcbd8edcb6fc17c6a601fd0e1b8db0a39200e8238acb33d4b1b036bfe09ebb9899cfb43f6c271a8fd languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/parser@npm:5.39.0" +"@typescript-eslint/parser@npm:^5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/parser@npm:5.40.0" dependencies: - "@typescript-eslint/scope-manager": 5.39.0 - "@typescript-eslint/types": 5.39.0 - "@typescript-eslint/typescript-estree": 5.39.0 + "@typescript-eslint/scope-manager": 5.40.0 + "@typescript-eslint/types": 5.40.0 + "@typescript-eslint/typescript-estree": 5.40.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: f55a1ef540e5c70d063e0112c0c4c950504d263ce180480973ca72c015a3e826942ebe8aa0a6bbd557def987b07d9d410784b6c96aa000679dfa3f4cb00e063c + checksum: a8d02950dd12fcb1d19ad5f24cbfd186ca88d8a099160f93f99767896a45198a9f9bfbdd1a57c1ae50d452e6c895ae5b4d7e4623dfc87bca55a45c5ba16491f8 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.30.6": - version: 5.30.6 - resolution: "@typescript-eslint/scope-manager@npm:5.30.6" +"@typescript-eslint/scope-manager@npm:5.38.1": + version: 5.38.1 + resolution: "@typescript-eslint/scope-manager@npm:5.38.1" dependencies: - "@typescript-eslint/types": 5.30.6 - "@typescript-eslint/visitor-keys": 5.30.6 - checksum: 454c32339869694a400c6e3e4e44729da3c02359cb086c1e9315e2aeb93af3a6e1c87d274f9eb0066a081f99e4ffda3a036565d17c78dd8649d19f18199419c6 + "@typescript-eslint/types": 5.38.1 + "@typescript-eslint/visitor-keys": 5.38.1 + checksum: c3b38ca0074d09e26c30b4385c18933f8a6418c923a24c7f4c2297af60a85d604320f119863676f49ea4254b3c01c112504547436eda4951ade609e8d7f438a7 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/scope-manager@npm:5.39.0" +"@typescript-eslint/scope-manager@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/scope-manager@npm:5.40.0" dependencies: - "@typescript-eslint/types": 5.39.0 - "@typescript-eslint/visitor-keys": 5.39.0 - checksum: 8d8b55eb219a23b3de64602ea23269fb1e16120ff03c58ebb7ed571372cbc591c5f4641b91ba1cf7fd02cf13f7bb906a7bd6e3db6da3543c97fcea8c61c15c07 + "@typescript-eslint/types": 5.40.0 + "@typescript-eslint/visitor-keys": 5.40.0 + checksum: 48dfb2f1a71bda5b782263e97608f1e1a2e8a89a603344af5072208be7936140af9d41483be439405c5ee379d0263555d6cc94405b187707f9ecfd7dd9821b5f languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/type-utils@npm:5.39.0" +"@typescript-eslint/type-utils@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/type-utils@npm:5.40.0" dependencies: - "@typescript-eslint/typescript-estree": 5.39.0 - "@typescript-eslint/utils": 5.39.0 + "@typescript-eslint/typescript-estree": 5.40.0 + "@typescript-eslint/utils": 5.40.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -3733,30 +3216,30 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2bab5c1a8bc0956d8f9ba1fb6db56a89f8e40c4f7bb0c07b1581aa4ed4c8259a64d67bc9c6fccbdc8e62fc9330d30c3c5a84f30f28112ddb1e3995d2791a5ac2 + checksum: eabe86de93b0bd4bcbfb13cace097ff7addbd992c91b80c73bbaa677ce26f1c2abd1c63fe585f2fd9c80df07d3d54bd6e4a46aebc908cef0f870f1d6955d6b8a languageName: node linkType: hard -"@typescript-eslint/types@npm:5.30.6": - version: 5.30.6 - resolution: "@typescript-eslint/types@npm:5.30.6" - checksum: 47c621dae5929d5b39b2b27c6f2ecb8daab1da22566867443873c0681322019f99e205629910bfe04e64077349aec05c84e0d4571f189619b609f4173a9d0f36 +"@typescript-eslint/types@npm:5.38.1": + version: 5.38.1 + resolution: "@typescript-eslint/types@npm:5.38.1" + checksum: 384f7fe9a1995d87507049a868aa1a1f9eb28af913e704540e1494c8c630985f9ef4f4e6bdd4df0d83cbe4611c4e6f4f07d5d91bfa57c88242fb227a6d828b7e languageName: node linkType: hard -"@typescript-eslint/types@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/types@npm:5.39.0" - checksum: 5f67fe02adc87d594b6cc8ec5387d64419d4bbff701f4da51bf9929cdc50bc613df865e5a2457f13e4a637e8dfdb1fdf15fe8138f8968462de9e54ea056cc1a7 +"@typescript-eslint/types@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/types@npm:5.40.0" + checksum: 892ff162176a3e292b5b55090421c6d318187255f3f91be46bd5c0b38e3c25a49d9320ffb646d5709f3a2cdf350217a79e557886fdfdbdb322caec27f2b3d116 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.30.6": - version: 5.30.6 - resolution: "@typescript-eslint/typescript-estree@npm:5.30.6" +"@typescript-eslint/typescript-estree@npm:5.38.1": + version: 5.38.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.38.1" dependencies: - "@typescript-eslint/types": 5.30.6 - "@typescript-eslint/visitor-keys": 5.30.6 + "@typescript-eslint/types": 5.38.1 + "@typescript-eslint/visitor-keys": 5.38.1 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -3765,16 +3248,16 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 5621c03f1a6ca8866d91014cd30b53a37f9c4d664eb97bc2740294bcbf7efc0178e8699def752b86c97472e7b1b0cd9b6c0d9aa07a04decfe78bd16c21f93c4b + checksum: ec73496f73bd7f97d1585d25484874f092141a5f92ade7bd324fb76ef52888f0d77cc4375bdecc92cc3bacf5d61d65197acbb9af4fd9322b51db286c68a320c6 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.39.0" +"@typescript-eslint/typescript-estree@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.40.0" dependencies: - "@typescript-eslint/types": 5.39.0 - "@typescript-eslint/visitor-keys": 5.39.0 + "@typescript-eslint/types": 5.40.0 + "@typescript-eslint/visitor-keys": 5.40.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -3783,59 +3266,60 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 86143dd9dd33ce65a20badbce5509ae4e77e9dfe202a6966dd416a8ce8147e5b05d12ce0b8f593ed7924797f6420d0bcd558c773042466e24386cdda24f24eb8 + checksum: 8b67b8c4278f6bbd16ec521c847920c6f0ba57ec4bf148505c057aa160363852f50f9db73f42ee71ac3906940e8554e9c27686194a57f6554efcd82a8b0fa3e8 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/utils@npm:5.39.0" +"@typescript-eslint/utils@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/utils@npm:5.40.0" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.39.0 - "@typescript-eslint/types": 5.39.0 - "@typescript-eslint/typescript-estree": 5.39.0 + "@typescript-eslint/scope-manager": 5.40.0 + "@typescript-eslint/types": 5.40.0 + "@typescript-eslint/typescript-estree": 5.40.0 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 + semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 460a883775c24ed1a328db15101d58e1207797c97d2347a6e1adb2e26ef56ac0b525a326d2dd74333daf00e2b2e3dd28d51e0d4c4c38cdade2d132d8b08917cb + checksum: 608e16ad510c1543de37e168ab42e9d11fdd7d38faf19fe5d60255ea8e43b9a8cebeea11bd9776eed55fe0e453c5d222bb708b930b431c5b113269c6b44788c1 languageName: node linkType: hard "@typescript-eslint/utils@npm:^5.10.0": - version: 5.30.6 - resolution: "@typescript-eslint/utils@npm:5.30.6" + version: 5.38.1 + resolution: "@typescript-eslint/utils@npm:5.38.1" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.30.6 - "@typescript-eslint/types": 5.30.6 - "@typescript-eslint/typescript-estree": 5.30.6 + "@typescript-eslint/scope-manager": 5.38.1 + "@typescript-eslint/types": 5.38.1 + "@typescript-eslint/typescript-estree": 5.38.1 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: fc6f9ccf558d658cbeaa85c63bc1853385630c9522c8ae42524b652a6b3c69689fba67a49d79ce1fae2b4ec9c45e5aa9b791ac027d205edef27984d088ed1c3a + checksum: 06646ddeb6c1a5dac01e8336dff458cf37dff0d3d5a2f304048a4d6d8f62d504c5330a8b046ec66f6777f324bc1afe6a3f7ea1c5b015b123ab7062e8e22aff67 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.30.6": - version: 5.30.6 - resolution: "@typescript-eslint/visitor-keys@npm:5.30.6" +"@typescript-eslint/visitor-keys@npm:5.38.1": + version: 5.38.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.38.1" dependencies: - "@typescript-eslint/types": 5.30.6 + "@typescript-eslint/types": 5.38.1 eslint-visitor-keys: ^3.3.0 - checksum: e4ec0541d685d211274724c9f1887b6cdd03c7fc4fbdd1ea74c18311c3a5a9a2d4c676448ea714687ca13cc881ec5c73605de75fbf38f302ba8ea86d2b77897f + checksum: 01c83a42900f8ab721bd0857abcc000a15183eb26d2d61cceeaef018a83a91325f48c0112d4356383c41dce23174a305bb3352af4705a61d1da46f8ac0e88340 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.39.0": - version: 5.39.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.39.0" +"@typescript-eslint/visitor-keys@npm:5.40.0": + version: 5.40.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.40.0" dependencies: - "@typescript-eslint/types": 5.39.0 + "@typescript-eslint/types": 5.40.0 eslint-visitor-keys: ^3.3.0 - checksum: 941e49fd1f4d2e42cd15a52a50f6f1102e2a83b173d182b5dd43ba3d7b7f0f1457d74fcaac710da4a19c28f804c78bc265d900802f4e2c7c46a608fff3204e7c + checksum: a11787f7e6ac7018b22848028c9116d028f89782b0ee120517f0384e9db260e3001ad897512d9c3cf15ce16073ae4c1dc7f81f29d6d40dec78b5e8c8e79f344f languageName: node linkType: hard @@ -3847,12 +3331,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.18": - version: 3.0.0-rc.20 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.20" + version: 3.0.0-rc.22 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.22" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: a0dfc2d4d824322ae779363870ad7705b42161ad5e90c992404bf5dc0454a046a6f04144303c9bb047239e480b882b4105272127f2ba080b865180276c46deda + checksum: 4a31b4faad853b6cb09ff198017dd2f81782cb57ff8aaa2446ab9c8eb51aacaad3fa740e0c156c60c66cdb9cff8939f99b2b09c9890e2b8d015dcbed0150cb8a languageName: node linkType: hard @@ -3912,16 +3396,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.4.1": - version: 8.7.1 - resolution: "acorn@npm:8.7.1" - bin: - acorn: bin/acorn - checksum: aca0aabf98826717920ac2583fdcad0a6fbe4e583fdb6e843af2594e907455aeafe30b1e14f1757cd83ce1776773cf8296ffc3a4acf13f0bd3dfebcf1db6ae80 - languageName: node - linkType: hard - -"acorn@npm:^8.8.0": +"acorn@npm:^8.4.1, acorn@npm:^8.8.0": version: 8.8.0 resolution: "acorn@npm:8.8.0" bin: @@ -4126,9 +3601,9 @@ __metadata: linkType: hard "ansi-styles@npm:^6.1.0": - version: 6.1.0 - resolution: "ansi-styles@npm:6.1.0" - checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 + version: 6.1.1 + resolution: "ansi-styles@npm:6.1.1" + checksum: f2b1ed658ead23caf77effe7b875960cacd70d1ebe47c830e191358b242d688cf52a28d55ef9b19d102f792e8c1dec34bd865db264f1c7f4f63dd3a5fa84677e languageName: node linkType: hard @@ -4160,12 +3635,12 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.0 - resolution: "are-we-there-yet@npm:3.0.0" + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 languageName: node linkType: hard @@ -4279,7 +3754,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^2.6.2": +"async@npm:^2.6.4": version: 2.6.4 resolution: "async@npm:2.6.4" dependencies: @@ -4339,14 +3814,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.0.0": - version: 1.0.0 - resolution: "axios@npm:1.0.0" +"axios@npm:^1.1.2": + version: 1.1.2 + resolution: "axios@npm:1.1.2" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 6270712ec3259d0603932edbd5f9da18f941e905a128585d4e9caf8e5ccaff988f2318f45c451ab43d0d52a40dc0f63cfb53c86073e5c689a017930e1b0e6227 + checksum: 136c25a5031aa2845fdbda3006c36888bbe351b11d1195f1f898a23c5df1430febbdb1ad034a61f27967e83762d5b5a3e851fff8a363cb4badeb883f8ff21461 languageName: node linkType: hard @@ -4625,6 +4100,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.1": + version: 1.20.1 + resolution: "body-parser@npm:1.20.1" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266 + languageName: node + linkType: hard + "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" @@ -4683,31 +4178,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.20.2": - version: 4.21.1 - resolution: "browserslist@npm:4.21.1" +"browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" dependencies: - caniuse-lite: ^1.0.30001359 - electron-to-chromium: ^1.4.172 - node-releases: ^2.0.5 - update-browserslist-db: ^1.0.4 - bin: - browserslist: cli.js - checksum: 4904a9ded0702381adc495e003e7f77970abb7f8c8b8edd9e54f026354b5a96b1bddc26e6d9a7df9f043e468ecd2fcff2c8f40fc489909a042880117c2aca8ff - languageName: node - linkType: hard - -"browserslist@npm:^4.21.3": - version: 4.21.3 - resolution: "browserslist@npm:4.21.3" - dependencies: - caniuse-lite: ^1.0.30001370 - electron-to-chromium: ^1.4.202 + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 node-releases: ^2.0.6 - update-browserslist-db: ^1.0.5 + update-browserslist-db: ^1.0.9 bin: browserslist: cli.js - checksum: ff512a7bcca1c530e2854bbdfc7be2791d0fb524097a6340e56e1d5924164c7e4e0a9b070de04cdc4c149d15cb4d4275cb7c626ebbce954278a2823aaad2452a + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 languageName: node linkType: hard @@ -4786,8 +4267,8 @@ __metadata: linkType: hard "cacache@npm:^16.0.0, cacache@npm:^16.1.0": - version: 16.1.1 - resolution: "cacache@npm:16.1.1" + version: 16.1.3 + resolution: "cacache@npm:16.1.3" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -4806,8 +4287,8 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 languageName: node linkType: hard @@ -4821,25 +4302,25 @@ __metadata: languageName: node linkType: hard -"cacheable-lookup@npm:^6.0.4": - version: 6.0.4 - resolution: "cacheable-lookup@npm:6.0.4" - checksum: 7aea70f5ea081aed12bf54fc165b9f80b580b0d210c85d55cc8fed2beaa9027fd321c1939c65dad945fe9eb207cea45442e01a48b5aa57542e125b716f022b6d +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 9e2856763fc0a7347ab34d704c010440b819d4bb5e3593b664381b7433e942dd22e67ee5581f12256f908e79b82d30b86ebbacf40a081bfe10ee93fbfbc2d6a9 languageName: node linkType: hard -"cacheable-request@npm:^7.0.2": - version: 7.0.2 - resolution: "cacheable-request@npm:7.0.2" +"cacheable-request@npm:^10.2.1": + version: 10.2.1 + resolution: "cacheable-request@npm:10.2.1" dependencies: - clone-response: ^1.0.2 - get-stream: ^5.1.0 - http-cache-semantics: ^4.0.0 - keyv: ^4.0.0 - lowercase-keys: ^2.0.0 - normalize-url: ^6.0.1 - responselike: ^2.0.0 - checksum: 6152813982945a5c9989cb457a6c499f12edcc7ade323d2fbfd759abc860bdbd1306e08096916bb413c3c47e812f8e4c0a0cc1e112c8ce94381a960f115bc77f + "@types/http-cache-semantics": ^4.0.1 + get-stream: ^6.0.1 + http-cache-semantics: ^4.1.0 + keyv: ^4.5.0 + mimic-response: ^4.0.0 + normalize-url: ^7.1.0 + responselike: ^3.0.0 + checksum: 11bcee52d676623fbfe4b02b9f30930457796a7320a5db25392238a92a98185ffa7e87619d82a472c411c7f48eada5ec182bab41e6d849a038e84774dcdbba7d languageName: node linkType: hard @@ -4913,17 +4394,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001359": - version: 1.0.30001363 - resolution: "caniuse-lite@npm:1.0.30001363" - checksum: 8dfcb2fa97724349cbbe61d988810bd90bfb40106a289ed6613188fa96dd1f5885c7e9924e46bb30a641bd1579ec34096fdc2b21b47d8500f8a2bfb0db069323 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001370": - version: 1.0.30001399 - resolution: "caniuse-lite@npm:1.0.30001399" - checksum: dd105b06fbbdc89867780a2f4debc3ecb184cff82f35b34aaac486628fcc9cf6bacf37573a9cc22dedc661178d460fa8401374a933cb9d2f8ee67316d98b2a8f +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001414 + resolution: "caniuse-lite@npm:1.0.30001414" + checksum: 97210cfd15ded093b20c33d35bef9711a88402c3345411dad420c991a41a3e38ad17fd66721e8334c86e9b2e4aa2c1851d3631f1441afb73b92d93b2b8ca890d languageName: node linkType: hard @@ -5051,9 +4525,9 @@ __metadata: linkType: hard "ci-info@npm:^3.2.0": - version: 3.3.2 - resolution: "ci-info@npm:3.3.2" - checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 + version: 3.4.0 + resolution: "ci-info@npm:3.4.0" + checksum: 7f660730170a6ce248e173b670587a0c583e31526d21afcd21f77c811c1aaeb8926999081542d1f30e12cce1df582d4c88709fa45f44c00498b46bdf21d4d21a languageName: node linkType: hard @@ -5158,12 +4632,14 @@ __metadata: languageName: node linkType: hard -"clone-response@npm:^1.0.2": - version: 1.0.2 - resolution: "clone-response@npm:1.0.2" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: - mimic-response: ^1.0.0 - checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -5372,14 +4848,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.4.0": - version: 9.4.0 - resolution: "commander@npm:9.4.0" - checksum: a322de584a6ccd1ea83c24f6a660e52d16ffbe2613fcfbb8d2cc68bc9dec637492456d754fe8bb5b039ad843ed8e04fb0b107e581a75f62cde9e1a0ab1546e09 - languageName: node - linkType: hard - -"commander@npm:^9.4.1": +"commander@npm:^9.4.0, commander@npm:^9.4.1": version: 9.4.1 resolution: "commander@npm:9.4.1" checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13 @@ -5417,16 +4886,6 @@ __metadata: languageName: node linkType: hard -"compress-brotli@npm:^1.3.8": - version: 1.3.8 - resolution: "compress-brotli@npm:1.3.8" - dependencies: - "@types/json-buffer": ~3.0.0 - json-buffer: ~3.0.1 - checksum: de7589d692d40eb362f6c91070b5e51bc10b05a89eabb4a7c76c1aa21b625756f8c101c6999e4df0c4dc6199c5ca2e1353573bfdcca5615810f27485394162a5 - languageName: node - linkType: hard - "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -5795,18 +5254,18 @@ __metadata: linkType: hard "core-js-compat@npm:^3.25.1": - version: 3.25.1 - resolution: "core-js-compat@npm:3.25.1" + version: 3.25.4 + resolution: "core-js-compat@npm:3.25.4" dependencies: - browserslist: ^4.21.3 - checksum: 34dbec657adc2f660f4cd701709c9c5e27cbd608211c65df09458f80f3e357b9492ba1c5173e17cca72d889dcc6da01268cadf88fb407cf1726e76d301c6143e + browserslist: ^4.21.4 + checksum: 3913835f5abc815ee94ebef292811573c277f1e60fb9309a670fa795cd2c11e32d517cc35352be38be190cf5d43ef3d2fedc23bb7cf7ace375231276bdc5f31f languageName: node linkType: hard "core-js@npm:^3.2.1": - version: 3.23.3 - resolution: "core-js@npm:3.23.3" - checksum: f517546388e468bd3155afbf06f38f8fe0448134fe086c4ed9c4d371d52db71e80585073b59362948777e01f2377ef7064925e1a3d9312a1c56da47eadfaca9a + version: 3.25.4 + resolution: "core-js@npm:3.25.4" + checksum: bdcd545637082e8cfa7e47e33e0a210d91c6defea3869af3d2c39b4b66fef5683c83bd91760c32ae486497301a801a9862cc3064322859babd5b73cf601d1b84 languageName: node linkType: hard @@ -5923,7 +5382,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.1, debug@npm:^3.2.7": +"debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -6304,17 +5763,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.172": - version: 1.4.182 - resolution: "electron-to-chromium@npm:1.4.182" - checksum: 8c35474b6ec0ead74246eb0783e10c9c15bc41307aa86324a21ef7aecb02450080263d5a44f1bd843b689e4d65ea5c0d8e204b87dfcb990bbf816909eb49401d - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.202": - version: 1.4.249 - resolution: "electron-to-chromium@npm:1.4.249" - checksum: 830a35a157af7ae226f1528d727e369bb13f53bc7a4edefdf718651ace09d7d7b4bd7b70d33b5018b8eff6cf99ee58409b6c4140cd6d56350c1966f280ac5c93 +"electron-to-chromium@npm:^1.4.251": + version: 1.4.270 + resolution: "electron-to-chromium@npm:1.4.270" + checksum: e64bc9ec2cb060dd9d8e57f8c563516e95fd9a4671a7c8d530138307c0956c7bd0655dcb3d4fe15a5b034ba40693a7282595c7bafe039a8344b03c7f779ab3be languageName: node linkType: hard @@ -6387,10 +5839,10 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.3.0": - version: 4.3.1 - resolution: "entities@npm:4.3.1" - checksum: e8f6d2bac238494b2355e90551893882d2675142be7e7bdfcb15248ed0652a630678ba0e3a8dc750693e736cb6011f504c27dabeb4cd3330560092e88b105090 +"entities@npm:^4.2.0, entities@npm:^4.3.0, entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 languageName: node linkType: hard @@ -6446,33 +5898,34 @@ __metadata: linkType: hard "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": - version: 1.20.1 - resolution: "es-abstract@npm:1.20.1" + version: 1.20.3 + resolution: "es-abstract@npm:1.20.3" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.1 + get-intrinsic: ^1.1.3 get-symbol-description: ^1.0.0 has: ^1.0.3 has-property-descriptors: ^1.0.0 has-symbols: ^1.0.3 internal-slot: ^1.0.3 - is-callable: ^1.2.4 + is-callable: ^1.2.6 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 is-weakref: ^1.0.2 - object-inspect: ^1.12.0 + object-inspect: ^1.12.2 object-keys: ^1.1.1 - object.assign: ^4.1.2 + object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 string.prototype.trimend: ^1.0.5 string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f + checksum: 225f24966ed960868bcfa7b39b38c9f4b68d1e0351e4e052a199e3e2fd93838a28b050687a0edf1021c20173d0831d076ff33ec581de77ca8aded67e2e138a80 languageName: node linkType: hard @@ -6585,12 +6038,14 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.7.3": - version: 2.7.3 - resolution: "eslint-module-utils@npm:2.7.3" + version: 2.7.4 + resolution: "eslint-module-utils@npm:2.7.4" dependencies: debug: ^3.2.7 - find-up: ^2.1.0 - checksum: 77048263f309167a1e6a1e1b896bfb5ddd1d3859b2e2abbd9c32c432aee13d610d46e6820b1ca81b37fba437cf423a404bc6649be64ace9148a3062d1886a678 + peerDependenciesMeta: + eslint: + optional: true + checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 languageName: node linkType: hard @@ -6679,13 +6134,12 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.24.0": - version: 8.24.0 - resolution: "eslint@npm:8.24.0" +"eslint@npm:^8.25.0": + version: 8.25.0 + resolution: "eslint@npm:8.25.0" dependencies: - "@eslint/eslintrc": ^1.3.2 + "@eslint/eslintrc": ^1.3.3 "@humanwhocodes/config-array": ^0.10.5 - "@humanwhocodes/gitignore-to-minimatch": ^1.0.2 "@humanwhocodes/module-importer": ^1.0.1 ajv: ^6.10.0 chalk: ^4.0.0 @@ -6724,7 +6178,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: ca293ce7116599b742d7ab4d43db469beec22f40dd272092d809498be3cff3a7c567769f9763bdf6799aac13dd53447b93a99629b7b54092783046eb57eaced6 + checksum: 7acf2693b522b573657b53d2245b5522d3a131e4224b1cbf01e2c3579632fdbf62599284f68bc483e6e4eba23ae3643c9544744e0214a86e727cc361cedcd0fa languageName: node linkType: hard @@ -6864,20 +6318,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.0.1 - resolution: "expect@npm:29.0.1" - dependencies: - "@jest/expect-utils": ^29.0.1 - jest-get-type: ^29.0.0 - jest-matcher-utils: ^29.0.1 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 - checksum: 103d9ecd00d5caefa0e536cde7abefa767f66d0e9ed8e00cf9e1bc1a14dfcee02080ebb9857974250dc68f3e525a85d81796fc37e405838d4cdb3613d76e48a4 - languageName: node - linkType: hard - -"expect@npm:^29.1.2": +"expect@npm:^29.0.0, expect@npm:^29.1.2": version: 29.1.2 resolution: "expect@npm:29.1.2" dependencies: @@ -6897,7 +6338,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.15.5, express@npm:^4.18.1": +"express@npm:^4.15.5": version: 4.18.1 resolution: "express@npm:4.18.1" dependencies: @@ -6936,6 +6377,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.18.2": + version: 4.18.2 + resolution: "express@npm:4.18.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: ~1.1.2 + on-finished: 2.4.1 + parseurl: ~1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: ~2.0.7 + qs: 6.11.0 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037 + languageName: node + linkType: hard + "extend-shallow@npm:^2.0.1": version: 2.0.1 resolution: "extend-shallow@npm:2.0.1" @@ -6980,15 +6460,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": - version: 3.2.11 - resolution: "fast-glob@npm:3.2.11" + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: f473105324a7780a20c06de842e15ddbb41d3cb7e71d1e4fe6e8373204f22245d54f5ab9e2061e6a1c613047345954d29b022e0e76f5c28b1df9858179a0e6d7 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 languageName: node linkType: hard @@ -7037,11 +6517,11 @@ __metadata: linkType: hard "fb-watchman@npm:^2.0.0": - version: 2.0.1 - resolution: "fb-watchman@npm:2.0.1" + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" dependencies: bser: 2.1.1 - checksum: 8510230778ab3a51c27dffb1b76ef2c24fab672a42742d3c0a45c2e9d1e5f20210b1fbca33486088da4a9a3958bde96b5aec0a63aac9894b4e9df65c88b2cbd6 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 languageName: node linkType: hard @@ -7122,7 +6602,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0, find-up@npm:^2.1.0": +"find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: @@ -7180,9 +6660,9 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.2.6 - resolution: "flatted@npm:3.2.6" - checksum: 33b87aa88dfa40ca6ee31d7df61712bbbad3d3c05c132c23e59b9b61d34631b337a18ff2b8dc5553acdc871ec72b741e485f78969cf006124a3f57174de29a0e + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 languageName: node linkType: hard @@ -7193,7 +6673,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.15.0": +"follow-redirects@npm:^1.10.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -7203,16 +6683,6 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.14.9": - version: 1.15.1 - resolution: "follow-redirects@npm:1.15.1" - peerDependenciesMeta: - debug: - optional: true - checksum: 6aa4e3e3cdfa3b9314801a1cd192ba756a53479d9d8cca65bf4db3a3e8834e62139245cd2f9566147c8dfe2efff1700d3e6aefd103de4004a7b99985e71dd533 - languageName: node - linkType: hard - "foreach@npm:^2.0.4": version: 2.0.6 resolution: "foreach@npm:2.0.6" @@ -7220,10 +6690,10 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:1.7.1": - version: 1.7.1 - resolution: "form-data-encoder@npm:1.7.1" - checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 +"form-data-encoder@npm:^2.1.2": + version: 2.1.2 + resolution: "form-data-encoder@npm:2.1.2" + checksum: 5c6401e3ebd2ba2adfa151c9fbd1df5adae8b1dd7bca5b18ab25ad1f9b83e20ddffb6b9ff77f5006b93d7ec2032e22828c9543c0bd4b2bc5b05335c31a3ba5b9 languageName: node linkType: hard @@ -7448,14 +6918,14 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.2 - resolution: "get-intrinsic@npm:1.1.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3": + version: 1.1.3 + resolution: "get-intrinsic@npm:1.1.3" dependencies: function-bind: ^1.1.1 has: ^1.0.3 has-symbols: ^1.0.3 - checksum: 252f45491f2ba88ebf5b38018020c7cc3279de54b1d67ffb70c0cdf1dfa8ab31cd56467b5d117a8b4275b7a4dde91f86766b163a17a850f036528a7b2faafb2b + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a languageName: node linkType: hard @@ -7503,15 +6973,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 - languageName: node - linkType: hard - "get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -7662,11 +7123,11 @@ __metadata: linkType: hard "globals@npm:^13.15.0": - version: 13.16.0 - resolution: "globals@npm:13.16.0" + version: 13.17.0 + resolution: "globals@npm:13.17.0" dependencies: type-fest: ^0.20.2 - checksum: e571b28462b8922a29ac78c8df89848cfd5dc9bdd5d8077440c022864f512a4aae82e7561a2f366337daa86fd4b366aec16fd3f08686de387e4089b01be6cb14 + checksum: fbaf4112e59b92c9f5575e85ce65e9e17c0b82711196ec5f58beb08599bbd92fd72703d6dfc9b080381fd35b644e1b11dcf25b38cc2341ec21df942594cbc8ce languageName: node linkType: hard @@ -7712,23 +7173,21 @@ __metadata: linkType: hard "got@npm:^12.1.0": - version: 12.1.0 - resolution: "got@npm:12.1.0" + version: 12.5.1 + resolution: "got@npm:12.5.1" dependencies: - "@sindresorhus/is": ^4.6.0 + "@sindresorhus/is": ^5.2.0 "@szmarczak/http-timer": ^5.0.1 - "@types/cacheable-request": ^6.0.2 - "@types/responselike": ^1.0.0 - cacheable-lookup: ^6.0.4 - cacheable-request: ^7.0.2 + cacheable-lookup: ^7.0.0 + cacheable-request: ^10.2.1 decompress-response: ^6.0.0 - form-data-encoder: 1.7.1 + form-data-encoder: ^2.1.2 get-stream: ^6.0.1 http2-wrapper: ^2.1.10 lowercase-keys: ^3.0.0 p-cancelable: ^3.0.0 - responselike: ^2.0.0 - checksum: 1cc9af6ca511338a7f1bbb0943999e6ac324ea3c7d826066c02e530b4ac41147b1a4cadad21b28c3938de82185ac99c33d64a3a4560c6e0b0b125191ba6ee619 + responselike: ^3.0.0 + checksum: 479a279e8f0ba39270d500e8998dda897c850a9f43eef716c58fcaa7b5049e74ca3fd8ab70be1e2a59a5c8b59a83b9deab16d4e523423bb1e2dfe17401750efa languageName: node linkType: hard @@ -7850,7 +7309,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -7926,16 +7385,7 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^5.0.0": - version: 5.0.0 - resolution: "hosted-git-info@npm:5.0.0" - dependencies: - lru-cache: ^7.5.1 - checksum: 515e69463d123635f70d70656c5ec648951ffc1987f92a87cb4a038e1794bfed833cf87569b358b137ebbc75d992c073ed0408d420c9e5b717c2b4f0a291490c - languageName: node - linkType: hard - -"hosted-git-info@npm:^5.1.0": +"hosted-git-info@npm:^5.0.0, hosted-git-info@npm:^5.1.0": version: 5.1.0 resolution: "hosted-git-info@npm:5.1.0" dependencies: @@ -7985,7 +7435,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": +"http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42 @@ -8281,10 +7731,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.8 - resolution: "ip@npm:1.1.8" - checksum: a2ade53eb339fb0cbe9e69a44caab10d6e3784662285eb5d2677117ee4facc33a64679051c35e0dfdb1a3983a51ce2f5d2cb36446d52e10d01881789b76e28fb +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard @@ -8344,10 +7794,10 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.6": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard @@ -8363,11 +7813,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": - version: 2.9.0 - resolution: "is-core-module@npm:2.9.0" + version: 2.10.0 + resolution: "is-core-module@npm:2.10.0" dependencies: has: ^1.0.3 - checksum: b27034318b4b462f1c8f1dfb1b32baecd651d891a4e2d1922135daeff4141dfced2b82b07aef83ef54275c4a3526aa38da859223664d0868ca24182badb784ce + checksum: 0f3f77811f430af3256fa7bbc806f9639534b140f8ee69476f632c3e1eb4e28a38be0b9d1b8ecf596179c841b53576129279df95e7051d694dac4ceb6f967593 languageName: node linkType: hard @@ -8710,12 +8160,12 @@ __metadata: linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.4 - resolution: "istanbul-reports@npm:3.1.4" + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard @@ -8828,18 +8278,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-diff@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d - languageName: node - linkType: hard - "jest-diff@npm:^29.1.2": version: 29.1.2 resolution: "jest-diff@npm:29.1.2" @@ -8940,18 +8378,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-matcher-utils@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.0.1 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: 1ad41a91d05703b3396c9a344a4c1afd9155913403289b0d5282e42e67540418f17f802a60bae4e3931eb80a08d42b4e6f1e04835d4d122cc83ccd68fe181524 - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.1.2": version: 29.1.2 resolution: "jest-matcher-utils@npm:29.1.2" @@ -8964,23 +8390,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-message-util@npm:29.0.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.0.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.0.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: cef700aeb8746d1e55a39ba4d9bfc91d580373cf4afca22ee9499dee7ab0147ea8349ccb0c2b2d89ab5f374a9f67ec0560dc6eeb123a28795fafb6bf0ac5f9a3 - languageName: node - linkType: hard - "jest-message-util@npm:^29.1.2": version: 29.1.2 resolution: "jest-message-util@npm:29.1.2" @@ -9155,35 +8564,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0": - version: 29.0.2 - resolution: "jest-util@npm:29.0.2" - dependencies: - "@jest/types": ^29.0.2 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: ee7a264ac9968f5c2fc6d79b7b76c8df4b22762e3c45c92a35e66e81b9fb45c341b03e5e18d8c4de4cd19ab7faf70a67ec419e6b57b5dfc61b84e96719649838 - languageName: node - linkType: hard - -"jest-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-util@npm:29.0.1" - dependencies: - "@jest/types": ^29.0.1 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 7404658788d9a8f3c69b946cbf7d9a773f1b353474792ab4d63b0e7f44cf07be87999102b49f2396e205a43b1b995a742ccc1d4a23966594c4b8976d0d116935 - languageName: node - linkType: hard - -"jest-util@npm:^29.1.2": +"jest-util@npm:^29.0.0, jest-util@npm:^29.1.2": version: 29.1.2 resolution: "jest-util@npm:29.1.2" dependencies: @@ -9284,9 +8665,9 @@ __metadata: linkType: hard "js-sdsl@npm:^4.1.4": - version: 4.1.4 - resolution: "js-sdsl@npm:4.1.4" - checksum: 1977cea4ab18e0e03e28bdf0371d8b443fad65ca0988e0faa216406faf6bb943714fe8f7cc7a5bfe5f35ba3d94ddae399f4d10200f547f2c3320688b0670d726 + version: 4.1.5 + resolution: "js-sdsl@npm:4.1.5" + checksum: 695f657ddc5be462b97cac4e8e60f37de28d628ee0e23016baecff0bb584a18dddb5caeac537a775030f180b5afd62133ac4481e7024c8d03a62d73e4da0713e languageName: node linkType: hard @@ -9338,7 +8719,7 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.1, json-buffer@npm:~3.0.1": +"json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 @@ -9579,13 +8960,12 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.0.0": - version: 4.3.3 - resolution: "keyv@npm:4.3.3" +"keyv@npm:^4.5.0": + version: 4.5.0 + resolution: "keyv@npm:4.5.0" dependencies: - compress-brotli: ^1.3.8 json-buffer: 3.0.1 - checksum: bcc946eeec3407fb3b42d831ce985357162113c5f07a8c45c12ede39704ba2d99be4c3dded76d2d2d2a2366627e42440bdde24393216164156928399949c12a1 + checksum: d294873cf88ec8f691e5edeb7b4b884f886c5f021a01902a0e243c362449db2b55419d7fb7187d059add747b7398321e39e44d391b65f94935174ce13452714d languageName: node linkType: hard @@ -9964,13 +9344,6 @@ __metadata: languageName: node linkType: hard -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 - languageName: node - linkType: hard - "lowercase-keys@npm:^3.0.0": version: 3.0.0 resolution: "lowercase-keys@npm:3.0.0" @@ -9998,9 +9371,9 @@ __metadata: linkType: hard "lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": - version: 7.12.0 - resolution: "lru-cache@npm:7.12.0" - checksum: fdb62262978393df7a4bd46a072bc5c3808c50ca5a347a82bb9459410efd841b7bae50655c3cf9004c70d12c756cf6d018f6bff155a16cdde9eba9a82899b5eb + version: 7.14.0 + resolution: "lru-cache@npm:7.14.0" + checksum: efdd329f2c1bb790b71d497c6c59272e6bc2d7dd060ba55fc136becd3dd31fc8346edb446275504d94cb60d3c8385dbf5267b79b23789e409b2bdf302d13f0d7 languageName: node linkType: hard @@ -10021,8 +9394,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": - version: 10.1.8 - resolution: "make-fetch-happen@npm:10.1.8" + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.1.0 @@ -10040,7 +9413,7 @@ __metadata: promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^9.0.0 - checksum: 5fe9fd9da5368a8a4fe9a3ea5b9aa15f1e91c9ab703cd9027a6b33840ecc8a57c182fbe1c767c139330a88c46a448b1f00da5e32065cec373aff2450b3da54ee + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c languageName: node linkType: hard @@ -10260,13 +9633,6 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^1.0.0": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 - languageName: node - linkType: hard - "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" @@ -10274,6 +9640,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 + languageName: node + linkType: hard + "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -10345,8 +9718,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.0 - resolution: "minipass-fetch@npm:2.1.0" + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -10355,7 +9728,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 languageName: node linkType: hard @@ -10397,11 +9770,11 @@ __metadata: linkType: hard "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.3.4 - resolution: "minipass@npm:3.3.4" + version: 3.3.5 + resolution: "minipass@npm:3.3.5" dependencies: yallist: ^4.0.0 - checksum: 5d95a7738c54852ba78d484141e850c792e062666a2d0c681a5ac1021275beb7e1acb077e59f9523ff1defb80901aea4e30fac10ded9a20a25d819a42916ef1b + checksum: f89f02bcaa0e0e4bb4c44ec796008e69fbca62db0aba6ead1bc57d25bdaefdf42102130f4f9ecb7d9c6b6cd35ff7b0c7b97d001d3435da8e629fb68af3aea57e languageName: node linkType: hard @@ -10424,7 +9797,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.5": +"mkdirp@npm:^0.5.6": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -10624,8 +9997,8 @@ __metadata: linkType: hard "node-gyp@npm:^9.0.0, node-gyp@npm:latest": - version: 9.0.0 - resolution: "node-gyp@npm:9.0.0" + version: 9.1.0 + resolution: "node-gyp@npm:9.1.0" dependencies: env-paths: ^2.2.0 glob: ^7.1.4 @@ -10639,7 +10012,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: 4d8ef8860f7e4f4d86c91db3f519d26ed5cc23b48fe54543e2afd86162b4acbd14f21de42a5db344525efb69a991e021b96a68c70c6e2d5f4a5cb770793da6d3 + checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 languageName: node linkType: hard @@ -10670,13 +10043,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.5": - version: 2.0.5 - resolution: "node-releases@npm:2.0.5" - checksum: e85d949addd19f8827f32569d2be5751e7812ccf6cc47879d49f79b5234ff4982225e39a3929315f96370823b070640fb04d79fc0ddec8b515a969a03493a42f - languageName: node - linkType: hard - "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -10761,14 +10127,14 @@ __metadata: linkType: hard "normalize-package-data@npm:^4.0.0": - version: 4.0.0 - resolution: "normalize-package-data@npm:4.0.0" + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" dependencies: hosted-git-info: ^5.0.0 is-core-module: ^2.8.1 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 - checksum: b0f47de4295a0f8499bd478e84b9f9592a29f65227c2b4446ae80f7dff6e7a5ec6ef25ea8f06f3dcb9b7b7d945c2daa274385925b3d85e77e34eaffa0b42e316 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 languageName: node linkType: hard @@ -10779,14 +10145,14 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 +"normalize-url@npm:^7.1.0": + version: 7.2.0 + resolution: "normalize-url@npm:7.2.0" + checksum: 7753f081ee997520c9cd855f06975d7ac24b1ef58002e310d5058c831b9a6165ec2ec9fc0c5bc9e886e1257affaffa7c36731ae39073fcf74af07197997d4fb6 languageName: node linkType: hard -"npm-bundled@npm:^1.1.1, npm-bundled@npm:^1.1.2": +"npm-bundled@npm:^1.1.1": version: 1.1.2 resolution: "npm-bundled@npm:1.1.2" dependencies: @@ -10795,9 +10161,18 @@ __metadata: languageName: node linkType: hard -"npm-check-updates@npm:^16.3.8": - version: 16.3.8 - resolution: "npm-check-updates@npm:16.3.8" +"npm-bundled@npm:^2.0.0": + version: 2.0.1 + resolution: "npm-bundled@npm:2.0.1" + dependencies: + npm-normalize-package-bin: ^2.0.0 + checksum: 7747293985c48c5268871efe691545b03731cb80029692000cbdb0b3344b9617be5187aa36281cabbe6b938e3651b4e87236d1c31f9e645eef391a1a779413e6 + languageName: node + linkType: hard + +"npm-check-updates@npm:^16.3.11": + version: 16.3.11 + resolution: "npm-check-updates@npm:16.3.11" dependencies: chalk: ^5.0.1 cli-table: ^0.3.11 @@ -10830,7 +10205,7 @@ __metadata: bin: ncu: build/src/bin/cli.js npm-check-updates: build/src/bin/cli.js - checksum: cc8c744742fd349567032bee18896e90a2ee7251ad9a1b70c956eb6c9c95d247b7c1b0d18adf6171ceca3c559e274aafd15508a2c382440223327bf2dec62844 + checksum: fffd287ac17fa8a7349773dd0f04e1cf6821f2e01cd98b875de8986933bd8d15fab6bce2b9711710a8a9d4e3d444441ea14c79efa4d1ecc94b4d78109a33adff languageName: node linkType: hard @@ -10850,47 +10225,54 @@ __metadata: languageName: node linkType: hard +"npm-normalize-package-bin@npm:^2.0.0": + version: 2.0.0 + resolution: "npm-normalize-package-bin@npm:2.0.0" + checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 + languageName: node + linkType: hard + "npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-package-arg@npm:9.1.0" + version: 9.1.2 + resolution: "npm-package-arg@npm:9.1.2" dependencies: hosted-git-info: ^5.0.0 proc-log: ^2.0.1 semver: ^7.3.5 validate-npm-package-name: ^4.0.0 - checksum: 277c21477731a4f1e31bde36f0db5f5470deb2a008db2aaf1b015d588b23cb225c75f90291ea241235e86682a03de972bbe69fc805c921a786ea9616955990b9 + checksum: 3793488843985ed71deb14fcba7c068d8ed03a18fd8f6b235c6a64465c9a25f60261598106d5cc8677c0bee9548e405c34c2e3c7a822e3113d3389351c745dfa languageName: node linkType: hard "npm-packlist@npm:^5.1.0": - version: 5.1.1 - resolution: "npm-packlist@npm:5.1.1" + version: 5.1.3 + resolution: "npm-packlist@npm:5.1.3" dependencies: glob: ^8.0.1 ignore-walk: ^5.0.1 - npm-bundled: ^1.1.2 - npm-normalize-package-bin: ^1.0.1 + npm-bundled: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 bin: npm-packlist: bin/index.js - checksum: 28dab153744ceb4695b82a9032d14aa2bfb855d38344a09052673d07860a4d8725f808ed23996e6f2792c48e11f5d147632c159f798d2c24dac92b51a884f0c6 + checksum: 94cc9c66740e8f80243301de85eb0a2cec5bbd570c3f26b6ad7af1a3eca155f7e810580dc7ea4448f12a8fd82f6db307e7132a5fe69e157eb45b325acadeb22a languageName: node linkType: hard "npm-pick-manifest@npm:^7.0.0": - version: 7.0.1 - resolution: "npm-pick-manifest@npm:7.0.1" + version: 7.0.2 + resolution: "npm-pick-manifest@npm:7.0.2" dependencies: npm-install-checks: ^5.0.0 - npm-normalize-package-bin: ^1.0.1 + npm-normalize-package-bin: ^2.0.0 npm-package-arg: ^9.0.0 semver: ^7.3.5 - checksum: 9a4a8e64d2214783b2b74a361845000f5d91bb40c7858e2a30af2ac7876d9296efc37f8cacf60335e96a45effee2035b033d9bdefb4889757cc60d85959accbb + checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc languageName: node linkType: hard "npm-registry-fetch@npm:^13.0.1": - version: 13.1.1 - resolution: "npm-registry-fetch@npm:13.1.1" + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 @@ -10899,7 +10281,7 @@ __metadata: minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 - checksum: e085faf5cdc1cfe9b8f825065a0823531b2a28799d84614b3971e344dde087f9089c0f0220360771a81f110c5444978c6f7309084ff7d7d396252b068148bb44 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 languageName: node linkType: hard @@ -11095,7 +10477,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -11109,15 +10491,15 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 languageName: node linkType: hard @@ -11589,11 +10971,11 @@ __metadata: linkType: hard "parse5@npm:^7.0.0": - version: 7.0.0 - resolution: "parse5@npm:7.0.0" + version: 7.1.1 + resolution: "parse5@npm:7.1.1" dependencies: - entities: ^4.3.0 - checksum: 7da5d61cc18eb36ffa71fc861e65cbfd1f23d96483a6631254e627be667dbc9c93ac0b0e6cb17a13a2e4033dab19bfb2f76f38e5936cfb57240ed49036a83fcc + entities: ^4.4.0 + checksum: 8f72fbfa6df83a3f29f58e1818f7bd46b47ff3e26d79c74e10b8fc7ef7ee76163f205113f1b2f6a5b8dc4e31e726f490444f04890cead6e974dbcbe8172b1321 languageName: node linkType: hard @@ -11795,13 +11177,13 @@ __metadata: linkType: hard "portfinder@npm:^1.0.26": - version: 1.0.28 - resolution: "portfinder@npm:1.0.28" + version: 1.0.32 + resolution: "portfinder@npm:1.0.32" dependencies: - async: ^2.6.2 - debug: ^3.1.1 - mkdirp: ^0.5.5 - checksum: 91fef602f13f8f4c64385d0ad2a36cc9dc6be0b8d10a2628ee2c3c7b9917ab4fefb458815b82cea2abf4b785cd11c9b4e2d917ac6fa06f14b6fa880ca8f8928c + async: ^2.6.4 + debug: ^3.2.7 + mkdirp: ^0.5.6 + checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d languageName: node linkType: hard @@ -11831,18 +11213,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.1": - version: 29.0.1 - resolution: "pretty-format@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: d31e72769b0bc0453123c52259dba28551cfc3f02b4968fa286c14dcaed08c1e68e45d5383d425f1ac5ab829c908ebe18f9aee4e4df507be5fc82ab51b1e8995 - languageName: node - linkType: hard - -"pretty-format@npm:^29.1.2": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.1.2": version: 29.1.2 resolution: "pretty-format@npm:29.1.2" dependencies: @@ -12096,14 +11467,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.9.3": - version: 6.9.3 - resolution: "qs@npm:6.9.3" - checksum: 89cd1b5e521c19a7e0a7a056ddc261c5c30889664608cf9ce6085f9f25606fc48568cf6a6249e641b4b5c04dac7889e3b82133142523abf397228eb4f488fc38 - languageName: node - linkType: hard - -"qs@npm:^6.10.3, qs@npm:^6.4.0, qs@npm:^6.5.2, qs@npm:^6.9.3": +"qs@npm:6.11.0, qs@npm:^6.10.3, qs@npm:^6.11.0, qs@npm:^6.4.0, qs@npm:^6.5.2, qs@npm:^6.9.3": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -12112,6 +11476,13 @@ __metadata: languageName: node linkType: hard +"qs@npm:6.9.3": + version: 6.9.3 + resolution: "qs@npm:6.9.3" + checksum: 89cd1b5e521c19a7e0a7a056ddc261c5c30889664608cf9ce6085f9f25606fc48568cf6a6249e641b4b5c04dac7889e3b82133142523abf397228eb4f488fc38 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12219,14 +11590,14 @@ __metadata: linkType: hard "read-package-json@npm:^5.0.0": - version: 5.0.1 - resolution: "read-package-json@npm:5.0.1" + version: 5.0.2 + resolution: "read-package-json@npm:5.0.2" dependencies: glob: ^8.0.1 json-parse-even-better-errors: ^2.3.1 normalize-package-data: ^4.0.0 - npm-normalize-package-bin: ^1.0.1 - checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d + npm-normalize-package-bin: ^2.0.0 + checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a languageName: node linkType: hard @@ -12366,12 +11737,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.0.1": - version: 10.0.1 - resolution: "regenerate-unicode-properties@npm:10.0.1" +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" dependencies: regenerate: ^1.4.2 - checksum: 1b638b7087d8143e5be3e20e2cda197ea0440fa0bc2cc49646b2f50c5a2b1acdc54b21e4215805a5a2dd487c686b2291accd5ad00619534098d2667e76247754 + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 languageName: node linkType: hard @@ -12417,16 +11788,16 @@ __metadata: linkType: hard "regexpu-core@npm:^5.1.0": - version: 5.1.0 - resolution: "regexpu-core@npm:5.1.0" + version: 5.2.1 + resolution: "regexpu-core@npm:5.2.1" dependencies: regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.0.1 - regjsgen: ^0.6.0 - regjsparser: ^0.8.2 + regenerate-unicode-properties: ^10.1.0 + regjsgen: ^0.7.1 + regjsparser: ^0.9.1 unicode-match-property-ecmascript: ^2.0.0 unicode-match-property-value-ecmascript: ^2.0.0 - checksum: 7b4eb8d182d9d10537a220a93138df5bc7eaf4ed53e36b95e8427d33ed8a2b081468f1a15d3e5fcee66517e1df7f5ca180b999e046d060badd97150f2ffe87b2 + checksum: c1244db79f7a4597414cd7fdf5171fa73905f0cbc684385c78127fc6198f9cade8fe829a1c4036c8ec57ac75b1ffb8c196451abdd2e153f26a4d8043fa10bbb3 languageName: node linkType: hard @@ -12448,21 +11819,21 @@ __metadata: languageName: node linkType: hard -"regjsgen@npm:^0.6.0": - version: 0.6.0 - resolution: "regjsgen@npm:0.6.0" - checksum: c5158ebd735e75074e41292ade1ff05d85566d205426cc61501e360c450a63baced8512ee3ae238e5c0a0e42969563c7875b08fa69d6f0402daf36bcb3e4d348 +"regjsgen@npm:^0.7.1": + version: 0.7.1 + resolution: "regjsgen@npm:0.7.1" + checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc languageName: node linkType: hard -"regjsparser@npm:^0.8.2": - version: 0.8.4 - resolution: "regjsparser@npm:0.8.4" +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: d069b932491761cda127ce11f6bd2729c3b1b394a35200ec33f1199e937423db28ceb86cf33f0a97c76ecd7c0f8db996476579eaf0d80a1f74c1934f4ca8b27a + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc languageName: node linkType: hard @@ -12585,12 +11956,12 @@ __metadata: languageName: node linkType: hard -"responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" dependencies: - lowercase-keys: ^2.0.0 - checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + lowercase-keys: ^3.0.0 + checksum: e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e languageName: node linkType: hard @@ -12661,10 +12032,21 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + "safe-stable-stringify@npm:^2.3.1": - version: 2.3.1 - resolution: "safe-stable-stringify@npm:2.3.1" - checksum: a0a0bad0294c3e2a9d1bf3cf2b1096dfb83c162d09a5e4891e488cce082120bd69161d2a92aae7fc48255290f17700decae9c89a07fe139794e61b5c8b411377 + version: 2.4.0 + resolution: "safe-stable-stringify@npm:2.4.0" + checksum: 5c9e4b2b2423470becafe232244948e7ce9545baaa65d67965e8c36536c93d2f7b4c1ddeb4bba8a912d0325e02c7691f24dd4de6935a9c1221402c17582ae1c1 languageName: node linkType: hard @@ -13011,12 +12393,12 @@ __metadata: linkType: hard "socks@npm:^2.6.2": - version: 2.6.2 - resolution: "socks@npm:2.6.2" + version: 2.7.1 + resolution: "socks@npm:2.7.1" dependencies: - ip: ^1.1.5 + ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 languageName: node linkType: hard @@ -13096,9 +12478,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.11 - resolution: "spdx-license-ids@npm:3.0.11" - checksum: 1da1acb090257773e60b022094050e810ae9fec874dc1461f65dc0400cd42dd830ab2df6e64fb49c2db3dce386dd0362110780e1b154db7c0bb413488836aaeb + version: 3.0.12 + resolution: "spdx-license-ids@npm:3.0.12" + checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 languageName: node linkType: hard @@ -13456,8 +12838,8 @@ __metadata: linkType: hard "superagent@npm:^8.0.0": - version: 8.0.0 - resolution: "superagent@npm:8.0.0" + version: 8.0.2 + resolution: "superagent@npm:8.0.2" dependencies: component-emitter: ^1.3.0 cookiejar: ^2.1.3 @@ -13467,10 +12849,9 @@ __metadata: formidable: ^2.0.1 methods: ^1.1.2 mime: 2.6.0 - qs: ^6.10.3 - readable-stream: ^3.6.0 + qs: ^6.11.0 semver: ^7.3.7 - checksum: 14343e59327eafd85fa230acb876017079d5efcecc72a56566abc0f965220bb460af2e070dddecd9e2856410b2d2b318d81d9cc1d342aa5922da93c29a295dd7 + checksum: 5f51cd854e7c9f64ae5e4e4485c460e6ac3cbd6f115f96f7579c917715cbe0c3871c53c3888fd1cbb8e190387e944f13df65ec5c68ef6618608cef2cf39852f1 languageName: node linkType: hard @@ -13519,12 +12900,12 @@ __metadata: linkType: hard "supports-hyperlinks@npm:^2.0.0": - version: 2.2.0 - resolution: "supports-hyperlinks@npm:2.2.0" + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 languageName: node linkType: hard @@ -13547,9 +12928,9 @@ __metadata: linkType: hard "swagger-ui-dist@npm:>=4.11.0": - version: 4.12.0 - resolution: "swagger-ui-dist@npm:4.12.0" - checksum: 24d1ac0590dd09f77fa6fa237620a5fef41e3a14614f15dfbac5e3dc6891b4a6083aa6ae8325fcec7ac35ed8b783541c9d15ba3ec813639ea751d84cae3846a7 + version: 4.14.2 + resolution: "swagger-ui-dist@npm:4.14.2" + checksum: 8d452a840bce3a2fc2f0a4b803c5458654c934daaa09a1485ab85a17bd050d092ebb4cd126920bf36bec3f349316516e178ef4a199a122a47a25a71f06549453 languageName: node linkType: hard @@ -14009,9 +13390,9 @@ __metadata: linkType: hard "type-fest@npm:^2.13.0": - version: 2.16.0 - resolution: "type-fest@npm:2.16.0" - checksum: 897fc5f6833de5ade5c4841d034bdfb6aaa168f24f725354ad13320b2a463b9df03a7a664b836b4c3bc7d9f92b22a25c26fe24668a35caf3b7a9ea5fcb847b8d + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 languageName: node linkType: hard @@ -14085,11 +13466,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.16.2 - resolution: "uglify-js@npm:3.16.2" + version: 3.17.2 + resolution: "uglify-js@npm:3.17.2" bin: uglifyjs: bin/uglifyjs - checksum: 5b62e748b7fa1d982f0949ed1876b9367dcde4782f74159f4ea0b3d130835336eb0245e090456ec057468d937eb016114677bb38a7a4fdc7f68c3d002ca760ee + checksum: 128233638176abe6cc0ec0f1dbae7bcb3f02edd78eb5c7752b4f379ec9d29032cd2edf06b2522dbeba0a1f05afb25f6eaffe638581da6d8554bd4c060d6622b1 languageName: node linkType: hard @@ -14120,9 +13501,9 @@ __metadata: linkType: hard "undici@npm:^5.4.0": - version: 5.7.0 - resolution: "undici@npm:5.7.0" - checksum: 3a8133697ee7124f4998c01dcb2255206a85bdf99cc75e97d2535d752bc853a9b39e149e7292479c6c170602947c7c77403081ced10ffbffcbe9fb077e40c6fb + version: 5.10.0 + resolution: "undici@npm:5.10.0" + checksum: 7ba2b71dccc74cd2bdf645b83e9aaef374ae04855943d0a2f42a3d0b9e5556f37cc9b5156fb5288277a2fa95fd46a56f3ae0d5cf73db3f008d75ec41104b136c languageName: node linkType: hard @@ -14151,27 +13532,27 @@ __metadata: linkType: hard "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" - checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b languageName: node linkType: hard -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f languageName: node linkType: hard -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c languageName: node linkType: hard @@ -14205,21 +13586,7 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.4": - version: 1.0.4 - resolution: "update-browserslist-db@npm:1.0.4" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - browserslist-lint: cli.js - checksum: 7c7da28d0fc733b17e01c8fa9385ab909eadce64b8ea644e9603867dc368c2e2a6611af8247e72612b23f9e7cb87ac7c7585a05ff94e1759e9d646cbe9bf49a7 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.5": +"update-browserslist-db@npm:^1.0.9": version: 1.0.9 resolution: "update-browserslist-db@npm:1.0.9" dependencies: @@ -14537,9 +13904,10 @@ __metadata: linkType: hard "winston@npm:^3.3.3, winston@npm:^3.7.2": - version: 3.8.1 - resolution: "winston@npm:3.8.1" + version: 3.8.2 + resolution: "winston@npm:3.8.2" dependencies: + "@colors/colors": 1.5.0 "@dabh/diagnostics": ^2.0.2 async: ^3.2.3 is-stream: ^2.0.0 @@ -14550,7 +13918,7 @@ __metadata: stack-trace: 0.0.x triple-beam: ^1.3.0 winston-transport: ^4.5.0 - checksum: 14637222a4239f1ee7e629dbbf0c65161abe95eeb7acd275caf210c5d47d93254fdb007291ea75b5e241d4bb6dd3c29d000bd04ae5420a347711ae7cd0b2da88 + checksum: f7b901798b92ab9e93c850110bf6e98500e9a0e762b62dab410cf928b2a4145533dfa6d3d2b24f7bf0dc94b53808d5bd28aaaeff9a4b43b89ea4c798cce308ea languageName: node linkType: hard @@ -14638,18 +14006,18 @@ __metadata: linkType: hard "write-file-atomic@npm:^4.0.1": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard "ws@npm:^7.4.2": - version: 7.5.8 - resolution: "ws@npm:7.5.8" + version: 7.5.9 + resolution: "ws@npm:7.5.9" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -14658,7 +14026,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 49479ccf3ddab6500c5906fbcc316e9c8cd44b0ffb3903a6c1caf9b38cb9e06691685722a4c642cfa7d4c6eb390424fc3142cd4f8b940cfc7a9ce9761b1cd65b + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 languageName: node linkType: hard @@ -14740,7 +14108,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.1.1, yaml@npm:^2.1.1": +"yaml@npm:2.1.1": version: 2.1.1 resolution: "yaml@npm:2.1.1" checksum: f48bb209918aa57cfaf78ef6448d1a1f8187f45c746f933268b7023dc59e5456004611879126c9bb5ea55b0a2b1c2b392dfde436931ece0c703a3d754562bb96 @@ -14754,6 +14122,13 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.1.1": + version: 2.1.2 + resolution: "yaml@npm:2.1.2" + checksum: 89f3d96215405990aa17cdacd78c17537d415e20be3eb7ff1a058a9b1d7136d4a61a84e6b47daa82558a977ae08751a6c1a80b88f99ee7cbdd51ddd78cd0d8f6 + languageName: node + linkType: hard + "yamljs@npm:^0.3.0": version: 0.3.0 resolution: "yamljs@npm:0.3.0" @@ -14767,7 +14142,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:21.0.1, yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.0.1": +"yargs-parser@npm:21.0.1": version: 21.0.1 resolution: "yargs-parser@npm:21.0.1" checksum: c3ea2ed12cad0377ce3096b3f138df8267edf7b1aa7d710cd502fe16af417bafe4443dd71b28158c22fcd1be5dfd0e86319597e47badf42ff83815485887323a @@ -14801,6 +14176,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^21.0.0, yargs-parser@npm:^21.0.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + "yargs@npm:17.0.1": version: 17.0.1 resolution: "yargs@npm:17.0.1" @@ -14871,17 +14253,17 @@ __metadata: linkType: hard "yargs@npm:^17.0.0, yargs@npm:^17.0.1, yargs@npm:^17.3.1, yargs@npm:^17.4.0": - version: 17.5.1 - resolution: "yargs@npm:17.5.1" + version: 17.6.0 + resolution: "yargs@npm:17.6.0" dependencies: - cliui: ^7.0.2 + cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.0.0 - checksum: 00d58a2c052937fa044834313f07910fd0a115dec5ee35919e857eeee3736b21a4eafa8264535800ba8bac312991ce785ecb8a51f4d2cc8c4676d865af1cfbde + checksum: 604bdb4a6395a870540d2f3fea083c8e28441f12da8fd05b172b1e68480f00ed73d76be4a05fac19de9bf55ec7729b41e81cf555cccaed700aa192e4fff64872 languageName: node linkType: hard