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,961 @@
1
+ {
2
+ "swagger": "2.0",
3
+ "info": {
4
+ "version": "1.0",
5
+ "title": "Open API for ALS Admin API Extended",
6
+ "description": "Open API for ALS Admin API",
7
+ "license": {
8
+ "name": "Apache 2.0"
9
+ }
10
+ },
11
+ "basePath": "/",
12
+ "schemes": [
13
+ "http"
14
+ ],
15
+ "produces": [
16
+ "application/json"
17
+ ],
18
+ "paths": {
19
+ "/oracles": {
20
+ "get": {
21
+ "description": "The HTTP request GET /oracles is used to return the list of all oracle endpoints. There are optional fields for type and currency i.e. /admin/oracles?type=MSISDN&currency=USD which can be used to get more filtered results or a specific entry",
22
+ "summary": "Get Oracles",
23
+ "tags": [
24
+ "admin",
25
+ "sampled"
26
+ ],
27
+ "operationId": "als_oracles_get",
28
+ "produces": [
29
+ "application/json"
30
+ ],
31
+ "parameters": [
32
+ {
33
+ "$ref": "#/parameters/type"
34
+ },
35
+ {
36
+ "$ref": "#/parameters/currency"
37
+ },
38
+ {
39
+ "$ref": "#/parameters/Accept"
40
+ },
41
+ {
42
+ "$ref": "#/parameters/Content-Type"
43
+ },
44
+ {
45
+ "$ref": "#/parameters/Date"
46
+ }
47
+ ],
48
+ "responses": {
49
+ "200": {
50
+ "$ref": "#/responses/Response200"
51
+ },
52
+ "400": {
53
+ "$ref": "#/responses/ErrorResponse400"
54
+ },
55
+ "401": {
56
+ "$ref": "#/responses/ErrorResponse401"
57
+ },
58
+ "403": {
59
+ "$ref": "#/responses/ErrorResponse403"
60
+ },
61
+ "404": {
62
+ "$ref": "#/responses/ErrorResponse404"
63
+ },
64
+ "405": {
65
+ "$ref": "#/responses/ErrorResponse405"
66
+ },
67
+ "406": {
68
+ "$ref": "#/responses/ErrorResponse406"
69
+ },
70
+ "501": {
71
+ "$ref": "#/responses/ErrorResponse501"
72
+ },
73
+ "503": {
74
+ "$ref": "#/responses/ErrorResponse503"
75
+ }
76
+ }
77
+ },
78
+ "post": {
79
+ "description": "The HTTP request POST /oracles is used to create information in the server regarding the provided oracles. This request should be used for creation of Oracle information.",
80
+ "summary": "Create Oracles",
81
+ "tags": [
82
+ "admin",
83
+ "sampled"
84
+ ],
85
+ "operationId": "als_oracles_post",
86
+ "produces": [
87
+ "application/json"
88
+ ],
89
+ "parameters": [
90
+ {
91
+ "name": "body",
92
+ "in": "body",
93
+ "required": true,
94
+ "schema": {
95
+ "$ref": "#/definitions/OracleInfo"
96
+ }
97
+ },
98
+ {
99
+ "$ref": "#/parameters/Accept"
100
+ },
101
+ {
102
+ "$ref": "#/parameters/Content-Length"
103
+ },
104
+ {
105
+ "$ref": "#/parameters/Content-Type"
106
+ },
107
+ {
108
+ "$ref": "#/parameters/Date"
109
+ }
110
+ ],
111
+ "x-examples": {
112
+ "application/json": {
113
+ "“oracleIdType”": "“MSISDN”",
114
+ "“currency”": "“USD”",
115
+ "“endpoint”": {
116
+ "“value”": "“http://localhost:5000”",
117
+ "“endpointType”": "“URL”"
118
+ },
119
+ "“isDefault”": true
120
+ }
121
+ },
122
+ "responses": {
123
+ "201": {
124
+ "$ref": "#/responses/Response201"
125
+ },
126
+ "400": {
127
+ "$ref": "#/responses/ErrorResponse400"
128
+ },
129
+ "401": {
130
+ "$ref": "#/responses/ErrorResponse401"
131
+ },
132
+ "403": {
133
+ "$ref": "#/responses/ErrorResponse403"
134
+ },
135
+ "404": {
136
+ "$ref": "#/responses/ErrorResponse404"
137
+ },
138
+ "405": {
139
+ "$ref": "#/responses/ErrorResponse405"
140
+ },
141
+ "406": {
142
+ "$ref": "#/responses/ErrorResponse406"
143
+ },
144
+ "501": {
145
+ "$ref": "#/responses/ErrorResponse501"
146
+ },
147
+ "503": {
148
+ "$ref": "#/responses/ErrorResponse503"
149
+ }
150
+ }
151
+ }
152
+ },
153
+ "/oracles/{ID}": {
154
+ "put": {
155
+ "description": "The HTTP request PUT /oracles/{ID} is used to update information in the server regarding the provided oracle. This request should be used for individual update of Oracle information.",
156
+ "summary": "Update Oracle",
157
+ "tags": [
158
+ "admin",
159
+ "sampled"
160
+ ],
161
+ "operationId": "als_oracles_put",
162
+ "produces": [
163
+ "application/json"
164
+ ],
165
+ "parameters": [
166
+ {
167
+ "name": "body",
168
+ "in": "body",
169
+ "required": true,
170
+ "schema": {
171
+ "$ref": "#/definitions/OracleInfo"
172
+ }
173
+ },
174
+ {
175
+ "$ref": "#/parameters/ID"
176
+ },
177
+ {
178
+ "$ref": "#/parameters/Content-Length"
179
+ },
180
+ {
181
+ "$ref": "#/parameters/Content-Type"
182
+ },
183
+ {
184
+ "$ref": "#/parameters/Date"
185
+ }
186
+ ],
187
+ "x-examples": {
188
+ "application/json": {
189
+ "“oracleIdType”": "“MSISDN”",
190
+ "“currency”": "“USD”",
191
+ "“endpoint”": {
192
+ "“value”": "“http://localhost:5000”",
193
+ "“endpointType”": "“URL”"
194
+ },
195
+ "“isDefault”": true
196
+ }
197
+ },
198
+ "responses": {
199
+ "204": {
200
+ "$ref": "#/responses/Response204"
201
+ },
202
+ "400": {
203
+ "$ref": "#/responses/ErrorResponse400"
204
+ },
205
+ "401": {
206
+ "$ref": "#/responses/ErrorResponse401"
207
+ },
208
+ "403": {
209
+ "$ref": "#/responses/ErrorResponse403"
210
+ },
211
+ "404": {
212
+ "$ref": "#/responses/ErrorResponse404"
213
+ },
214
+ "405": {
215
+ "$ref": "#/responses/ErrorResponse405"
216
+ },
217
+ "406": {
218
+ "$ref": "#/responses/ErrorResponse406"
219
+ },
220
+ "501": {
221
+ "$ref": "#/responses/ErrorResponse501"
222
+ },
223
+ "503": {
224
+ "$ref": "#/responses/ErrorResponse503"
225
+ }
226
+ }
227
+ },
228
+ "delete": {
229
+ "description": "The HTTP request DELETE /oracles/{ID} is used to delete information in the server regarding the provided oracle.",
230
+ "summary": "Delete Oracle",
231
+ "tags": [
232
+ "admin",
233
+ "sampled"
234
+ ],
235
+ "operationId": "als_oracles_delete",
236
+ "produces": [
237
+ "application/json"
238
+ ],
239
+ "parameters": [
240
+ {
241
+ "$ref": "#/parameters/Accept"
242
+ },
243
+ {
244
+ "$ref": "#/parameters/ID"
245
+ },
246
+ {
247
+ "$ref": "#/parameters/Content-Type"
248
+ },
249
+ {
250
+ "$ref": "#/parameters/Date"
251
+ }
252
+ ],
253
+ "responses": {
254
+ "204": {
255
+ "$ref": "#/responses/Response204"
256
+ },
257
+ "400": {
258
+ "$ref": "#/responses/ErrorResponse400"
259
+ },
260
+ "401": {
261
+ "$ref": "#/responses/ErrorResponse401"
262
+ },
263
+ "403": {
264
+ "$ref": "#/responses/ErrorResponse403"
265
+ },
266
+ "404": {
267
+ "$ref": "#/responses/ErrorResponse404"
268
+ },
269
+ "405": {
270
+ "$ref": "#/responses/ErrorResponse405"
271
+ },
272
+ "406": {
273
+ "$ref": "#/responses/ErrorResponse406"
274
+ },
275
+ "501": {
276
+ "$ref": "#/responses/ErrorResponse501"
277
+ },
278
+ "503": {
279
+ "$ref": "#/responses/ErrorResponse503"
280
+ }
281
+ }
282
+ }
283
+ },
284
+ "/health": {
285
+ "get": {
286
+ "description": "The HTTP request GET /health is used to return the current status of the Admin API.",
287
+ "summary": "Get Oracles",
288
+ "tags": [
289
+ "admin"
290
+ ],
291
+ "operationId": "als_admin_health_get",
292
+ "produces": [
293
+ "application/json"
294
+ ],
295
+ "responses": {
296
+ "200": {
297
+ "$ref": "#/responses/ResponseHealth200"
298
+ },
299
+ "400": {
300
+ "$ref": "#/responses/ErrorResponse400"
301
+ },
302
+ "401": {
303
+ "$ref": "#/responses/ErrorResponse401"
304
+ },
305
+ "403": {
306
+ "$ref": "#/responses/ErrorResponse403"
307
+ },
308
+ "404": {
309
+ "$ref": "#/responses/ErrorResponse404"
310
+ },
311
+ "405": {
312
+ "$ref": "#/responses/ErrorResponse405"
313
+ },
314
+ "406": {
315
+ "$ref": "#/responses/ErrorResponse406"
316
+ },
317
+ "501": {
318
+ "$ref": "#/responses/ErrorResponse501"
319
+ },
320
+ "503": {
321
+ "$ref": "#/responses/ErrorResponse503"
322
+ }
323
+ }
324
+ }
325
+ }
326
+ },
327
+ "definitions": {
328
+ "ErrorCode": {
329
+ "title": "ErrorCode",
330
+ "type": "string",
331
+ "pattern": "^[1-9]\\d{3}$",
332
+ "description": "The API data type ErrorCode is a JSON String of four characters, consisting of digits only. Negative numbers are not allowed. A leading zero is not allowed. Each error code in the API is a four-digit number, for example, 1234, where the first number (1 in the example) represents the high-level error category, the second number (2 in the example) represents the low-level error category, and the last two numbers (34 in the example) represents the specific error."
333
+ },
334
+ "ErrorDescription": {
335
+ "title": "ErrorDescription",
336
+ "type": "string",
337
+ "minLength": 1,
338
+ "maxLength": 128,
339
+ "description": "Error description string."
340
+ },
341
+ "ExtensionKey": {
342
+ "title": "ExtensionKey",
343
+ "type": "string",
344
+ "minLength": 1,
345
+ "maxLength": 32,
346
+ "description": "Extension key."
347
+ },
348
+ "ExtensionValue": {
349
+ "title": "ExtensionValue",
350
+ "type": "string",
351
+ "minLength": 1,
352
+ "maxLength": 128,
353
+ "description": "Extension value."
354
+ },
355
+ "Currency": {
356
+ "title": "CurrencyEnum",
357
+ "description": "The currency codes defined in ISO 4217 as three-letter alphabetic codes are used as the standard naming representation for currencies.",
358
+ "type": "string",
359
+ "minLength": 3,
360
+ "maxLength": 3,
361
+ "enum": [
362
+ "AED",
363
+ "AFN",
364
+ "ALL",
365
+ "AMD",
366
+ "ANG",
367
+ "AOA",
368
+ "ARS",
369
+ "AUD",
370
+ "AWG",
371
+ "AZN",
372
+ "BAM",
373
+ "BBD",
374
+ "BDT",
375
+ "BGN",
376
+ "BHD",
377
+ "BIF",
378
+ "BMD",
379
+ "BND",
380
+ "BOB",
381
+ "BRL",
382
+ "BSD",
383
+ "BTN",
384
+ "BWP",
385
+ "BYN",
386
+ "BZD",
387
+ "CAD",
388
+ "CDF",
389
+ "CHF",
390
+ "CLP",
391
+ "CNY",
392
+ "COP",
393
+ "CRC",
394
+ "CUC",
395
+ "CUP",
396
+ "CVE",
397
+ "CZK",
398
+ "DJF",
399
+ "DKK",
400
+ "DOP",
401
+ "DZD",
402
+ "EGP",
403
+ "ERN",
404
+ "ETB",
405
+ "EUR",
406
+ "FJD",
407
+ "FKP",
408
+ "GBP",
409
+ "GEL",
410
+ "GGP",
411
+ "GHS",
412
+ "GIP",
413
+ "GMD",
414
+ "GNF",
415
+ "GTQ",
416
+ "GYD",
417
+ "HKD",
418
+ "HNL",
419
+ "HRK",
420
+ "HTG",
421
+ "HUF",
422
+ "IDR",
423
+ "ILS",
424
+ "IMP",
425
+ "INR",
426
+ "IQD",
427
+ "IRR",
428
+ "ISK",
429
+ "JEP",
430
+ "JMD",
431
+ "JOD",
432
+ "JPY",
433
+ "KES",
434
+ "KGS",
435
+ "KHR",
436
+ "KMF",
437
+ "KPW",
438
+ "KRW",
439
+ "KWD",
440
+ "KYD",
441
+ "KZT",
442
+ "LAK",
443
+ "LBP",
444
+ "LKR",
445
+ "LRD",
446
+ "LSL",
447
+ "LYD",
448
+ "MAD",
449
+ "MDL",
450
+ "MGA",
451
+ "MKD",
452
+ "MMK",
453
+ "MNT",
454
+ "MOP",
455
+ "MRO",
456
+ "MUR",
457
+ "MVR",
458
+ "MWK",
459
+ "MXN",
460
+ "MYR",
461
+ "MZN",
462
+ "NAD",
463
+ "NGN",
464
+ "NIO",
465
+ "NOK",
466
+ "NPR",
467
+ "NZD",
468
+ "OMR",
469
+ "PAB",
470
+ "PEN",
471
+ "PGK",
472
+ "PHP",
473
+ "PKR",
474
+ "PLN",
475
+ "PYG",
476
+ "QAR",
477
+ "RON",
478
+ "RSD",
479
+ "RUB",
480
+ "RWF",
481
+ "SAR",
482
+ "SBD",
483
+ "SCR",
484
+ "SDG",
485
+ "SEK",
486
+ "SGD",
487
+ "SHP",
488
+ "SLL",
489
+ "SOS",
490
+ "SPL",
491
+ "SRD",
492
+ "STD",
493
+ "SVC",
494
+ "SYP",
495
+ "SZL",
496
+ "THB",
497
+ "TJS",
498
+ "TMT",
499
+ "TND",
500
+ "TOP",
501
+ "TRY",
502
+ "TTD",
503
+ "TVD",
504
+ "TWD",
505
+ "TZS",
506
+ "UAH",
507
+ "UGX",
508
+ "USD",
509
+ "UYU",
510
+ "UZS",
511
+ "VEF",
512
+ "VND",
513
+ "VUV",
514
+ "WST",
515
+ "XAF",
516
+ "XCD",
517
+ "XDR",
518
+ "XOF",
519
+ "XPF",
520
+ "XTS",
521
+ "XXX",
522
+ "YER",
523
+ "ZAR",
524
+ "ZMW",
525
+ "ZWD"
526
+ ]
527
+ },
528
+ "ErrorInformation": {
529
+ "title": "ErrorInformation",
530
+ "type": "object",
531
+ "description": "Data model for the complex type ErrorInformation.",
532
+ "properties": {
533
+ "errorCode": {
534
+ "type": "string",
535
+ "description": "Specific error number."
536
+ },
537
+ "errorDescription": {
538
+ "type": "string",
539
+ "description": "Error description string."
540
+ },
541
+ "extensionList": {
542
+ "$ref": "#/definitions/ExtensionList"
543
+ }
544
+ },
545
+ "required": [
546
+ "errorCode",
547
+ "errorDescription"
548
+ ]
549
+ },
550
+ "ErrorInformationObject": {
551
+ "title": "ErrorInformationObject",
552
+ "type": "object",
553
+ "description": "Data model for the complex type object that contains ErrorInformation.",
554
+ "properties": {
555
+ "errorInformation": {
556
+ "$ref": "#/definitions/ErrorInformation"
557
+ }
558
+ },
559
+ "required": [
560
+ "errorInformation"
561
+ ]
562
+ },
563
+ "ErrorInformationResponse": {
564
+ "title": "ErrorInformationResponse",
565
+ "type": "object",
566
+ "description": "Data model for the complex type object that contains an optional element ErrorInformation used along with 4xx and 5xx responses.",
567
+ "properties": {
568
+ "errorInformation": {
569
+ "$ref": "#/definitions/ErrorInformation"
570
+ }
571
+ }
572
+ },
573
+ "Extension": {
574
+ "title": "Extension",
575
+ "type": "object",
576
+ "description": "Data model for the complex type Extension",
577
+ "properties": {
578
+ "key": {
579
+ "type": "string",
580
+ "description": "Extension key."
581
+ },
582
+ "value": {
583
+ "type": "string",
584
+ "description": "Extension value."
585
+ }
586
+ },
587
+ "required": [
588
+ "key",
589
+ "value"
590
+ ]
591
+ },
592
+ "ExtensionList": {
593
+ "title": "ExtensionList",
594
+ "type": "object",
595
+ "description": "Data model for the complex type ExtensionList",
596
+ "properties": {
597
+ "extension": {
598
+ "type": "array",
599
+ "items": {
600
+ "$ref": "#/definitions/Extension"
601
+ },
602
+ "minItems": 1,
603
+ "maxItems": 16,
604
+ "description": "Number of Extension elements"
605
+ }
606
+ },
607
+ "required": [
608
+ "extension"
609
+ ]
610
+ },
611
+ "Endpoint": {
612
+ "title": "Endpoint",
613
+ "type": "object",
614
+ "description": "Contains information about an endpoint",
615
+ "properties": {
616
+ "value": {
617
+ "type": "string",
618
+ "description": "An endpoint for the Oracle."
619
+ },
620
+ "endpointType": {
621
+ "$ref": "#/definitions/EndpointType"
622
+ }
623
+ },
624
+ "required": [
625
+ "value",
626
+ "endpointType"
627
+ ]
628
+ },
629
+ "EndpointType": {
630
+ "title": "EndpointType",
631
+ "type": "string",
632
+ "enum": [
633
+ "URL"
634
+ ],
635
+ "description": "The type of endpoint requested"
636
+ },
637
+ "OracleInfo": {
638
+ "title": "OracleInfo",
639
+ "type": "object",
640
+ "description": "Data model for the complex type OracleInfo.",
641
+ "properties": {
642
+ "oracleIdType": {
643
+ "$ref": "#/definitions/PartyIdType"
644
+ },
645
+ "endpoint": {
646
+ "$ref": "#/definitions/Endpoint"
647
+ },
648
+ "currency": {
649
+ "$ref": "#/definitions/Currency"
650
+ },
651
+ "isDefault": {
652
+ "type": "boolean",
653
+ "description": "Is the endpoint default or not"
654
+ }
655
+ },
656
+ "required": [
657
+ "oracleIdType",
658
+ "endpoint"
659
+ ]
660
+ },
661
+ "OracleInfoGetResponse": {
662
+ "title": "OracleInfoGetResponse",
663
+ "type": "object",
664
+ "description": "Data model for the complex type OracleInfo.",
665
+ "properties": {
666
+ "oracleId": {
667
+ "type": "string",
668
+ "description": "Oracle type entry's unique identified"
669
+ },
670
+ "oracleIdType": {
671
+ "$ref": "#/definitions/PartyIdType"
672
+ },
673
+ "endpoint": {
674
+ "$ref": "#/definitions/Endpoint"
675
+ },
676
+ "currency": {
677
+ "$ref": "#/definitions/Currency"
678
+ },
679
+ "isDefault": {
680
+ "type": "boolean",
681
+ "description": "Is the endpoint default or not"
682
+ }
683
+ },
684
+ "required": [
685
+ "oracleIdType",
686
+ "endpoint"
687
+ ]
688
+ },
689
+ "OracleInfoGetResponseList": {
690
+ "title": "OracleInfoGetResponseList",
691
+ "type": "array",
692
+ "description": "List of OracleInfoGetResponse",
693
+ "items": {
694
+ "$ref": "#/definitions/OracleInfoGetResponse",
695
+ "minItems": 1,
696
+ "maxItems": 1000
697
+ }
698
+ },
699
+ "PartyIdType": {
700
+ "title": "PartyIdTypeEnum",
701
+ "type": "string",
702
+ "enum": [
703
+ "MSISDN",
704
+ "EMAIL",
705
+ "PERSONAL_ID",
706
+ "BUSINESS",
707
+ "DEVICE",
708
+ "ACCOUNT_ID",
709
+ "IBAN",
710
+ "ALIAS",
711
+ "CONSENT",
712
+ "THIRD_PARTY_LINK"
713
+ ],
714
+ "description": "Below are the allowed values for the enumeration - MSISDN An MSISDN (Mobile Station International Subscriber Directory Number, that is, the phone number) is used as reference to a participant. The MSISDN identifier should be in international format according to the ITU-T E.164 standard. Optionally, the MSISDN may be prefixed by a single plus sign, indicating the international prefix. - EMAIL An email is used as reference to a participant. The format of the email should be according to the informational RFC 3696. - PERSONAL_ID A personal identifier is used as reference to a participant. Examples of personal identification are passport number, birth certificate number, and national registration number. The identifier number is added in the PartyIdentifier element. The personal identifier type is added in the PartySubIdOrType element. - BUSINESS A specific Business (for example, an organization or a company) is used as reference to a participant. The BUSINESS identifier can be in any format. To make a transaction connected to a specific username or bill number in a Business, the PartySubIdOrType element should be used. - DEVICE A specific device (for example, a POS or ATM) ID connected to a specific business or organization is used as reference to a Party. For referencing a specific device under a specific business or organization, use the PartySubIdOrType element. - ACCOUNT_ID A bank account number or FSP account ID should be used as reference to a participant. The ACCOUNT_ID identifier can be in any format, as formats can greatly differ depending on country and FSP. - IBAN A bank account number or FSP account ID is used as reference to a participant. The IBAN identifier can consist of up to 34 alphanumeric characters and should be entered without whitespace. - ALIAS An alias is used as reference to a participant. The alias should be created in the FSP as an alternative reference to an account owner. Another example of an alias is a username in the FSP system. The ALIAS identifier can be in any format. It is also possible to use the PartySubIdOrType element for identifying an account under an Alias defined by the PartyIdentifier."
715
+ },
716
+ "Status": {
717
+ "title": "Status",
718
+ "type": "object",
719
+ "description": "Data model for the api status.",
720
+ "properties": {
721
+ "status": {
722
+ "type": "string",
723
+ "description": "The return status, usually \"OK\""
724
+ },
725
+ "uptime": {
726
+ "type": "number",
727
+ "description": "The amount of time in seconds that the server has been up for."
728
+ },
729
+ "startTime": {
730
+ "type": "string",
731
+ "description": "The UTC time that the server started up"
732
+ },
733
+ "versionNumber": {
734
+ "type": "string",
735
+ "description": "Current version of the API"
736
+ },
737
+ "services": {
738
+ "type": "array",
739
+ "description": "An list of the statuses of services that the API requires"
740
+ }
741
+
742
+ }
743
+ }
744
+ },
745
+ "responses": {
746
+ "ResponseHealth200": {
747
+ "description": "OK",
748
+ "schema": {
749
+ "$ref": "#/definitions/Status"
750
+ }
751
+ },
752
+ "Response200": {
753
+ "description": "OK",
754
+ "schema": {
755
+ "$ref": "#/definitions/OracleInfoGetResponseList"
756
+ },
757
+ "headers": {
758
+ "Content-Length": {
759
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
760
+ "type": "integer"
761
+ },
762
+ "Content-Type": {
763
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
764
+ "type": "string"
765
+ }
766
+ }
767
+ },
768
+ "Response201": {
769
+ "description": "Created"
770
+ },
771
+ "Response204": {
772
+ "description": "No Content"
773
+ },
774
+ "ErrorResponse400": {
775
+ "description": "Bad Request - The application cannot process the request; for example, due to malformed syntax or the payload exceeded size restrictions.",
776
+ "schema": {
777
+ "$ref": "#/definitions/ErrorInformationResponse"
778
+ },
779
+ "headers": {
780
+ "Content-Length": {
781
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
782
+ "type": "integer"
783
+ },
784
+ "Content-Type": {
785
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
786
+ "type": "string"
787
+ }
788
+ }
789
+ },
790
+ "ErrorResponse401": {
791
+ "description": "Unauthorized - The request requires authentication in order to be processed.",
792
+ "schema": {
793
+ "$ref": "#/definitions/ErrorInformationResponse"
794
+ },
795
+ "headers": {
796
+ "Content-Length": {
797
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
798
+ "type": "integer"
799
+ },
800
+ "Content-Type": {
801
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
802
+ "type": "string"
803
+ }
804
+ }
805
+ },
806
+ "ErrorResponse403": {
807
+ "description": "Forbidden - The request was denied and will be denied in the future.",
808
+ "schema": {
809
+ "$ref": "#/definitions/ErrorInformationResponse"
810
+ },
811
+ "headers": {
812
+ "Content-Length": {
813
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
814
+ "type": "integer"
815
+ },
816
+ "Content-Type": {
817
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
818
+ "type": "string"
819
+ }
820
+ }
821
+ },
822
+ "ErrorResponse404": {
823
+ "description": "Not Found - The resource specified in the URI was not found.",
824
+ "schema": {
825
+ "$ref": "#/definitions/ErrorInformationResponse"
826
+ },
827
+ "headers": {
828
+ "Content-Length": {
829
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
830
+ "type": "integer"
831
+ },
832
+ "Content-Type": {
833
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
834
+ "type": "string"
835
+ }
836
+ }
837
+ },
838
+ "ErrorResponse405": {
839
+ "description": "Method Not Allowed - An unsupported HTTP method for the request was used.",
840
+ "schema": {
841
+ "$ref": "#/definitions/ErrorInformationResponse"
842
+ },
843
+ "headers": {
844
+ "Content-Length": {
845
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
846
+ "type": "integer"
847
+ },
848
+ "Content-Type": {
849
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
850
+ "type": "string"
851
+ }
852
+ }
853
+ },
854
+ "ErrorResponse406": {
855
+ "description": "Not acceptable - The server is not capable of generating content according to the Accept headers sent in the request. Used in the API to indicate that the server does not support the version that the client is requesting.",
856
+ "schema": {
857
+ "$ref": "#/definitions/ErrorInformationResponse"
858
+ },
859
+ "headers": {
860
+ "Content-Length": {
861
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
862
+ "type": "integer"
863
+ },
864
+ "Content-Type": {
865
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
866
+ "type": "string"
867
+ }
868
+ }
869
+ },
870
+ "ErrorResponse501": {
871
+ "description": "Not Implemented - The server does not support the requested service. The client should not retry.",
872
+ "schema": {
873
+ "$ref": "#/definitions/ErrorInformationResponse"
874
+ },
875
+ "headers": {
876
+ "Content-Length": {
877
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
878
+ "type": "integer"
879
+ },
880
+ "Content-Type": {
881
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
882
+ "type": "string"
883
+ }
884
+ }
885
+ },
886
+ "ErrorResponse503": {
887
+ "description": "Service Unavailable - The server is currently unavailable to accept any new service requests. This should be a temporary state, and the client should retry within a reasonable time frame.",
888
+ "schema": {
889
+ "$ref": "#/definitions/ErrorInformationResponse"
890
+ },
891
+ "headers": {
892
+ "Content-Length": {
893
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body.",
894
+ "type": "integer"
895
+ },
896
+ "Content-Type": {
897
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body.",
898
+ "type": "string"
899
+ }
900
+ }
901
+ }
902
+ },
903
+ "parameters": {
904
+ "Accept": {
905
+ "name": "accept",
906
+ "in": "header",
907
+ "required": true,
908
+ "type": "string",
909
+ "description": "The Accept header field indicates the version of the API the client would like the server to use."
910
+ },
911
+ "Accept-Optional": {
912
+ "name": "accept",
913
+ "in": "header",
914
+ "required": false,
915
+ "type": "string",
916
+ "description": "The Accept header field indicates the version of the API the client would like the server to use."
917
+ },
918
+ "Content-Length": {
919
+ "name": "content-length",
920
+ "in": "header",
921
+ "required": false,
922
+ "type": "integer",
923
+ "description": "The Content-Length header field indicates the anticipated size of the payload body. Only sent if there is a body. Note - The API supports a maximum size of 5242880 bytes (5 Megabytes)"
924
+ },
925
+ "Content-Type": {
926
+ "name": "content-type",
927
+ "in": "header",
928
+ "type": "string",
929
+ "required": true,
930
+ "description": "The Content-Type header indicates the specific version of the API used to send the payload body."
931
+ },
932
+ "Date": {
933
+ "name": "date",
934
+ "in": "header",
935
+ "type": "string",
936
+ "required": true,
937
+ "description": "The Date header field indicates the date when the request was sent."
938
+ },
939
+ "ID": {
940
+ "name": "ID",
941
+ "in": "path",
942
+ "required": true,
943
+ "type": "string",
944
+ "description": "ID relating to the oracle endpoint entry"
945
+ },
946
+ "type": {
947
+ "name": "type",
948
+ "in": "query",
949
+ "required": false,
950
+ "type": "string",
951
+ "description": "type of oracle entry"
952
+ },
953
+ "currency": {
954
+ "name": "currency",
955
+ "in": "query",
956
+ "required": false,
957
+ "type": "string",
958
+ "description": "currency relating to the oracle endpoint entry"
959
+ }
960
+ }
961
+ }