Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: transform iso headers for test server fspiop payload #507

Merged
merged 5 commits into from
Oct 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions modules/api-svc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-api-svc",
"version": "20.8.0-snapshot.29",
"version": "20.8.0-snapshot.30",
"description": "An adapter for connecting to Mojaloop API enabled switches.",
"main": "src/index.js",
"types": "src/index.d.ts",
Expand Down Expand Up @@ -69,7 +69,7 @@
"@mojaloop/central-services-metrics": "^12.0.8",
"@mojaloop/central-services-shared": "18.11.0",
"@mojaloop/event-sdk": "^14.1.1",
"@mojaloop/ml-schema-transformer-lib": "2.3.3",
"@mojaloop/ml-schema-transformer-lib": "2.3.4",
"@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^",
"@mojaloop/sdk-standard-components": "19.3.5",
"ajv": "8.17.1",
Expand Down
6 changes: 4 additions & 2 deletions modules/api-svc/src/InboundServer/middlewares.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const {
errorMessages
} = require('@mojaloop/central-services-shared').Util.Hapi.FSPIOPHeaderValidation;
const { TransformFacades } = require('@mojaloop/ml-schema-transformer-lib');
const { transformHeadersIsoToFspiop } = require('../lib/utils');
const Config = require('../config');
const { API_TYPES } = require('../constants');

