account-lookup-service 15.5.0-iso.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (209) hide show
  1. package/.circleci/config.yml +11 -0
  2. package/.ncurc.yaml +6 -0
  3. package/.nvmrc +1 -0
  4. package/.nycrc.yml +20 -0
  5. package/.versionrc +15 -0
  6. package/CHANGELOG.md +330 -0
  7. package/CODEOWNERS +38 -0
  8. package/Dockerfile +45 -0
  9. package/LICENSE.md +10 -0
  10. package/README.md +252 -0
  11. package/audit-ci.jsonc +32 -0
  12. package/audit-resolve.json +161 -0
  13. package/config/default.json +109 -0
  14. package/config/knexfile.js +21 -0
  15. package/docker/account-lookup-service/default.json +106 -0
  16. package/docker/account-lookup-service/make-default-json.sh +5 -0
  17. package/docker/account-lookup-service/override.json +15 -0
  18. package/docker/central-ledger/default.json +458 -0
  19. package/docker/config-modifier/account-lookup-service.js +31 -0
  20. package/docker/kafka/consumer.properties +26 -0
  21. package/docker/kafka/producer.properties +45 -0
  22. package/docker/kafka/server.properties +143 -0
  23. package/docker/kafka/tools-log4j.properties +21 -0
  24. package/docker/mock-proxy/Dockerfile +15 -0
  25. package/docker/mock-proxy/package-lock.json +4986 -0
  26. package/docker/mock-proxy/package.json +24 -0
  27. package/docker/mock-proxy/src/config.ts +14 -0
  28. package/docker/mock-proxy/src/server.ts +94 -0
  29. package/docker/mock-proxy/src/utils.ts +29 -0
  30. package/docker/mock-proxy/tsconfig.json +24 -0
  31. package/docker/sql-init/01_permissions.sql +2 -0
  32. package/docker/sql-init-central-ledger/01_permissions.sql +2 -0
  33. package/docker/wait-for/wait-for-account-lookup-service.sh +10 -0
  34. package/docker/wait-for/wait-for-central-ledger.sh +11 -0
  35. package/docker/wait-for/wait-for-kafka.sh +7 -0
  36. package/docker/wait-for/wait-for-ml-api-adapter.sh +9 -0
  37. package/docker/wait-for/wait-for-mockserver.sh +20 -0
  38. package/docker/wait-for/wait-for-mysql-als.sh +14 -0
  39. package/docker/wait-for/wait-for-mysql-central-ledger.sh +11 -0
  40. package/docker/wait-for/wait-for-mysql.sh +11 -0
  41. package/docker/wait-for/wait-for-objstore.sh +12 -0
  42. package/docker/wait-for/wait-for.env +18 -0
  43. package/docker/wait-for/wait-for.sh +81 -0
  44. package/docker-compose.integration.yml +29 -0
  45. package/docker-compose.yml +243 -0
  46. package/jest-int.config.js +8 -0
  47. package/jest.config.js +16 -0
  48. package/jsdoc.json +38 -0
  49. package/migrations/01_currency.js +42 -0
  50. package/migrations/02_endpointType.js +43 -0
  51. package/migrations/03_endpointType-indexes.js +37 -0
  52. package/migrations/04_partyIdType.js +43 -0
  53. package/migrations/05_partyIdType-indexes.js +38 -0
  54. package/migrations/08_oracleEndpoint.js +51 -0
  55. package/migrations/09_oracleEndpoint-indexes.js +41 -0
  56. package/migrations/10_oracleEndpoint-remove-constraints.js +38 -0
  57. package/package.json +180 -0
  58. package/scripts/_wait4_all.js +143 -0
  59. package/scripts/test-functional.sh +76 -0
  60. package/secrets/jwsSigningKey.key +27 -0
  61. package/seeds/currency.js +765 -0
  62. package/seeds/endpointType.js +65 -0
  63. package/seeds/partyIdType.js +79 -0
  64. package/src/api/endpointcache.js +67 -0
  65. package/src/api/health.js +66 -0
  66. package/src/api/index.js +85 -0
  67. package/src/api/oracles/{ID}.js +100 -0
  68. package/src/api/oracles.js +96 -0
  69. package/src/api/participants/{ID}/error.js +44 -0
  70. package/src/api/participants/{ID}.js +44 -0
  71. package/src/api/participants/{Type}/{ID}/error.js +74 -0
  72. package/src/api/participants/{Type}/{ID}/{SubId}/error.js +68 -0
  73. package/src/api/participants/{Type}/{ID}/{SubId}.js +113 -0
  74. package/src/api/participants/{Type}/{ID}.js +133 -0
  75. package/src/api/participants.js +63 -0
  76. package/src/api/parties/{Type}/{ID}/error.js +66 -0
  77. package/src/api/parties/{Type}/{ID}/{SubId}/error.js +56 -0
  78. package/src/api/parties/{Type}/{ID}/{SubId}.js +77 -0
  79. package/src/api/parties/{Type}/{ID}.js +98 -0
  80. package/src/api/routes.js +294 -0
  81. package/src/constants.js +16 -0
  82. package/src/domain/oracle/index.js +33 -0
  83. package/src/domain/oracle/oracle.js +234 -0
  84. package/src/domain/participants/index.js +35 -0
  85. package/src/domain/participants/participants.js +560 -0
  86. package/src/domain/parties/getPartiesByTypeAndID.js +239 -0
  87. package/src/domain/parties/index.js +32 -0
  88. package/src/domain/parties/parties.js +215 -0
  89. package/src/domain/parties/utils.js +84 -0
  90. package/src/domain/timeout/dto.js +48 -0
  91. package/src/domain/timeout/index.js +104 -0
  92. package/src/handlers/TimeoutHandler.js +94 -0
  93. package/src/handlers/index.js +70 -0
  94. package/src/handlers/monitoring/index.js +51 -0
  95. package/src/handlers/monitoring/plugins/health.js +61 -0
  96. package/src/handlers/monitoring/plugins/metrics.js +48 -0
  97. package/src/handlers/register.js +102 -0
  98. package/src/index.js +66 -0
  99. package/src/interface/admin-swagger.yaml +804 -0
  100. package/src/interface/admin_swagger.json +959 -0
  101. package/src/interface/api-swagger-iso20022-parties.yaml +1734 -0
  102. package/src/interface/api-swagger.yaml +1733 -0
  103. package/src/interface/api_swagger.json +3046 -0
  104. package/src/interface/fspiop-rest-v2.0-ISO20022_parties.yaml +2256 -0
  105. package/src/interface/thirdparty/admin-swagger.yaml +808 -0
  106. package/src/interface/thirdparty/admin_swagger.json +961 -0
  107. package/src/interface/thirdparty/api-swagger.yaml +1739 -0
  108. package/src/interface/thirdparty/api_swagger.json +3142 -0
  109. package/src/lib/argv.js +39 -0
  110. package/src/lib/cache.js +126 -0
  111. package/src/lib/config.js +183 -0
  112. package/src/lib/db.js +26 -0
  113. package/src/lib/headers.js +53 -0
  114. package/src/lib/healthCheck/subServiceHealth.js +84 -0
  115. package/src/lib/index.js +11 -0
  116. package/src/lib/migrator.js +17 -0
  117. package/src/lib/requestLogger.js +54 -0
  118. package/src/lib/util.js +66 -0
  119. package/src/metrics/handler.js +33 -0
  120. package/src/metrics/plugin.js +52 -0
  121. package/src/metrics/routes.js +43 -0
  122. package/src/models/currency/currency.js +48 -0
  123. package/src/models/currency/index.js +32 -0
  124. package/src/models/endpointType/endpointType.js +48 -0
  125. package/src/models/endpointType/index.js +32 -0
  126. package/src/models/misc/migrationLock.js +49 -0
  127. package/src/models/oracle/facade.js +341 -0
  128. package/src/models/oracle/index.js +41 -0
  129. package/src/models/oracle/oracleEndpoint.js +192 -0
  130. package/src/models/oracle/oracleEndpointCached.js +108 -0
  131. package/src/models/participantEndpoint/facade.js +238 -0
  132. package/src/models/partyIdType/index.js +32 -0
  133. package/src/models/partyIdType/partyIdType.js +41 -0
  134. package/src/plugins.js +139 -0
  135. package/src/server.js +199 -0
  136. package/test/fixtures/index.js +131 -0
  137. package/test/fixtures/iso.js +110 -0
  138. package/test/integration/.env +8 -0
  139. package/test/integration/api/parties.test.js +137 -0
  140. package/test/integration/constants.js +20 -0
  141. package/test/integration/domain/oracle/index.test.js +324 -0
  142. package/test/integration/domain/timeout/index.test.js +75 -0
  143. package/test/integration/env.sh +15 -0
  144. package/test/integration/example.test.js +12 -0
  145. package/test/integration/models/currency/currency.test.js +68 -0
  146. package/test/integration/plugins.test.js +62 -0
  147. package/test/integration/prepareTestParticipants.js +30 -0
  148. package/test/integration/setup.js +5 -0
  149. package/test/integration-config.json +81 -0
  150. package/test/integration-runner.sh +108 -0
  151. package/test/unit/api/health.test.js +142 -0
  152. package/test/unit/api/oracles/{ID}.test.js +264 -0
  153. package/test/unit/api/oracles.test.js +173 -0
  154. package/test/unit/api/participants/participants.test.js +117 -0
  155. package/test/unit/api/participants/{Type}/{ID}/error.test.js +155 -0
  156. package/test/unit/api/participants/{Type}/{ID}/{SubId}/error.test.js +131 -0
  157. package/test/unit/api/participants/{Type}/{ID}/{SubId}.test.js +377 -0
  158. package/test/unit/api/participants/{Type}/{ID}.test.js +383 -0
  159. package/test/unit/api/participants.test.js +108 -0
  160. package/test/unit/api/parties/endpointcache.test.js +83 -0
  161. package/test/unit/api/parties/parties.test.js +102 -0
  162. package/test/unit/api/parties/{Type}/{ID}/error.test.js +145 -0
  163. package/test/unit/api/parties/{Type}/{ID}/{SubId}/error.test.js +141 -0
  164. package/test/unit/api/parties/{Type}/{ID}/{SubId}.test.js +241 -0
  165. package/test/unit/api/parties/{Type}/{ID}.test.js +240 -0
  166. package/test/unit/domain/oracle/oracle.test.js +505 -0
  167. package/test/unit/domain/participants/participants.test.js +1724 -0
  168. package/test/unit/domain/parties/parties.test.js +940 -0
  169. package/test/unit/domain/timeout/dto.test.js +28 -0
  170. package/test/unit/domain/timeout/index.test.js +81 -0
  171. package/test/unit/handlers/TimeoutHandler.test.js +125 -0
  172. package/test/unit/handlers/index.test.js +56 -0
  173. package/test/unit/handlers/register.test.js +90 -0
  174. package/test/unit/index.test.js +139 -0
  175. package/test/unit/iso20022/partiesValidation.test.js +129 -0
  176. package/test/unit/lib/TransformFacades.test.js +18 -0
  177. package/test/unit/lib/argv.test.js +40 -0
  178. package/test/unit/lib/cache.test.js +172 -0
  179. package/test/unit/lib/config.test.js +108 -0
  180. package/test/unit/lib/healthCheck/subServiceHealth.test.js +89 -0
  181. package/test/unit/lib/migrator.test.js +52 -0
  182. package/test/unit/lib/requestLogger.test.js +115 -0
  183. package/test/unit/lib/util.test.js +68 -0
  184. package/test/unit/mocks.js +66 -0
  185. package/test/unit/models/currency/currency.test.js +91 -0
  186. package/test/unit/models/endpointType/endpointType.test.js +69 -0
  187. package/test/unit/models/misc/migrationLock.test.js +96 -0
  188. package/test/unit/models/oracle/facade.test.js +546 -0
  189. package/test/unit/models/oracle/oracleEndpoint.test.js +409 -0
  190. package/test/unit/models/oracle/oracleEndpointCached.test.js +153 -0
  191. package/test/unit/models/participantEndpoint/facade.test.js +295 -0
  192. package/test/unit/models/partyIdType/partyIdType.test.js +88 -0
  193. package/test/unit/plugins.test.js +89 -0
  194. package/test/unit/setup.js +7 -0
  195. package/test/util/apiClients/AlsApiClient.js +44 -0
  196. package/test/util/apiClients/BasicApiClient.js +34 -0
  197. package/test/util/apiClients/ProxyApiClient.js +25 -0
  198. package/test/util/apiClients/index.js +7 -0
  199. package/test/util/helper.js +332 -0
  200. package/test/util/index.js +11 -0
  201. package/test/util/mockgen.js +43 -0
  202. package/test/util/onboarding.js +132 -0
  203. package/test/util/scripts/addAlsDb.sh +33 -0
  204. package/test/util/scripts/configureMockServer.sh +35 -0
  205. package/test/util/scripts/env.sh +19 -0
  206. package/test/util/scripts/populateTestData.sh +62 -0
  207. package/test/util/scripts/startMockCentralServer.sh +45 -0
  208. package/test/util/scripts/startMockOracleServer.sh +45 -0
  209. package/test/util/testConfig.js +44 -0
