ml-testing-toolkit 18.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +10 -0
- package/.grype.yaml +16 -0
- package/.ncurc.yaml +9 -0
- package/.nvmrc +1 -0
- package/.versionrc.js +16 -0
- package/CHANGELOG.md +504 -0
- package/CODEOWNERS +30 -0
- package/Dockerfile +42 -0
- package/Dockerfile-newman +13 -0
- package/LICENSE.md +9 -0
- package/README.md +119 -0
- package/assets/diagrams/architectural/architectural-diagram.svg +3 -0
- package/assets/diagrams/flow/flow-diagram.svg +3 -0
- package/assets/images/Sample-Response-Failure.png +0 -0
- package/assets/images/Screenshot 2020-04-16 at 22.58.04.png +0 -0
- package/assets/images/TLS-Enabled-on-Environment.png +0 -0
- package/assets/images/adapter-mutual-tls-enabled.png +0 -0
- package/assets/images/add-additional-input-values.png +0 -0
- package/assets/images/add-condition-button.png +0 -0
- package/assets/images/add-new-assertion.png +0 -0
- package/assets/images/add-new-input-value.png +0 -0
- package/assets/images/add-new-input-variable.png +0 -0
- package/assets/images/additional-transfers.png +0 -0
- package/assets/images/api-provisioning-add-new-api-confirmation.png +0 -0
- package/assets/images/api-provisioning-file-input-window.png +0 -0
- package/assets/images/api-provisioning-list-apis-view.png +0 -0
- package/assets/images/api-provisioning-menu-item.png +0 -0
- package/assets/images/apply_and_restart.jpg +0 -0
- package/assets/images/assess-request-or-response.png +0 -0
- package/assets/images/assess-response-equation-save.png +0 -0
- package/assets/images/assess-response-equation.png +0 -0
- package/assets/images/assess-response-status.png +0 -0
- package/assets/images/building-new-rules-file.png +0 -0
- package/assets/images/callback-rules-screen.png +0 -0
- package/assets/images/configurable-parameter-assertion.png +0 -0
- package/assets/images/configurable-parameter-currency.png +0 -0
- package/assets/images/configurable-parameter.png +0 -0
- package/assets/images/connection-manager-ui-opening.png +0 -0
- package/assets/images/create-inbound-user-simulator.png +0 -0
- package/assets/images/creating-new-rule-file.png +0 -0
- package/assets/images/dfsp-client-cacert.png +0 -0
- package/assets/images/dfsp-client-submit.png +0 -0
- package/assets/images/dfsp-client.png +0 -0
- package/assets/images/dfsp-p2p-happy-path.png +0 -0
- package/assets/images/dfsp-server-cacert.png +0 -0
- package/assets/images/dfsp-server-cert.png +0 -0
- package/assets/images/download-report.png +0 -0
- package/assets/images/drive_have_not_been_shared.jpg +0 -0
- package/assets/images/event-response-options.png +0 -0
- package/assets/images/expand-monitoring-messages.png +0 -0
- package/assets/images/fixed-response-sample.png +0 -0
- package/assets/images/header-selection.png +0 -0
- package/assets/images/heap_error_windows.jpg +0 -0
- package/assets/images/hosted-mode-docker-compose-intro.png +0 -0
- package/assets/images/hub-client-cert.png +0 -0
- package/assets/images/import-template.png +0 -0
- package/assets/images/inbound-requests-environment.png +0 -0
- package/assets/images/inbound-requests-scripts.png +0 -0
- package/assets/images/jws-certificate-submit.png +0 -0
- package/assets/images/jws-certificate.png +0 -0
- package/assets/images/jws-certs-keys.png +0 -0
- package/assets/images/jws-hub-certs-keys.png +0 -0
- package/assets/images/local-enable-jws-publickey.png +0 -0
- package/assets/images/local-mutual-tls-enabled.png +0 -0
- package/assets/images/local_drives_to_be_available.jpg +0 -0
- package/assets/images/mcm-environment-opening.png +0 -0
- package/assets/images/menu-items.png +0 -0
- package/assets/images/mock-response-sample.png +0 -0
- package/assets/images/monitoring-initial-state.png +0 -0
- package/assets/images/monitoring-messages.png +0 -0
- package/assets/images/new-empty-assertion.png +0 -0
- package/assets/images/opened-imported-template.png +0 -0
- package/assets/images/opening-default-settings.png +0 -0
- package/assets/images/opening-sync-response-rules.png +0 -0
- package/assets/images/opening-view.png +0 -0
- package/assets/images/outbound-display-opening-hub.png +0 -0
- package/assets/images/outbound-display-opening.png +0 -0
- package/assets/images/override-with-environment-variable.png +0 -0
- package/assets/images/populate-with-sample-body.png +0 -0
- package/assets/images/resource-selection.png +0 -0
- package/assets/images/rule-builder-select-api.png +0 -0
- package/assets/images/sample-condition-add-configurable-params.png +0 -0
- package/assets/images/sample-condition.png +0 -0
- package/assets/images/sample-editor.png +0 -0
- package/assets/images/sample-request.png +0 -0
- package/assets/images/sample-test-assertion.png +0 -0
- package/assets/images/send-transfer.png +0 -0
- package/assets/images/sending-single-test-case-1.png +0 -0
- package/assets/images/sending-single-test-case-2.png +0 -0
- package/assets/images/sending-test-cases.png +0 -0
- package/assets/images/server-certificates-submitted.png +0 -0
- package/assets/images/simulator-response.png +0 -0
- package/assets/images/simulator-scheme-adapter-endpoint.png +0 -0
- package/assets/images/summarized-view-of-rule.png +0 -0
- package/assets/images/template-window.png +0 -0
- package/assets/images/test-case-editor-console-log.png +0 -0
- package/assets/images/test-case-editor-environment-state.png +0 -0
- package/assets/images/test-case-editor-scripts.png +0 -0
- package/assets/images/test-case-editor.png +0 -0
- package/assets/images/testcase-definition-download.png +0 -0
- package/assets/images/testcase-definition-edit-meta-info.png +0 -0
- package/assets/images/testing-toolkit-mojaloop-testing-toolkit-endpoint.png +0 -0
- package/assets/images/tls-hub-certs-keys.png +0 -0
- package/assets/images/tls-jws-enabled-on-environment.png +0 -0
- package/assets/images/updated-sample-body-data.png +0 -0
- package/assets/images/using-configurable-parameter.png +0 -0
- package/assets/images/validation-rules-screen.png +0 -0
- package/assets/images/view-response.png +0 -0
- package/audit-ci.jsonc +7 -0
- package/connection-manager/docker-compose.yml +55 -0
- package/database/docker-compose.yml +16 -0
- package/docker/hosted-mode/docker-compose.yaml +107 -0
- package/docker/hosted-mode/keycloak/keycloak-realm.json +2298 -0
- package/docker/hosted-mode/mongo-init.sh +1 -0
- package/docker/hosted-mode-tls/docker-compose.yaml +171 -0
- package/docker/hosted-mode-tls/keycloak/keycloak-realm.json +2298 -0
- package/docker/hosted-mode-tls/mongo-init.sh +1 -0
- package/docker-compose.yml +62 -0
- package/documents/Mojaloop-Testing-Toolkit.md +296 -0
- package/documents/RULES_ENGINE.md +403 -0
- package/documents/User-Guide-API-Provisioning.md +121 -0
- package/documents/User-Guide-CLI.md +218 -0
- package/documents/User-Guide-Connection-Manager.md +282 -0
- package/documents/User-Guide-Frequently-Asked-Questions.md +39 -0
- package/documents/User-Guide-Hosted-Mode-Docker-Compose.md +110 -0
- package/documents/User-Guide-Installation.md +163 -0
- package/documents/User-Guide-Mojaloop-Testing-Toolkit.md +642 -0
- package/documents/User-Guide-OAuth-Server-Deployment.md +283 -0
- package/documents/User-Guide-Onboarding-DFSP.md +197 -0
- package/documents/User-Guide-Onboarding-HUB.md +191 -0
- package/documents/User-Guide.md +53 -0
- package/examples/collections/dfsp/p2p_failed_tests.json +7161 -0
- package/examples/collections/dfsp/p2p_fx_happy_path.json +502 -0
- package/examples/collections/dfsp/p2p_happy_path.json +350 -0
- package/examples/collections/dfsp/p2p_happy_path_extended.json +6106 -0
- package/examples/collections/dfsp/p2p_happy_path_jws.json +511 -0
- package/examples/collections/dfsp/p2p_payee_assertions_websocket.json +441 -0
- package/examples/collections/dfsp/sample.json +5029 -0
- package/examples/collections/dfsp/transaction_request_service.json +240 -0
- package/examples/collections/fxp/FXP.json +264 -0
- package/examples/collections/fxp/SDK_backend.json +98 -0
- package/examples/collections/fxp/SDK_outbound.json +163 -0
- package/examples/collections/hub/hub_01_p2p_happy_path/hub_p2p_receive_quote.json +400 -0
- package/examples/collections/hub/hub_01_p2p_happy_path/hub_p2p_send_quote.json +395 -0
- package/examples/collections/hub/hub_02_block_transfer/hub_block_transfer.json +393 -0
- package/examples/collections/hub/hub_03_funds_in_out/hub_funds_in.json +224 -0
- package/examples/collections/hub/hub_03_funds_in_out/hub_funds_out.json +780 -0
- package/examples/collections/hub/hub_04_settlements/hub_settlements.json +3138 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_payee_abort.json +475 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_payee_invalid_fulfillment.json +370 -0
- package/examples/collections/hub/hub_05_transfer_negative_scenarios/hub_transfer_negative_transfer_timeout.json +262 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_authorizations.json +117 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_error_framework.json +591 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_received_state.json +379 -0
- package/examples/collections/hub/hub_06_transaction_requests_service/hub_trs_reject_state.json +361 -0
- package/examples/collections/hub/hub_07_quoting_service.json +525 -0
- package/examples/collections/hub/hub_08_participant_inactive_stop_transfers.json +706 -0
- package/examples/collections/hub/hub_09_duplicate_handling_transfers.json +1377 -0
- package/examples/collections/hub/hub_10_on_us_transfers.json +245 -0
- package/examples/collections/hub/hub_11_accented_and_spl_chars.json +629 -0
- package/examples/collections/hub/hub_12_fspiop_version_1.1.json +646 -0
- package/examples/collections/hub/hub_13_bulk_transfers.json +1857 -0
- package/examples/collections/iso20022/self_referencing_iso20022.json +926 -0
- package/examples/collections/provisioning/testingtoolkitdfsp.json +904 -0
- package/examples/environments/dfsp_local_environment.json +46 -0
- package/examples/environments/hub_local_environment.json +57 -0
- package/jest.config.js +17 -0
- package/package.json +199 -0
- package/sbom-v18.12.4.csv +1553 -0
- package/secrets/keygen.sh +5 -0
- package/secrets/privatekey.pem +27 -0
- package/secrets/publickey.cer +21 -0
- package/secrets/tls/01.pem +132 -0
- package/secrets/tls/createSecrets.sh +20 -0
- package/secrets/tls/hub_client.csr +32 -0
- package/secrets/tls/hub_client_cacert.pem +35 -0
- package/secrets/tls/hub_client_cakey.pem +52 -0
- package/secrets/tls/hub_client_key.key +52 -0
- package/secrets/tls/hub_server.csr +31 -0
- package/secrets/tls/hub_server_cacert.pem +35 -0
- package/secrets/tls/hub_server_cakey.pem +52 -0
- package/secrets/tls/hub_server_cert.pem +132 -0
- package/secrets/tls/hub_server_key.key +52 -0
- package/secrets/tls/index.txt +1 -0
- package/secrets/tls/index.txt.attr +1 -0
- package/secrets/tls/openssl-client.cnf +36 -0
- package/secrets/tls/openssl-clientca.cnf +71 -0
- package/secrets/tls/openssl-server.cnf +39 -0
- package/secrets/tls/openssl-serverca.cnf +71 -0
- package/secrets/tls/serial.txt +1 -0
- package/spec_files/api_definitions/als_admin_1.1/api_spec.yaml +804 -0
- package/spec_files/api_definitions/central_admin_1.0/api_spec.yaml +1850 -0
- package/spec_files/api_definitions/central_admin_1.0/response_map.json +96 -0
- package/spec_files/api_definitions/central_admin_old_9.3/api_spec.yaml +2467 -0
- package/spec_files/api_definitions/central_admin_old_9.3/response_map.json +96 -0
- package/spec_files/api_definitions/fspiop_1.0/api_spec.yaml +4187 -0
- package/spec_files/api_definitions/fspiop_1.0/callback_map.json +568 -0
- package/spec_files/api_definitions/fspiop_1.0/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup.json +126 -0
- package/spec_files/api_definitions/fspiop_1.0/trigger_templates/transaction_request_followup_quotes_only.json +97 -0
- package/spec_files/api_definitions/fspiop_1.1/api_spec.yaml +3778 -0
- package/spec_files/api_definitions/fspiop_1.1/callback_map.json +568 -0
- package/spec_files/api_definitions/fspiop_1.1/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_1.1/trigger_templates/transaction_request_followup.json +125 -0
- package/spec_files/api_definitions/fspiop_2.0/api_spec.yaml +4839 -0
- package/spec_files/api_definitions/fspiop_2.0/callback_map.json +716 -0
- package/spec_files/api_definitions/fspiop_2.0/mockRef.json +79 -0
- package/spec_files/api_definitions/fspiop_2.0/trigger_templates/transaction_request_followup.json +125 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/api_spec.yaml +8331 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/callback_map.json +508 -0
- package/spec_files/api_definitions/fspiop_2.0_iso20022/mockRef.json +66 -0
- package/spec_files/api_definitions/fx-api_2.0/api_spec.yaml +1768 -0
- package/spec_files/api_definitions/fx-api_2.0/callback_map.json +188 -0
- package/spec_files/api_definitions/fx-api_2.0/mockRef.json +83 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/api_spec.yaml +2612 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/mockRef.json +22 -0
- package/spec_files/api_definitions/mojaloop_sdk_outbound_scheme_adapter_1.0/response_map.json +35 -0
- package/spec_files/api_definitions/mojaloop_simulator_0.1/api_spec.yaml +225 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/api_spec.yaml +1087 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/mockRef.json +75 -0
- package/spec_files/api_definitions/mojaloop_simulator_sim_1.4/response_map.json +55 -0
- package/spec_files/api_definitions/payment_manager_1.4/api_spec.yaml +1389 -0
- package/spec_files/api_definitions/sdk-scheme-adapter-backend-v2_1_0-openapi3-snippets_2.1/api_spec.yaml +2834 -0
- package/spec_files/api_definitions/sdk-scheme-adapter-outbound-v2_1_0-openapi3-snippets_2.1/api_spec.yaml +3449 -0
- package/spec_files/api_definitions/settlements_1.0/api_spec.yaml +983 -0
- package/spec_files/api_definitions/settlements_1.0/mockRef.json +38 -0
- package/spec_files/api_definitions/settlements_1.0/response_map.json +34 -0
- package/spec_files/api_definitions/settlements_2.0/api_spec.yaml +1001 -0
- package/spec_files/api_definitions/settlements_2.0/mockRef.json +38 -0
- package/spec_files/api_definitions/settlements_2.0/response_map.json +34 -0
- package/spec_files/api_definitions/thirdparty_sdk_outbound_0.1/api_spec.yaml +2139 -0
- package/spec_files/reports/templates/newman/html_template.html +1202 -0
- package/spec_files/reports/templates/newman/pdf_template.html +790 -0
- package/spec_files/reports/templates/testcase_definition/table_view.html +1602 -0
- package/spec_files/rules_callback/config.json +3 -0
- package/spec_files/rules_callback/default.json +2698 -0
- package/spec_files/rules_callback/p2p-limit.json +129 -0
- package/spec_files/rules_forward/config.json +3 -0
- package/spec_files/rules_forward/default.json +482 -0
- package/spec_files/rules_response/config.json +3 -0
- package/spec_files/rules_response/default.json +295 -0
- package/spec_files/rules_validation/config.json +3 -0
- package/spec_files/rules_validation/default.json +1 -0
- package/spec_files/rules_validation/p2p-limit.json +55 -0
- package/spec_files/system_config.json +175 -0
- package/spec_files/user_config.json +109 -0
- package/src/index.js +67 -0
- package/src/lib/MyEventEmitter.js +54 -0
- package/src/lib/api-management.js +143 -0
- package/src/lib/api-routes/config.js +83 -0
- package/src/lib/api-routes/history.js +139 -0
- package/src/lib/api-routes/keycloak.js +54 -0
- package/src/lib/api-routes/longpolling.js +70 -0
- package/src/lib/api-routes/oauth2.js +149 -0
- package/src/lib/api-routes/objectstore.js +53 -0
- package/src/lib/api-routes/openapi.js +224 -0
- package/src/lib/api-routes/outbound.js +134 -0
- package/src/lib/api-routes/reports.js +72 -0
- package/src/lib/api-routes/rules.js +356 -0
- package/src/lib/api-routes/samples.js +92 -0
- package/src/lib/api-routes/server-logs.js +44 -0
- package/src/lib/api-routes/settings.js +71 -0
- package/src/lib/api-server.js +135 -0
- package/src/lib/arrayStore.js +101 -0
- package/src/lib/callbackHandler.js +201 -0
- package/src/lib/config.js +177 -0
- package/src/lib/configuration-providers/mb-connection-manager.js +625 -0
- package/src/lib/db/adapters/dbAdapter.js +184 -0
- package/src/lib/db/dfspMockUsers.js +64 -0
- package/src/lib/db/models/mongoDBWrapper.js +78 -0
- package/src/lib/eventListenerClient/inboundEventListener.js +176 -0
- package/src/lib/fileAdapter.js +57 -0
- package/src/lib/httpAgentStore.js +135 -0
- package/src/lib/importExport.js +186 -0
- package/src/lib/jws/JwsSigning.js +141 -0
- package/src/lib/loadSamples.js +128 -0
- package/src/lib/logger.js +20 -0
- package/src/lib/longpollingEmitter.js +56 -0
- package/src/lib/metrics.js +51 -0
- package/src/lib/mocking/custom-functions/generic.js +57 -0
- package/src/lib/mocking/middleware-functions/ilpModel.js +238 -0
- package/src/lib/mocking/middleware-functions/quotesAssociation.js +75 -0
- package/src/lib/mocking/middleware-functions/transactionRequestsService.js +78 -0
- package/src/lib/mocking/openApiDefinitionsModel.js +64 -0
- package/src/lib/mocking/openApiMockHandler.js +466 -0
- package/src/lib/mocking/openApiRulesEngine.js +492 -0
- package/src/lib/mocking/openApiVersionTools.js +136 -0
- package/src/lib/mocking/transformers/fspiopToISO20022.js +230 -0
- package/src/lib/mocking/transformers/index.js +41 -0
- package/src/lib/notificationEmitter.js +64 -0
- package/src/lib/oauth/KeycloakHelper.js +220 -0
- package/src/lib/oauth/LoginService.js +133 -0
- package/src/lib/oauth/OAuthHelper.js +181 -0
- package/src/lib/oauth/OAuthValidator.js +118 -0
- package/src/lib/oauth/Wso2Client.js +64 -0
- package/src/lib/objectStore/inMemoryImpl.js +50 -0
- package/src/lib/objectStore/objectStoreInterface.js +51 -0
- package/src/lib/objectStore.js +122 -0
- package/src/lib/report-generator/generator.js +126 -0
- package/src/lib/report-generator/helpers.js +154 -0
- package/src/lib/requestLogger.js +190 -0
- package/src/lib/resources/wso2carbon-publickey.cert +20 -0
- package/src/lib/rulesEngine.js +95 -0
- package/src/lib/rulesEngineModel.js +463 -0
- package/src/lib/scripting-engines/postman-sandbox.js +142 -0
- package/src/lib/scripting-engines/vm-javascript-sandbox.js +294 -0
- package/src/lib/server-logs/adapters/elastic-search.js +102 -0
- package/src/lib/server-logs/adapters/grafana.js +0 -0
- package/src/lib/server-logs/index.js +75 -0
- package/src/lib/socket-server.js +55 -0
- package/src/lib/storageAdapter.js +109 -0
- package/src/lib/test-outbound/TestCaseRunner.js +173 -0
- package/src/lib/test-outbound/getTracing.js +19 -0
- package/src/lib/test-outbound/outbound-initiator.js +1107 -0
- package/src/lib/uniqueIdGenerator.js +35 -0
- package/src/lib/utils.js +89 -0
- package/src/lib/utilsInternal.js +56 -0
- package/src/lib/webSocketClient/WebSocketClientManager.js +197 -0
- package/src/server.js +218 -0
package/src/index.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
'use strict'
|
|
31
|
+
const RequestLogger = require('./lib/requestLogger')
|
|
32
|
+
const apiServer = require('./lib/api-server')
|
|
33
|
+
const socketServer = require('./lib/socket-server')
|
|
34
|
+
const Config = require('./lib/config')
|
|
35
|
+
const server = require('./server')
|
|
36
|
+
const mbConnectionManager = require('./lib/configuration-providers/mb-connection-manager')
|
|
37
|
+
const reportGenerator = require('./lib/report-generator/generator')
|
|
38
|
+
|
|
39
|
+
const welcomeMessage = `
|
|
40
|
+
-------------------------------------------------------------------------------------
|
|
41
|
+
Welcome to Mojaloop Testing Toolkit
|
|
42
|
+
-------------------------------------------------------------------------------------
|
|
43
|
+
You can start using the testing toolkit by opening the following URL in your browser
|
|
44
|
+
|
|
45
|
+
http://localhost:5050
|
|
46
|
+
|
|
47
|
+
And you can send mojaloop requests to http://localhost:4040
|
|
48
|
+
|
|
49
|
+
-------------------------------------------------------------------------------------
|
|
50
|
+
`
|
|
51
|
+
|
|
52
|
+
const init = async () => {
|
|
53
|
+
RequestLogger.logMessage('info', 'Toolkit Initialization started...', { notification: false })
|
|
54
|
+
await Config.loadSystemConfig()
|
|
55
|
+
await Config.loadUserConfig()
|
|
56
|
+
apiServer.startServer(5050)
|
|
57
|
+
socketServer.initServer(apiServer.getHttp())
|
|
58
|
+
const systemConfig = Config.getSystemConfig()
|
|
59
|
+
if (systemConfig.CONNECTION_MANAGER.ENABLED) {
|
|
60
|
+
await mbConnectionManager.initialize()
|
|
61
|
+
}
|
|
62
|
+
await reportGenerator.initialize()
|
|
63
|
+
await server.initialize()
|
|
64
|
+
RequestLogger.logMessage('info', 'Toolkit Initialization completed.', { notification: false, additionalData: welcomeMessage })
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
init()
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
const EventEmitter = require('events')
|
|
31
|
+
class MyEmitter extends EventEmitter {}
|
|
32
|
+
const emitters = {
|
|
33
|
+
data: {
|
|
34
|
+
testOutbound: null,
|
|
35
|
+
assertionRequest: null,
|
|
36
|
+
assertionCallback: null,
|
|
37
|
+
inboundRequest: null
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const getEmitter = (emitter, user) => {
|
|
42
|
+
const context = user ? user.dfspId : 'data'
|
|
43
|
+
if (!emitters[context]) {
|
|
44
|
+
emitters[context] = {}
|
|
45
|
+
}
|
|
46
|
+
if (!emitters[context][emitter]) {
|
|
47
|
+
emitters[context][emitter] = new MyEmitter()
|
|
48
|
+
}
|
|
49
|
+
return emitters[context][emitter]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
getEmitter
|
|
54
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
const addFormats = require('ajv-formats')
|
|
31
|
+
const OpenApiBackend = require('openapi-backend').default
|
|
32
|
+
const Utils = require('./utils')
|
|
33
|
+
const path = require('path')
|
|
34
|
+
const Config = require('./config')
|
|
35
|
+
const OpenApiDefinitionsModel = require('./mocking/openApiDefinitionsModel')
|
|
36
|
+
const OpenApiMockHandler = require('./mocking/openApiMockHandler')
|
|
37
|
+
|
|
38
|
+
const apiDefinitionsPath = 'spec_files/api_definitions/'
|
|
39
|
+
|
|
40
|
+
const validateDefinition = async (apiFilePath) => {
|
|
41
|
+
const newApi = new OpenApiBackend({
|
|
42
|
+
definition: path.join(apiFilePath),
|
|
43
|
+
customizeAjv: ajv => addFormats(ajv),
|
|
44
|
+
strict: true,
|
|
45
|
+
quick: true
|
|
46
|
+
})
|
|
47
|
+
await newApi.loadDocument()
|
|
48
|
+
newApi.validateDefinition()
|
|
49
|
+
return newApi.document
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const addDefinition = async (apiFilePath, name, version, asynchronous) => {
|
|
53
|
+
// Validate the definition first
|
|
54
|
+
await validateDefinition(apiFilePath)
|
|
55
|
+
// Create a folder with api name and copy the uploaded file there
|
|
56
|
+
await Utils.makeDirectoryAsync(apiDefinitionsPath + name + '_' + version)
|
|
57
|
+
await Utils.mvAsync(apiFilePath, apiDefinitionsPath + name + '_' + version + '/api_spec.yaml')
|
|
58
|
+
// Add the entry to system config
|
|
59
|
+
const apiDefinitions = Config.getSystemConfig().API_DEFINITIONS
|
|
60
|
+
apiDefinitions.push({
|
|
61
|
+
type: name,
|
|
62
|
+
version,
|
|
63
|
+
folderPath: name + '_' + version,
|
|
64
|
+
asynchronous: asynchronous === 'true' || asynchronous === 'TRUE',
|
|
65
|
+
additionalApi: true
|
|
66
|
+
})
|
|
67
|
+
await Config.setSystemConfig({ API_DEFINITIONS: apiDefinitions })
|
|
68
|
+
|
|
69
|
+
// Reload the opneapi definitions model
|
|
70
|
+
await OpenApiDefinitionsModel.refreshApiDefinitions()
|
|
71
|
+
|
|
72
|
+
// Reload the openapimock handlers
|
|
73
|
+
OpenApiMockHandler.initilizeMockHandler()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const deleteDefinition = async (name, version) => {
|
|
77
|
+
// Make sure the requested API is not an inbuilt API
|
|
78
|
+
const apiDefinitions = Config.getSystemConfig().API_DEFINITIONS
|
|
79
|
+
const matchedApiIndex = apiDefinitions.findIndex(item => {
|
|
80
|
+
return item.type === name && item.version === version
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
if (matchedApiIndex === -1) {
|
|
84
|
+
throw new Error('Requested API is not found')
|
|
85
|
+
}
|
|
86
|
+
const matchedApi = apiDefinitions[matchedApiIndex]
|
|
87
|
+
if (!matchedApi.additionalApi) {
|
|
88
|
+
throw new Error('Requested API is an inbuilt API and can not be deleted')
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Remove entry in system config file
|
|
92
|
+
apiDefinitions.splice(matchedApiIndex, 1)
|
|
93
|
+
await Config.setSystemConfig({ API_DEFINITIONS: apiDefinitions })
|
|
94
|
+
|
|
95
|
+
// Remove the folder from spec_files
|
|
96
|
+
await Utils.rmdirAsync(apiDefinitionsPath + name, { recursive: true })
|
|
97
|
+
|
|
98
|
+
// Refresh openapi Definitions
|
|
99
|
+
await OpenApiDefinitionsModel.refreshApiDefinitions()
|
|
100
|
+
|
|
101
|
+
// Reload the openapimock handlers
|
|
102
|
+
OpenApiMockHandler.initilizeMockHandler()
|
|
103
|
+
|
|
104
|
+
return true
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const patchDefinitionParams = async (name, version, patchParams) => {
|
|
108
|
+
const apiDefinitions = Config.getSystemConfig().API_DEFINITIONS
|
|
109
|
+
const matchedApiIndex = apiDefinitions.findIndex(item => {
|
|
110
|
+
return item.type === name && item.version === version
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
if (matchedApiIndex === -1) {
|
|
114
|
+
throw new Error('Requested API is not found')
|
|
115
|
+
}
|
|
116
|
+
const matchedApi = apiDefinitions[matchedApiIndex]
|
|
117
|
+
|
|
118
|
+
// Mutate only editable values based on patchParams
|
|
119
|
+
if (patchParams.hostnames !== undefined) {
|
|
120
|
+
matchedApi.hostnames = patchParams.hostnames
|
|
121
|
+
}
|
|
122
|
+
if (patchParams.prefix !== undefined) {
|
|
123
|
+
matchedApi.prefix = patchParams.prefix
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Update the vlaues
|
|
127
|
+
await Config.setSystemConfig({ API_DEFINITIONS: apiDefinitions })
|
|
128
|
+
|
|
129
|
+
// Refresh openapi Definitions
|
|
130
|
+
await OpenApiDefinitionsModel.refreshApiDefinitions()
|
|
131
|
+
|
|
132
|
+
// Reload the openapimock handlers
|
|
133
|
+
OpenApiMockHandler.initilizeMockHandler()
|
|
134
|
+
|
|
135
|
+
return true
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
module.exports = {
|
|
139
|
+
validateDefinition,
|
|
140
|
+
addDefinition,
|
|
141
|
+
deleteDefinition,
|
|
142
|
+
patchDefinitionParams
|
|
143
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
const express = require('express')
|
|
31
|
+
const Config = require('../config')
|
|
32
|
+
const router = new express.Router()
|
|
33
|
+
const { check, validationResult } = require('express-validator')
|
|
34
|
+
|
|
35
|
+
const userConfigView = (obj) => {
|
|
36
|
+
if (!Config.getSystemConfig().HOSTING_ENABLED) {
|
|
37
|
+
return obj
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const hiddenProperties = [
|
|
41
|
+
'HUB_ONLY_MODE',
|
|
42
|
+
'ENDPOINTS_DFSP_WISE'
|
|
43
|
+
]
|
|
44
|
+
const newConfig = {}
|
|
45
|
+
Object.keys(obj).forEach(key => {
|
|
46
|
+
if (!hiddenProperties.includes(key)) {
|
|
47
|
+
newConfig[key] = obj[key]
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
return newConfig
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Get runtime and stored user config
|
|
54
|
+
router.get('/user', async (req, res, next) => {
|
|
55
|
+
try {
|
|
56
|
+
const runtime = userConfigView(await Config.getUserConfig(req.user))
|
|
57
|
+
const stored = userConfigView(await Config.getStoredUserConfig(req.user))
|
|
58
|
+
res.status(200).json({ runtime, stored })
|
|
59
|
+
} catch (err) {
|
|
60
|
+
// next(err)
|
|
61
|
+
res.status(404).json({ error: err && err.message })
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// Route to edit the user configuration
|
|
66
|
+
router.put('/user', [
|
|
67
|
+
check('CALLBACK_ENDPOINT').notEmpty()
|
|
68
|
+
], async (req, res, next) => {
|
|
69
|
+
const errors = validationResult(req)
|
|
70
|
+
if (!errors.isEmpty()) {
|
|
71
|
+
return res.status(422).json({ errors: errors.array() })
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
await Config.setStoredUserConfig(req.body, req.user)
|
|
75
|
+
await Config.loadUserConfig(req.user)
|
|
76
|
+
res.status(200).json({ status: 'OK' })
|
|
77
|
+
} catch (err) {
|
|
78
|
+
// next(err)
|
|
79
|
+
res.status(404).json({ error: err && err.message })
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
module.exports = router
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Georgi Logodazhki <georgi.logodazhki@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
const express = require('express')
|
|
31
|
+
const router = new express.Router()
|
|
32
|
+
const dbAdapter = require('../db/adapters/dbAdapter')
|
|
33
|
+
const arrayStore = require('../arrayStore')
|
|
34
|
+
const reportGenerator = require('../report-generator/generator')
|
|
35
|
+
|
|
36
|
+
router.get('/reports', async (req, res, next) => {
|
|
37
|
+
try {
|
|
38
|
+
const reports = (await dbAdapter.read('reports', req.user, { query: req.query }))
|
|
39
|
+
res.status(200).send(reports)
|
|
40
|
+
} catch (err) {
|
|
41
|
+
res.status(500).json({ error: err && err.message })
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
router.post('/reports', async (req, res, next) => {
|
|
46
|
+
try {
|
|
47
|
+
await dbAdapter.upsert('reports', req.body, req.user)
|
|
48
|
+
res.status(200).send()
|
|
49
|
+
} catch (err) {
|
|
50
|
+
res.status(500).json({ error: err && err.message })
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
router.get('/logs', async (req, res, next) => {
|
|
55
|
+
try {
|
|
56
|
+
const logs = (await dbAdapter.read('logs', req.user, { query: req.query }))
|
|
57
|
+
res.status(200).send(logs)
|
|
58
|
+
} catch (err) {
|
|
59
|
+
res.status(500).json({ error: err && err.message })
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
// Endpoints for getting the requests to TTK and callbacks from TTK
|
|
64
|
+
router.get('/requests', async (req, res, next) => {
|
|
65
|
+
try {
|
|
66
|
+
const requestsHistoryData = arrayStore.get('requestsHistory', undefined, req.user)
|
|
67
|
+
res.status(200).json((requestsHistoryData && requestsHistoryData.map(item => item.data)) || [])
|
|
68
|
+
} catch (err) {
|
|
69
|
+
res.status(500).json({ error: err && err.message })
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
router.delete('/requests', async (req, res, next) => {
|
|
74
|
+
try {
|
|
75
|
+
arrayStore.reset('requestsHistory', req.user)
|
|
76
|
+
res.status(200).send()
|
|
77
|
+
} catch (err) {
|
|
78
|
+
res.status(500).json({ error: err && err.message })
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
router.get('/callbacks', async (req, res, next) => {
|
|
83
|
+
try {
|
|
84
|
+
const callbacksHistoryData = arrayStore.get('callbacksHistory', undefined, req.user)
|
|
85
|
+
res.status(200).json((callbacksHistoryData && callbacksHistoryData.map(item => item.data)) || [])
|
|
86
|
+
} catch (err) {
|
|
87
|
+
res.status(500).json({ error: err && err.message })
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
router.delete('/callbacks', async (req, res, next) => {
|
|
92
|
+
try {
|
|
93
|
+
arrayStore.reset('callbacksHistory', req.user)
|
|
94
|
+
res.status(200).send()
|
|
95
|
+
} catch (err) {
|
|
96
|
+
res.status(500).json({ error: err && err.message })
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
router.get('/test-reports', async (req, res, next) => {
|
|
101
|
+
try {
|
|
102
|
+
const result = await dbAdapter.listReports(req.query)
|
|
103
|
+
res.status(200).send(result)
|
|
104
|
+
} catch (err) {
|
|
105
|
+
res.status(500).json({ error: err && err.message })
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
router.get('/test-reports/:reportId', async (req, res, next) => {
|
|
110
|
+
try {
|
|
111
|
+
let finalReport
|
|
112
|
+
const dbResult = await dbAdapter.getReport(req.params.reportId)
|
|
113
|
+
if (!dbResult) {
|
|
114
|
+
return res.status(404).json({ error: 'Report Not Found' })
|
|
115
|
+
}
|
|
116
|
+
const jsonReport = dbResult._doc
|
|
117
|
+
if (req.query.format === 'html' || req.query.format === 'printhtml') {
|
|
118
|
+
finalReport = await reportGenerator.generateReport(jsonReport, req.query.format)
|
|
119
|
+
if (req.query.download) {
|
|
120
|
+
const downloadFileSuffix = '-' + req.params.reportId + '.html'
|
|
121
|
+
res.setHeader('Content-disposition', 'attachment; filename=TTK-Assertion-Report' + downloadFileSuffix)
|
|
122
|
+
res.setHeader('TTK-FileName', 'TTK-Assertion-Report' + downloadFileSuffix)
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
finalReport = jsonReport
|
|
126
|
+
if (req.query.download) {
|
|
127
|
+
const downloadFileSuffix = '-' + req.params.reportId + '.json'
|
|
128
|
+
res.setHeader('Content-disposition', 'attachment; filename=TTK-Assertion-Report' + downloadFileSuffix)
|
|
129
|
+
res.setHeader('TTK-FileName', 'TTK-Assertion-Report' + downloadFileSuffix)
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
res.status(200).send(finalReport)
|
|
134
|
+
} catch (err) {
|
|
135
|
+
res.status(500).json({ error: err && err.message })
|
|
136
|
+
}
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
module.exports = router
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Georgi Logodazhki <georgi.logodazhki@modusbox.com>
|
|
27
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
28
|
+
--------------
|
|
29
|
+
******/
|
|
30
|
+
|
|
31
|
+
const express = require('express')
|
|
32
|
+
const router = new express.Router()
|
|
33
|
+
const KeycloakHelper = require('../oauth/KeycloakHelper')
|
|
34
|
+
|
|
35
|
+
router.get('/clientinfo', async (req, res, next) => {
|
|
36
|
+
try {
|
|
37
|
+
const response = await KeycloakHelper.getClientAuthInfo(req.user)
|
|
38
|
+
res.status(200).json(response)
|
|
39
|
+
} catch (err) {
|
|
40
|
+
console.log(err)
|
|
41
|
+
res.status(500).json({ error: err && err.message })
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
router.post('/tokeninfo', async (req, res, next) => {
|
|
46
|
+
try {
|
|
47
|
+
const response = await KeycloakHelper.getTokenInfo(req.body)
|
|
48
|
+
res.status(200).json(response)
|
|
49
|
+
} catch (err) {
|
|
50
|
+
res.status(500).json({ error: err && err.message })
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
module.exports = router
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*****
|
|
2
|
+
License
|
|
3
|
+
--------------
|
|
4
|
+
Copyright © 2020-2025 Mojaloop Foundation
|
|
5
|
+
The Mojaloop files are made available by the Mojaloop Foundation under the Apache License, Version 2.0 (the "License") and you may not use these files except in compliance with the License. You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, the Mojaloop files are distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
10
|
+
|
|
11
|
+
Contributors
|
|
12
|
+
--------------
|
|
13
|
+
This is the official list of the Mojaloop project contributors for this file.
|
|
14
|
+
Names of the original copyright holders (individuals or organizations)
|
|
15
|
+
should be listed with a '*' in the first column. People who have
|
|
16
|
+
contributed from an organization can be listed under the organization
|
|
17
|
+
that actually holds the copyright for their contributions (see the
|
|
18
|
+
Mojaloop Foundation for an example). Those individuals should have
|
|
19
|
+
their names indented and be marked with a '-'. Email address can be added
|
|
20
|
+
optionally within square brackets <email>.
|
|
21
|
+
|
|
22
|
+
* Mojaloop Foundation
|
|
23
|
+
- Name Surname <name.surname@mojaloop.io>
|
|
24
|
+
|
|
25
|
+
* ModusBox
|
|
26
|
+
* Vijaya Kumar Guthi <vijaya.guthi@modusbox.com> (Original Author)
|
|
27
|
+
--------------
|
|
28
|
+
******/
|
|
29
|
+
|
|
30
|
+
const express = require('express')
|
|
31
|
+
const objectStore = require('../objectStore')
|
|
32
|
+
const longpollingEmitter = require('../longpollingEmitter')
|
|
33
|
+
// const Config = require('../config')
|
|
34
|
+
|
|
35
|
+
const router = new express.Router()
|
|
36
|
+
// const { check, validationResult } = require('express-validator')
|
|
37
|
+
|
|
38
|
+
// Method to monitor requests came to toolkit
|
|
39
|
+
router.get('/requests/{*splat}', async (req, res, next) => {
|
|
40
|
+
const eventPath = req.path.replace('/requests', '')
|
|
41
|
+
try {
|
|
42
|
+
// Check if the required path is already in the assertion store
|
|
43
|
+
const storedAssertion = objectStore.popObject('requests', eventPath, req.user)
|
|
44
|
+
if (storedAssertion) {
|
|
45
|
+
res.status(200).json({ headers: storedAssertion.headers, data: storedAssertion.body })
|
|
46
|
+
} else {
|
|
47
|
+
longpollingEmitter.setAssertionStoreEmitter('requests', eventPath, res, req.user)
|
|
48
|
+
}
|
|
49
|
+
} catch (err) {
|
|
50
|
+
res.status(500).json({ error: err && err.message })
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
// Method to monitor callbacks generated by toolkit
|
|
55
|
+
router.get('/callbacks/{*splat}', async (req, res, next) => {
|
|
56
|
+
const eventPath = req.path.replace('/callbacks', '')
|
|
57
|
+
try {
|
|
58
|
+
// Check if the required path is already in the assertion store
|
|
59
|
+
const storedAssertion = objectStore.popObject('callbacks', eventPath)
|
|
60
|
+
if (storedAssertion) {
|
|
61
|
+
res.status(200).json({ headers: storedAssertion.headers, data: storedAssertion.body })
|
|
62
|
+
} else {
|
|
63
|
+
longpollingEmitter.setAssertionStoreEmitter('callbacks', eventPath, res, req.user)
|
|
64
|
+
}
|
|
65
|
+
} catch (err) {
|
|
66
|
+
res.status(500).json({ error: err && err.message })
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
module.exports = router
|