Expand Down Expand Up @@ -144,16 +145,17 @@ const assignFspiopIdentifier = () => async (ctx, next) => {
&& ctx.method.toLowerCase() !== 'delete'
) {
try {
let transformOpts = {
const transformOpts = {
headers: ctx.request.headers,
body: ctx.request.body,
params: ctx.state.path.params
};
const isError = ctx.state.path.pattern.endsWith('error');
const resourceType = ctx.state.path.pattern.split('/')[1];
const fspiopBody = (await TransformFacades.FSPIOPISO20022[resourceType][ctx.method.toLowerCase() + (isError ? 'Error' : '')](transformOpts)).body;
const fspiopHeaders = transformHeadersIsoToFspiop(ctx.request.headers);
ctx.state.transformedFspiopPayload = {
headers: ctx.request.headers,
headers: fspiopHeaders,
body: fspiopBody
};
} catch {
Expand Down
21 changes: 21 additions & 0 deletions modules/api-svc/src/lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,27 @@ const createAuthClient = (conf, logger) => {
});
};

const transformIsoHeader = (headerValue, headerKey) => {
if (headerKey.toLowerCase() === 'content-type' || headerKey.toLowerCase() === 'accept') {
// todo: a better implementation will be to use regex or break up the header value into tokens and then replace the necessary parts and rejoin the tokens
// for now, we are just replacing the string '.iso20022' with an empty string
return headerValue.replace('.iso20022', '');
}
return headerValue;
};

const transformHeadersIsoToFspiop = (isoHeaders) => {
const headersToTransform = ['content-type', 'accept'];
const fspiopHeaders = {};

Object.keys(isoHeaders).forEach((key) => {
fspiopHeaders[key] = headersToTransform.includes(key.toLowerCase()) ? transformIsoHeader(isoHeaders[key], key) : isoHeaders[key];
});

return fspiopHeaders;
};

module.exports = {
createAuthClient,
transformHeadersIsoToFspiop
};
20 changes: 20 additions & 0 deletions modules/api-svc/test/unit/lib/utils.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

const { transformHeadersIsoToFspiop } = require('~/lib/utils');

describe('utils', () => {
describe('transformHeadersIsoToFspiop', () => {
it('should transform headers', () => {
const isoHeaders = {
'content-type': 'application/vnd.interoperability.iso20022.transfers+json;version=2',
'accept': 'application/vnd.interoperability.iso20022.transfers+json;version=2.0',
'date': '2021-08-23T15:00:00.000Z'
};
const fspiopHeaders = {
'content-type': 'application/vnd.interoperability.transfers+json;version=2',
'accept': 'application/vnd.interoperability.transfers+json;version=2.0',
'date': '2021-08-23T15:00:00.000Z'
};
expect(transformHeadersIsoToFspiop(isoHeaders)).toEqual(fspiopHeaders);
});
});
});
4 changes: 2 additions & 2 deletions modules/outbound-command-event-handler/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-outbound-command-event-handler",
"version": "0.2.20-snapshot.40",
"version": "0.2.20-snapshot.41",
"description": "Mojaloop sdk scheme adapter command event handler",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter/",
Expand Down Expand Up @@ -59,7 +59,7 @@
"@types/convict": "^6.1.6",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "4.1.7",
Expand Down
4 changes: 2 additions & 2 deletions modules/outbound-domain-event-handler/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-outbound-domain-event-handler",
"version": "0.2.20-snapshot.39",
"version": "0.2.20-snapshot.40",
"description": "mojaloop sdk scheme adapter outbound domain event handler",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter/",
Expand Down Expand Up @@ -56,7 +56,7 @@
"@types/convict": "^6.1.6",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "^4.1.7",
Expand Down
4 changes: 2 additions & 2 deletions modules/private-shared-lib/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-private-shared-lib",
"version": "0.3.20-snapshot.40",
"version": "0.3.20-snapshot.41",
"description": "SDK Scheme Adapter private shared library.",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/accounts-and-balances-bc/tree/main/modules/private-types",
Expand Down Expand Up @@ -38,7 +38,7 @@
},
"devDependencies": {
"@eslint/compat": "^1.2.2",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.12.2",
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter",
"version": "23.6.0-snapshot.27",
"version": "23.6.0-snapshot.28",
"description": "mojaloop sdk-scheme-adapter",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter",
Expand Down Expand Up @@ -79,7 +79,7 @@
},
"devDependencies": {
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.12.2",
Expand Down
37 changes: 27 additions & 10 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2447,7 +2447,24 @@ __metadata:
languageName: node
linkType: hard

"@mojaloop/ml-schema-transformer-lib@npm:2.3.3, @mojaloop/ml-schema-transformer-lib@npm:^2.3.3":
"@mojaloop/ml-schema-transformer-lib@npm:2.3.4":
version: 2.3.4
resolution: "@mojaloop/ml-schema-transformer-lib@npm:2.3.4"
dependencies:
"@mojaloop/central-services-error-handling": ^13.0.2
"@mojaloop/central-services-logger": ^11.5.1
"@mojaloop/central-services-shared": ^18.11.0
"@rollup/rollup-linux-x64-musl": 4.24.3
ilp-packet: 2.2.0
map-transform-cjs: ^0.2.0
dependenciesMeta:
"@rollup/rollup-linux-x64-musl":
optional: true
checksum: d421e7035fb3d6dde8cf4706eb4a0ad349e7ecec06ff73e87d19d32fcfa123c561383288324586cfb88825a9ba28ea1ca25ae508f39abf9e9fe7cfc9467774b8
languageName: node
linkType: hard

"@mojaloop/ml-schema-transformer-lib@npm:^2.3.3":
version: 2.3.3
resolution: "@mojaloop/ml-schema-transformer-lib@npm:2.3.3"
dependencies:
Expand Down Expand Up @@ -2513,7 +2530,7 @@ __metadata:
"@mojaloop/central-services-metrics": ^12.0.8
"@mojaloop/central-services-shared": 18.11.0
"@mojaloop/event-sdk": ^14.1.1
"@mojaloop/ml-schema-transformer-lib": 2.3.3
"@mojaloop/ml-schema-transformer-lib": 2.3.4
"@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^"
"@mojaloop/sdk-standard-components": 19.3.5
"@redocly/openapi-cli": ^1.0.0-beta.94
Expand Down Expand Up @@ -2573,7 +2590,7 @@ __metadata:
"@types/convict": ^6.1.6
"@types/express": ^5.0.0
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@types/supertest": ^6.0.2
"@types/swagger-ui-express": 4.1.7
Expand Down Expand Up @@ -2611,7 +2628,7 @@ __metadata:
"@types/convict": ^6.1.6
"@types/express": ^5.0.0
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@types/supertest": ^6.0.2
"@types/swagger-ui-express": ^4.1.7
Expand Down Expand Up @@ -2647,7 +2664,7 @@ __metadata:
"@mojaloop/logging-bc-public-types-lib": ^0.5.4
"@mojaloop/platform-shared-lib-messaging-types-lib": ^0.7.1
"@mojaloop/platform-shared-lib-nodejs-kafka-client-lib": 0.2.15
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/uuid": ^10.0.0
"@typescript-eslint/eslint-plugin": ^8.12.2
"@typescript-eslint/parser": ^8.12.2
Expand All @@ -2669,7 +2686,7 @@ __metadata:
resolution: "@mojaloop/sdk-scheme-adapter@workspace:."
dependencies:
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@typescript-eslint/eslint-plugin": ^8.12.2
"@typescript-eslint/parser": ^8.12.2
Expand Down Expand Up @@ -3748,12 +3765,12 @@ __metadata:
languageName: node
linkType: hard

"@types/node@npm:^22.8.4":
version: 22.8.4
resolution: "@types/node@npm:22.8.4"
"@types/node@npm:^22.8.5":
version: 22.8.5
resolution: "@types/node@npm:22.8.5"
dependencies:
undici-types: ~6.19.8
checksum: 1e55594ce7942e259919283e6bb9ee814f184afcd545956d95163dd3b1d4b1923dba97e0c258c5a9dd2c96b2e754fa9ae42994437a564255c8907ae7cdc25b4b
checksum: c5c3466047c2cc5f70824a89aa3873fb21abc231d7d52672ea157c01e5acbbca9831362c1d2df589f9ea10a3bdfade867ec647850d9dcf88dce7119885cb8d22
languageName: node
linkType: hard

Expand Down