@@ -0,0 +1,8 @@
1
+ const baseConfig = require('./jest.config.js')
2
+
3
+ module.exports = {
4
+ ...baseConfig,
5
+ setupFiles: ['<rootDir>/test/integration/setup.js'],
6
+ testMatch: ['<rootDir>/test/integration/**/*.test.js'],
7
+ reporters: ['default', 'jest-junit']
8
+ }
package/jest.config.js ADDED
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ verbose: true,
3
+ collectCoverageFrom: [
4
+ '**/src/**/**/*.js'
5
+ ],
6
+ coverageThreshold: {
7
+ global: {
8
+ statements: 90,
9
+ functions: 90,
10
+ branches: 90,
11
+ lines: 90
12
+ }
13
+ },
14
+ setupFiles: ['<rootDir>/test/unit/setup.js'],
15
+ testMatch: ['<rootDir>/test/unit/**/*.test.js']
16
+ }
package/jsdoc.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "tags": {
3
+ "allowUnknownTags": true
4
+ },
5
+ "source": {
6
+ "include": [
7
+ "src"
8
+ ],
9
+ "includePattern": ".js$",
10
+ "excludePattern": "(node_modules/|docs)"
11
+ },
12
+ "plugins": [
13
+ "plugins/markdown"
14
+ ],
15
+ "opts": {
16
+ "template": "node_modules/docdash",
17
+ "encoding": "utf8",
18
+ "destination": "docs/",
19
+ "recurse": true,
20
+ "verbose": true
21
+ },
22
+ "markdown": {
23
+ "parser": "gfm",
24
+ "hardwrap": true
25
+ },
26
+ "templates": {
27
+ "cleverLinks": false,
28
+ "monospaceLinks": false,
29
+ "default": {
30
+ "outputSourceFiles": true,
31
+ "includeDate": false
32
+ }
33
+ },
34
+ "docdash": {
35
+ "static": false,
36
+ "sort": true
37
+ }
38
+ }
@@ -0,0 +1,42 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Georgi Georgiev <georgi.georgiev@modusbox.com>
22
+ --------------
23
+ ******/
24
+
25
+ 'use strict'
26
+
27
+ exports.up = (knex) => {
28
+ return knex.schema.hasTable('currency').then(function (exists) {
29
+ if (!exists) {
30
+ return knex.schema.createTable('currency', (t) => {
31
+ t.string('currencyId', 3).primary().notNullable()
32
+ t.string('name', 128).defaultTo(null).nullable()
33
+ t.boolean('isActive').defaultTo(true).notNullable()
34
+ t.dateTime('createdDate').defaultTo(knex.fn.now()).notNullable()
35
+ })
36
+ }
37
+ })
38
+ }
39
+
40
+ exports.down = function (knex) {
41
+ return knex.schema.dropTableIfExists('currency')
42
+ }
@@ -0,0 +1,43 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+ --------------
23
+ ******/
24
+
25
+ 'use strict'
26
+
27
+ exports.up = (knex) => {
28
+ return knex.schema.hasTable('endpointType').then(function (exists) {
29
+ if (!exists) {
30
+ return knex.schema.createTable('endpointType', (t) => {
31
+ t.increments('endpointTypeId').primary().notNullable()
32
+ t.string('type', 50).notNullable()
33
+ t.string('description', 512).defaultTo(null).nullable()
34
+ t.boolean('isActive').defaultTo(true).notNullable()
35
+ t.dateTime('createdDate').defaultTo(knex.fn.now()).notNullable()
36
+ })
37
+ }
38
+ })
39
+ }
40
+
41
+ exports.down = function (knex) {
42
+ return knex.schema.dropTableIfExists('endpointType')
43
+ }
@@ -0,0 +1,37 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+ --------------
23
+ ******/
24
+
25
+ 'use strict'
26
+
27
+ exports.up = function (knex) {
28
+ return knex.schema.table('endpointType', (t) => {
29
+ t.unique('type')
30
+ })
31
+ }
32
+
33
+ exports.down = function (knex) {
34
+ return knex.schema.table('endpointType', (t) => {
35
+ t.dropUnique('type')
36
+ })
37
+ }
@@ -0,0 +1,43 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+ --------------
23
+ ******/
24
+
25
+ 'use strict'
26
+
27
+ exports.up = function (knex) {
28
+ return knex.schema.hasTable('partyIdType').then(function (exists) {
29
+ if (!exists) {
30
+ return knex.schema.createTable('partyIdType', (t) => {
31
+ t.increments('partyIdTypeId').primary().notNullable()
32
+ t.string('name').notNullable()
33
+ t.string('description', 512).notNullable()
34
+ t.boolean('isActive').defaultTo(true).notNullable()
35
+ t.dateTime('createdDate').defaultTo(knex.fn.now()).notNullable()
36
+ })
37
+ }
38
+ })
39
+ }
40
+
41
+ exports.down = function (knex) {
42
+ return knex.schema.dropTableIfExists('partyIdType')
43
+ }
@@ -0,0 +1,38 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+
23
+ --------------
24
+ ******/
25
+
26
+ 'use strict'
27
+
28
+ exports.up = function (knex) {
29
+ return knex.schema.table('partyIdType', (t) => {
30
+ t.unique('name')
31
+ })
32
+ }
33
+
34
+ exports.down = function (knex) {
35
+ return knex.schema.table('partyIdType', (t) => {
36
+ t.dropUnique('name')
37
+ })
38
+ }
@@ -0,0 +1,51 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+
23
+ --------------
24
+ ******/
25
+
26
+ 'use strict'
27
+
28
+ exports.up = (knex) => {
29
+ return knex.schema.hasTable('oracleEndpoint').then(function (exists) {
30
+ if (!exists) {
31
+ return knex.schema.createTable('oracleEndpoint', (t) => {
32
+ t.increments('oracleEndpointId').primary().notNullable()
33
+ t.integer('partyIdTypeId').unsigned().notNullable()
34
+ t.foreign('partyIdTypeId').references('partyIdTypeId').inTable('partyIdType')
35
+ t.integer('endpointTypeId').unsigned().notNullable()
36
+ t.foreign('endpointTypeId').references('endpointTypeId').inTable('endpointType')
37
+ t.string('currencyId')
38
+ t.foreign('currencyId').references('currencyId').inTable('currency')
39
+ t.string('value', 512).notNullable()
40
+ t.boolean('isDefault').defaultTo(false).notNullable()
41
+ t.boolean('isActive').defaultTo(true).notNullable()
42
+ t.dateTime('createdDate').defaultTo(knex.fn.now()).notNullable()
43
+ t.string('createdBy', 128).notNullable()
44
+ })
45
+ }
46
+ })
47
+ }
48
+
49
+ exports.down = function (knex) {
50
+ return knex.schema.dropTableIfExists('oracleEndpoint')
51
+ }
@@ -0,0 +1,41 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Rajiv Mothilal <rajiv.mothilal@modusbox.com>
22
+
23
+ --------------
24
+ ******/
25
+
26
+ 'use strict'
27
+
28
+ exports.up = function (knex) {
29
+ return knex.schema.table('oracleEndpoint', (t) => {
30
+ t.index('partyIdTypeId')
31
+ t.index('endpointTypeId')
32
+ t.unique(['partyIdTypeId', 'endpointTypeId', 'currencyId'])
33
+ })
34
+ }
35
+
36
+ exports.down = function (knex) {
37
+ return knex.schema.table('oracleEndpoint', (t) => {
38
+ t.dropIndex('partyIdTypeId')
39
+ t.dropIndex('endpointTypeId')
40
+ })
41
+ }
@@ -0,0 +1,38 @@
1
+ /*****
2
+ License
3
+ --------------
4
+ Copyright © 2017 Bill & Melinda Gates Foundation
5
+ The Mojaloop files are made available by the Bill & Melinda Gates 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
+ http://www.apache.org/licenses/LICENSE-2.0
7
+ 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.
8
+ Contributors
9
+ --------------
10
+ This is the official list of the Mojaloop project contributors for this file.
11
+ Names of the original copyright holders (individuals or organizations)
12
+ should be listed with a '*' in the first column. People who have
13
+ contributed from an organization can be listed under the organization
14
+ that actually holds the copyright for their contributions (see the
15
+ Gates Foundation organization for an example). Those individuals should have
16
+ their names indented and be marked with a '-'. Email address can be added
17
+ optionally within square brackets <email>.
18
+ * Gates Foundation
19
+ - Name Surname <name.surname@gatesfoundation.com>
20
+
21
+ * Kevin Leyow <kevin.leyow@modusbox.com>
22
+
23
+ --------------
24
+ ******/
25
+
26
+ 'use strict'
27
+
28
+ exports.up = function (knex) {
29
+ return knex.schema.table('oracleEndpoint', (t) => {
30
+ t.dropUnique(['partyIdTypeId', 'endpointTypeId', 'currencyId'])
31
+ })
32
+ }
33
+
34
+ exports.down = function (knex) {
35
+ return knex.schema.table('oracleEndpoint', (t) => {
36
+ t.unique(['partyIdTypeId', 'endpointTypeId', 'currencyId'])
37
+ })
38
+ }
package/package.json ADDED
@@ -0,0 +1,180 @@
1
+ {
2
+ "name": "account-lookup-service",
3
+ "description": "Account Lookup Service is used to validate Party and Participant lookups.",
4
+ "version": "15.5.0-iso.0",
5
+ "license": "Apache-2.0",
6
+ "author": "ModusBox",
7
+ "contributors": [
8
+ "Rajiv Mothilal <rajiv.mothilal@modusbox.com>",
9
+ "Matt Kingston <matt.kingston@modusbox.com>",
10
+ "Lewis Daly <lewisd@crosslaketech.com>",
11
+ "Shashikant Hirugade <shashikant.hirugade@modusbox.com>",
12
+ "Sam Kummmary <skummary@mojaloop.io>",
13
+ "Steven Oderayi <steven.oderayi@modusbox.com>",
14
+ "Kevin Leyow <kevin.leyow@modusbox.com>",
15
+ "Miguel de Barros <miguel.debarros@modusbox.com>"
16
+ ],
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git://github.com/mojaloop/account-lookup-service.git"
20
+ },
21
+ "bugs": "http://github.com/mojaloop/account-lookup-service/issues",
22
+ "engines": {
23
+ "node": ">=18.x"
24
+ },
25
+ "config": {
26
+ "knex": "--knexfile ./config/knexfile.js",
27
+ "env_file": "--env-file ./test/integration/.env"
28
+ },
29
+ "standard": {
30
+ "env": [
31
+ "jest"
32
+ ]
33
+ },
34
+ "pre-commit": [
35
+ "lint",
36
+ "dep:check",
37
+ "audit:check",
38
+ "test"
39
+ ],
40
+ "scripts": {
41
+ "start": "LOG_LEVEL=debug node src/index.js server",
42
+ "start:all": "run-p start:api start:admin start:handlers",
43
+ "start:api": "node src/index.js server --api",
44
+ "start:admin": "node src/index.js server --admin",
45
+ "start:handlers": "node src/handlers/index.js handlers --timeout",
46
+ "standard": "standard",
47
+ "standard:fix": "standard --fix",
48
+ "lint": "npm run standard",
49
+ "lint:fix": "npm run standard:fix",
50
+ "dev": "nodemon src/index.js server",
51
+ "test": "npm run test:unit",
52
+ "test:unit": "NODE_OPTIONS='--experimental-vm-modules' jest --runInBand",
53
+ "test:coverage": "npm test -- --coverage --coverageThreshold='{}'",
54
+ "test:coverage-check": "npm test -- --coverage",
55
+ "test:junit": "npm test -- --reporters=default --reporters=jest-junit",
56
+ "test:xunit": "npm run test:junit",
57
+ "test:functional": "sh ./scripts/test-functional.sh",
58
+ "test:int": "npm run migrate && npm run onboarding && jest --config=./jest-int.config.js --runInBand",
59
+ "test:integration": "npm run dc:up && npm run wait-4-docker && npm run test:int | tee ./test/results/test-int.log",
60
+ "test:integration-runner": "TEST_MODE=rm ./test/integration-runner.sh",
61
+ "onboarding": "node test/integration/prepareTestParticipants.js",
62
+ "cover": "npx nyc --all report --reporter=lcov npm run test",
63
+ "migrate": "run-s migrate:latest seed:run",
64
+ "migrate:latest": "knex $npm_package_config_knex migrate:latest",
65
+ "migrate:create": "knex migrate:make $npm_package_config_knex",
66
+ "migrate:rollback": "knex migrate:rollback $npm_package_config_knex",
67
+ "migrate:current": "knex migrate:currentVersion $npm_package_config_knex",
68
+ "seed:run": "knex seed:run $npm_package_config_knex",
69
+ "seed:create": "knex seed:make $npm_package_config_knex",
70
+ "regenerate": "yo swaggerize:test --framework hapi --apiPath './config/api_swagger.json'",
71
+ "dc:build": "docker compose $npm_package_config_env_file build",
72
+ "dc:up": ". ./test/integration/env.sh && docker compose $npm_package_config_env_file up -d && docker ps",
73
+ "dc:down": ". ./test/integration/env.sh && docker compose $npm_package_config_env_file down -v",
74
+ "docker:build": "docker build --build-arg NODE_VERSION=\"$(cat .nvmrc)-alpine\" -t mojaloop/account-lookup-service:local -f ./Dockerfile .",
75
+ "docker:run": "docker run -p 3000:3000 --rm central-directory:local",
76
+ "generate-docs": "jsdoc -c jsdoc.json",
77
+ "audit:fix": "npm audit fix",
78
+ "audit:check": "npx audit-ci --config ./audit-ci.jsonc",
79
+ "dep:check": "npx ncu -e 2",
80
+ "dep:update": "npx ncu -u",
81
+ "release": "npx standard-version --no-verify --releaseCommitMessageFormat 'chore(release): {{currentTag}} [skip ci]'",
82
+ "snapshot": "npx standard-version --no-verify --skip.changelog --prerelease snapshot --releaseCommitMessageFormat 'chore(snapshot): {{currentTag}}'",
83
+ "wait-4-docker": "node ./scripts/_wait4_all.js"
84
+ },
85
+ "dependencies": {
86
+ "@hapi/basic": "7.0.2",
87
+ "@hapi/boom": "10.0.1",
88
+ "@hapi/catbox-memory": "6.0.2",
89
+ "@hapi/good": "9.0.1",
90
+ "@hapi/hapi": "21.3.10",
91
+ "@hapi/inert": "7.1.0",
92
+ "@hapi/joi": "17.1.1",
93
+ "@hapi/vision": "7.0.3",
94
+ "@mojaloop/central-services-error-handling": "13.0.1",
95
+ "@mojaloop/central-services-health": "15.0.0",
96
+ "@mojaloop/central-services-logger": "11.5.1",
97
+ "@mojaloop/central-services-metrics": "12.0.8",
98
+ "@mojaloop/central-services-shared": "18.10.0-snapshot.4",
99
+ "@mojaloop/central-services-stream": "11.3.1",
100
+ "@mojaloop/database-lib": "11.0.6",
101
+ "@mojaloop/event-sdk": "14.1.1",
102
+ "@mojaloop/inter-scheme-proxy-cache-lib": "2.3.0",
103
+ "@mojaloop/ml-schema-transformer-lib": "0.1.1-snapshot.17",
104
+ "@mojaloop/sdk-standard-components": "19.0.0",
105
+ "@now-ims/hapi-now-auth": "2.1.0",
106
+ "ajv": "8.17.1",
107
+ "ajv-keywords": "5.1.0",
108
+ "blipp": "4.0.2",
109
+ "commander": "12.1.0",
110
+ "cron": "3.1.7",
111
+ "fast-safe-stringify": "^2.1.1",
112
+ "hapi-auth-bearer-token": "8.0.0",
113
+ "joi": "17.13.3",
114
+ "knex": "3.1.0",
115
+ "mustache": "4.2.0",
116
+ "mysql": "2.18.1",
117
+ "npm-run-all": "4.1.5",
118
+ "parse-strings-in-object": "2.0.0",
119
+ "rc": "1.2.8"
120
+ },
121
+ "overrides": {
122
+ "@mojaloop/central-services-health": {
123
+ "@mojaloop/central-services-logger": ">=11.4.0"
124
+ },
125
+ "@mojaloop/central-services-shared": {
126
+ "@mojaloop/central-services-logger": ">=11.4.0"
127
+ },
128
+ "@mojaloop/central-services-stream": {
129
+ "@mojaloop/central-services-logger": ">=11.4.0"
130
+ },
131
+ "shins": {
132
+ "ajv": "6.12.3",
133
+ "ejs": "3.1.10",
134
+ "sanitize-html": "2.12.1",
135
+ "yargs-parser": "18.1.1",
136
+ "markdown-it": "12.3.2"
137
+ },
138
+ "widdershins": {
139
+ "swagger2openapi": "7.0.8",
140
+ "yargs-parser": "13.1.2",
141
+ "markdown-it": "12.3.2"
142
+ },
143
+ "yargs": {
144
+ "yargs-parser": "^21.1.1"
145
+ },
146
+ "jsonwebtoken": "9.0.0",
147
+ "jsonpointer": "5.0.0"
148
+ },
149
+ "devDependencies": {
150
+ "@types/jest": "29.5.13",
151
+ "audit-ci": "^7.1.0",
152
+ "axios": "1.7.7",
153
+ "axios-retry": "^4.5.0",
154
+ "docdash": "2.0.2",
155
+ "dotenv": "^16.4.5",
156
+ "get-port": "5.1.1",
157
+ "ioredis-mock": "^8.9.0",
158
+ "jest": "29.7.0",
159
+ "jest-junit": "16.0.0",
160
+ "jsdoc": "4.0.3",
161
+ "nodemon": "3.1.7",
162
+ "npm-check-updates": "17.1.3",
163
+ "nyc": "17.1.0",
164
+ "pre-commit": "1.2.2",
165
+ "proxyquire": "2.1.3",
166
+ "replace": "^1.2.2",
167
+ "sinon": "19.0.2",
168
+ "standard": "17.1.2",
169
+ "standard-version": "^9.5.0",
170
+ "swagmock": "1.0.0"
171
+ },
172
+ "generator-swaggerize": {
173
+ "version": "4.1.0"
174
+ },
175
+ "standard-version": {
176
+ "scripts": {
177
+ "postchangelog": "replace '\\[mojaloop/#(\\d+)\\]\\(https://github.com/mojaloop/(.*)/issues/(\\d+)\\)' '[mojaloop/#$1](https://github.com/mojaloop/project/issues/$1)' CHANGELOG.md"
178
+ }
179
+ }
180
+ }