@mojaloop/bulk-api-adapter 17.1.6

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.
Files changed (82) hide show
  1. package/.circleci/config.yml +11 -0
  2. package/.dockerignore +17 -0
  3. package/.editorconfig +10 -0
  4. package/.env +0 -0
  5. package/.gitattributes +2 -0
  6. package/.ncurc.yaml +5 -0
  7. package/.nvmrc +1 -0
  8. package/.nycrc.yml +20 -0
  9. package/.versionrc +15 -0
  10. package/API.md +2 -0
  11. package/CHANGELOG.md +257 -0
  12. package/CODEOWNERS +38 -0
  13. package/Dockerfile +44 -0
  14. package/LICENSE.md +10 -0
  15. package/README.md +40 -0
  16. package/audit-ci.jsonc +9 -0
  17. package/config/default.json +164 -0
  18. package/docker/bulk-api-adapter/default.json +147 -0
  19. package/docker/central-ledger/default.json +460 -0
  20. package/docker/kafka/scripts/provision.sh +42 -0
  21. package/docker/sql-init/01_permissions.sql +2 -0
  22. package/docker/wait-for/wait-for-bulk-api-adapter.sh +11 -0
  23. package/docker/wait-for/wait-for-central-ledger.sh +13 -0
  24. package/docker/wait-for/wait-for-kafka.sh +7 -0
  25. package/docker/wait-for/wait-for-mockserver.sh +20 -0
  26. package/docker/wait-for/wait-for-mysql.sh +11 -0
  27. package/docker/wait-for/wait-for-objstore.sh +7 -0
  28. package/docker/wait-for/wait-for.env +11 -0
  29. package/docker/wait-for/wait-for.sh +81 -0
  30. package/docker-compose.yml +167 -0
  31. package/jsdoc.json +38 -0
  32. package/package.json +152 -0
  33. package/sonar-project.properties +17 -0
  34. package/src/api/handlers/bulkTransfers/{id}/error.js +71 -0
  35. package/src/api/handlers/bulkTransfers/{id}.js +98 -0
  36. package/src/api/handlers/bulkTransfers.js +77 -0
  37. package/src/api/handlers/endpointcache.js +48 -0
  38. package/src/api/handlers/health.js +52 -0
  39. package/src/api/handlers/metrics.js +50 -0
  40. package/src/api/index.js +42 -0
  41. package/src/api/routes.js +42 -0
  42. package/src/domain/bulkTransfer/index.js +219 -0
  43. package/src/domain/participant/index.js +61 -0
  44. package/src/domain/participant/lib/cache/participantEndpoint.js +127 -0
  45. package/src/handlers/api/health/plugin.js +51 -0
  46. package/src/handlers/api/health/routes.js +42 -0
  47. package/src/handlers/api/metrics/handler.js +34 -0
  48. package/src/handlers/api/metrics/plugin.js +52 -0
  49. package/src/handlers/api/metrics/routes.js +43 -0
  50. package/src/handlers/index.js +82 -0
  51. package/src/handlers/notification/index.js +362 -0
  52. package/src/handlers/register.js +54 -0
  53. package/src/interface/swagger.yaml +672 -0
  54. package/src/lib/config.js +100 -0
  55. package/src/lib/headers.js +78 -0
  56. package/src/lib/healthCheck/subServiceHealth.js +88 -0
  57. package/src/models/participant/facade.js +61 -0
  58. package/src/models/participant/participantEndpoint.js +79 -0
  59. package/src/shared/plugins.js +111 -0
  60. package/src/shared/setup.js +204 -0
  61. package/test/fixtures/.gitkeep +0 -0
  62. package/test/functional/.gitkeep +0 -0
  63. package/test/helpers.js +79 -0
  64. package/test/integration/.gitkeep +0 -0
  65. package/test/unit/api/handlers/bulkTransfers/{id}/error.test.js +140 -0
  66. package/test/unit/api/handlers/bulkTransfers/{id}.test.js +209 -0
  67. package/test/unit/api/handlers/notification/index.test.js +252 -0
  68. package/test/unit/data/bulkTransfers/{id}/error.js +28 -0
  69. package/test/unit/data/bulkTransfers/{id}.js +49 -0
  70. package/test/unit/data/bulkTransfers.js +28 -0
  71. package/test/unit/data/metrics.js +28 -0
  72. package/test/unit/data/mockgen.js +13 -0
  73. package/test/unit/data/transfers/{id}/error.js +28 -0
  74. package/test/unit/domain/bulkTransfers/index.test.js +181 -0
  75. package/test/unit/endpointcache.test.js +52 -0
  76. package/test/unit/handlers/notification/handler.test.js +323 -0
  77. package/test/unit/health.test.js +75 -0
  78. package/test/unit/lib/config.test.js +83 -0
  79. package/test/unit/lib/headers.test.js +111 -0
  80. package/test/unit/metrics.test.js +71 -0
  81. package/test-integration.Dockerfile +24 -0
  82. package/test.Dockerfile +22 -0
@@ -0,0 +1,147 @@
1
+ {
2
+ "HUB_PARTICIPANT": {
3
+ "ID": 1,
4
+ "NAME": "Hub"
5
+ },
6
+ "PORT": 3003,
7
+ "HOSTNAME": "http://bulk-api-adapter",
8
+ "ENDPOINT_SOURCE_URL": "http://central-ledger:3001/participants/{{fsp}}/endpoints",
9
+ "ENDPOINT_HEALTH_URL": "http://central-ledger:3001/health",
10
+ "ENDPOINT_CACHE_CONFIG": {
11
+ "expiresIn": 180000,
12
+ "generateTimeout": 30000
13
+ },
14
+ "MONGODB": {
15
+ "HOST": "objstore",
16
+ "PORT": 27017,
17
+ "USER": "",
18
+ "PASSWORD": "",
19
+ "DATABASE": "mlos"
20
+ },
21
+ "ENDPOINT_SECURITY":{
22
+ "TLS": {
23
+ "rejectUnauthorized": true
24
+ },
25
+ "JWS": {
26
+ "JWS_SIGN": false,
27
+ "JWS_SIGNING_KEY_PATH": "secrets/jwsSigningKey.key"
28
+ }
29
+ },
30
+ "MAX_FULFIL_TIMEOUT_DURATION_SECONDS": 300,
31
+ "AMOUNT": {
32
+ "PRECISION": 18,
33
+ "SCALE": 4
34
+ },
35
+ "HANDLERS": {
36
+ "DISABLED": false,
37
+ "API": {
38
+ "DISABLED": false
39
+ }
40
+ },
41
+ "INSTRUMENTATION": {
42
+ "METRICS": {
43
+ "DISABLED": false,
44
+ "config": {
45
+ "timeout": 5000,
46
+ "prefix": "moja_bl_",
47
+ "defaultLabels": {
48
+ "serviceName": "bulk-service"
49
+ }
50
+ }
51
+ }
52
+ },
53
+ "KAFKA": {
54
+ "TOPIC_TEMPLATES": {
55
+ "GENERAL_TOPIC_TEMPLATE": {
56
+ "TEMPLATE": "topic-{{functionality}}-{{action}}",
57
+ "REGEX": "topic-(.*)-(.*)"
58
+ }
59
+ },
60
+ "CONSUMER": {
61
+ "NOTIFICATION": {
62
+ "EVENT": {
63
+ "config": {
64
+ "options": {
65
+ "mode": 2,
66
+ "batchSize": 1,
67
+ "pollFrequency": 10,
68
+ "recursiveTimeout": 100,
69
+ "messageCharset": "utf8",
70
+ "messageAsJSON": true,
71
+ "sync": true,
72
+ "consumeTimeout": 1000
73
+ },
74
+ "rdkafkaConf": {
75
+ "client.id": "bulk-con-notification-event",
76
+ "group.id": "bulk-group-notification-event",
77
+ "metadata.broker.list": "kafka:29092",
78
+ "allow.auto.create.topics": true,
79
+ "socket.keepalive.enable": true
80
+ },
81
+ "topicConf": {
82
+ "auto.offset.reset": "earliest"
83
+ }
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "PRODUCER": {
89
+ "BULK": {
90
+ "PREPARE": {
91
+ "config": {
92
+ "options": {
93
+ "messageCharset": "utf8"
94
+ },
95
+ "rdkafkaConf": {
96
+ "metadata.broker.list": "kafka:29092",
97
+ "client.id": "bulk-prod-bulk-prepare",
98
+ "event_cb": true,
99
+ "dr_cb": true,
100
+ "socket.keepalive.enable": true,
101
+ "queue.buffering.max.messages": 10000000
102
+ },
103
+ "topicConf": {
104
+ "request.required.acks": "all"
105
+ }
106
+ }
107
+ },
108
+ "FULFIL": {
109
+ "config": {
110
+ "options": {
111
+ "messageCharset": "utf8"
112
+ },
113
+ "rdkafkaConf": {
114
+ "metadata.broker.list": "kafka:29092",
115
+ "client.id": "bulk-prod-bulk-fulfil",
116
+ "event_cb": true,
117
+ "dr_cb": true,
118
+ "socket.keepalive.enable": true,
119
+ "queue.buffering.max.messages": 10000000
120
+ },
121
+ "topicConf": {
122
+ "request.required.acks": "all"
123
+ }
124
+ }
125
+ },
126
+ "GET": {
127
+ "config": {
128
+ "options": {
129
+ "messageCharset": "utf8"
130
+ },
131
+ "rdkafkaConf": {
132
+ "metadata.broker.list": "kafka:29092",
133
+ "client.id": "bulk-prod-bulk-get",
134
+ "event_cb": true,
135
+ "dr_cb": true,
136
+ "socket.keepalive.enable": true,
137
+ "queue.buffering.max.messages": 10000000
138
+ },
139
+ "topicConf": {
140
+ "request.required.acks": "all"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ }
@@ -0,0 +1,460 @@
1
+ {
2
+ "PORT": 3001,
3
+ "HOSTNAME": "http://central-ledger",
4
+ "DATABASE": {
5
+ "DIALECT": "mysql",
6
+ "HOST": "mysql",
7
+ "PORT": 3306,
8
+ "USER": "central_ledger",
9
+ "PASSWORD": "password",
10
+ "SCHEMA": "central_ledger",
11
+ "POOL_MIN_SIZE": 10,
12
+ "POOL_MAX_SIZE": 10,
13
+ "ACQUIRE_TIMEOUT_MILLIS": 30000,
14
+ "CREATE_TIMEOUT_MILLIS": 30000,
15
+ "DESTROY_TIMEOUT_MILLIS": 5000,
16
+ "IDLE_TIMEOUT_MILLIS": 30000,
17
+ "REAP_INTERVAL_MILLIS": 1000,
18
+ "CREATE_RETRY_INTERVAL_MILLIS": 200,
19
+ "DEBUG": false
20
+ },
21
+ "MIGRATIONS": {
22
+ "DISABLED": false,
23
+ "RUN_DATA_MIGRATIONS": true
24
+ },
25
+ "AMOUNT": {
26
+ "PRECISION": 10,
27
+ "SCALE": 2
28
+ },
29
+ "MONGODB": {
30
+ "DISABLED": true,
31
+ "URI": "mongodb://objstore:27017/mlos"
32
+ },
33
+ "ERROR_HANDLING": {
34
+ "includeCauseExtension": false,
35
+ "truncateCause": true
36
+ },
37
+ "HANDLERS": {
38
+ "DISABLED": false,
39
+ "API": {
40
+ "DISABLED": false
41
+ },
42
+ "TIMEOUT": {
43
+ "DISABLED": false,
44
+ "TIMEXP": "*/15 * * * * *",
45
+ "TIMEZONE": "UTC"
46
+ }
47
+ },
48
+ "INSTRUMENTATION": {
49
+ "METRICS": {
50
+ "DISABLED": false,
51
+ "labels": {
52
+ "fspId": "*"
53
+ },
54
+ "config": {
55
+ "timeout": 5000,
56
+ "prefix": "moja_cl_",
57
+ "defaultLabels": {
58
+ "serviceName": "central-service"
59
+ }
60
+ }
61
+ }
62
+ },
63
+ "PARTICIPANT_INITIAL_POSITION": 0,
64
+ "HUB_PARTICIPANT": {
65
+ "ID": 1,
66
+ "NAME": "Hub",
67
+ "ACCOUNTS": [
68
+ "HUB_RECONCILIATION",
69
+ "HUB_MULTILATERAL_SETTLEMENT",
70
+ "HUB_FEE"
71
+ ]
72
+ },
73
+ "INTERNAL_TRANSFER_VALIDITY_SECONDS": "432000",
74
+ "ENABLE_ON_US_TRANSFERS": false,
75
+ "CACHE": {
76
+ "CACHE_ENABLED": false,
77
+ "MAX_BYTE_SIZE": 10000000,
78
+ "EXPIRES_IN_MS": 1000
79
+ },
80
+ "KAFKA": {
81
+ "TOPIC_TEMPLATES": {
82
+ "PARTICIPANT_TOPIC_TEMPLATE": {
83
+ "TEMPLATE": "topic-{{participantName}}-{{functionality}}-{{action}}",
84
+ "REGEX": "topic-(.*)-(.*)-(.*)"
85
+ },
86
+ "GENERAL_TOPIC_TEMPLATE": {
87
+ "TEMPLATE": "topic-{{functionality}}-{{action}}",
88
+ "REGEX": "topic-(.*)-(.*)"
89
+ }
90
+ },
91
+ "CONSUMER": {
92
+ "BULK": {
93
+ "PREPARE": {
94
+ "config": {
95
+ "options": {
96
+ "mode": 2,
97
+ "batchSize": 1,
98
+ "pollFrequency": 10,
99
+ "recursiveTimeout": 100,
100
+ "messageCharset": "utf8",
101
+ "messageAsJSON": true,
102
+ "sync": true,
103
+ "consumeTimeout": 1000
104
+ },
105
+ "rdkafkaConf": {
106
+ "client.id": "cl-con-bulk-prepare",
107
+ "group.id": "cl-group-bulk-prepare",
108
+ "metadata.broker.list": "kafka:29092",
109
+ "allow.auto.create.topics": true,
110
+ "socket.keepalive.enable": true
111
+ },
112
+ "topicConf": {
113
+ "auto.offset.reset": "earliest"
114
+ }
115
+ }
116
+ },
117
+ "PROCESSING": {
118
+ "config": {
119
+ "options": {
120
+ "mode": 2,
121
+ "batchSize": 1,
122
+ "pollFrequency": 10,
123
+ "recursiveTimeout": 100,
124
+ "messageCharset": "utf8",
125
+ "messageAsJSON": true,
126
+ "sync": true,
127
+ "consumeTimeout": 1000
128
+ },
129
+ "rdkafkaConf": {
130
+ "client.id": "cl-con-bulk-processing",
131
+ "group.id": "cl-group-bulk-processing",
132
+ "metadata.broker.list": "kafka:29092",
133
+ "allow.auto.create.topics": true,
134
+ "socket.keepalive.enable": true
135
+ },
136
+ "topicConf": {
137
+ "auto.offset.reset": "earliest"
138
+ }
139
+ }
140
+ },
141
+ "FULFIL": {
142
+ "config": {
143
+ "options": {
144
+ "mode": 2,
145
+ "batchSize": 1,
146
+ "pollFrequency": 10,
147
+ "recursiveTimeout": 100,
148
+ "messageCharset": "utf8",
149
+ "messageAsJSON": true,
150
+ "sync": true,
151
+ "consumeTimeout": 1000
152
+ },
153
+ "rdkafkaConf": {
154
+ "client.id": "cl-con-bulk-fulfil",
155
+ "group.id": "cl-group-bulk-fulfil",
156
+ "metadata.broker.list": "kafka:29092",
157
+ "allow.auto.create.topics": true,
158
+ "socket.keepalive.enable": true
159
+ },
160
+ "topicConf": {
161
+ "auto.offset.reset": "earliest"
162
+ }
163
+ }
164
+ },
165
+ "GET": {
166
+ "config": {
167
+ "options": {
168
+ "mode": 2,
169
+ "batchSize": 1,
170
+ "pollFrequency": 10,
171
+ "recursiveTimeout": 100,
172
+ "messageCharset": "utf8",
173
+ "messageAsJSON": true,
174
+ "sync": true,
175
+ "consumeTimeout": 1000
176
+ },
177
+ "rdkafkaConf": {
178
+ "client.id": "cl-con-bulk-get",
179
+ "group.id": "cl-group-bulk-get",
180
+ "metadata.broker.list": "kafka:29092",
181
+ "allow.auto.create.topics": true,
182
+ "socket.keepalive.enable": true
183
+ },
184
+ "topicConf": {
185
+ "auto.offset.reset": "earliest"
186
+ }
187
+ }
188
+ }
189
+ },
190
+ "TRANSFER": {
191
+ "PREPARE": {
192
+ "config": {
193
+ "options": {
194
+ "mode": 2,
195
+ "batchSize": 1,
196
+ "pollFrequency": 10,
197
+ "recursiveTimeout": 100,
198
+ "messageCharset": "utf8",
199
+ "messageAsJSON": true,
200
+ "sync": true,
201
+ "consumeTimeout": 1000
202
+ },
203
+ "rdkafkaConf": {
204
+ "client.id": "cl-con-transfer-prepare",
205
+ "group.id": "cl-group-transfer-prepare",
206
+ "metadata.broker.list": "kafka:29092",
207
+ "allow.auto.create.topics": true,
208
+ "socket.keepalive.enable": true
209
+ },
210
+ "topicConf": {
211
+ "auto.offset.reset": "earliest"
212
+ }
213
+ }
214
+ },
215
+ "GET": {
216
+ "config": {
217
+ "options": {
218
+ "mode": 2,
219
+ "batchSize": 1,
220
+ "pollFrequency": 10,
221
+ "recursiveTimeout": 100,
222
+ "messageCharset": "utf8",
223
+ "messageAsJSON": true,
224
+ "sync": true,
225
+ "consumeTimeout": 1000
226
+ },
227
+ "rdkafkaConf": {
228
+ "client.id": "cl-con-transfer-get",
229
+ "group.id": "cl-group-transfer-get",
230
+ "metadata.broker.list": "kafka:29092",
231
+ "allow.auto.create.topics": true,
232
+ "socket.keepalive.enable": true
233
+ },
234
+ "topicConf": {
235
+ "auto.offset.reset": "earliest"
236
+ }
237
+ }
238
+ },
239
+ "FULFIL": {
240
+ "config": {
241
+ "options": {
242
+ "mode": 2,
243
+ "batchSize": 1,
244
+ "pollFrequency": 10,
245
+ "recursiveTimeout": 100,
246
+ "messageCharset": "utf8",
247
+ "messageAsJSON": true,
248
+ "sync": true,
249
+ "consumeTimeout": 1000
250
+ },
251
+ "rdkafkaConf": {
252
+ "client.id": "cl-con-transfer-fulfil",
253
+ "group.id": "cl-group-transfer-fulfil",
254
+ "metadata.broker.list": "kafka:29092",
255
+ "allow.auto.create.topics": true,
256
+ "socket.keepalive.enable": true
257
+ },
258
+ "topicConf": {
259
+ "auto.offset.reset": "earliest"
260
+ }
261
+ }
262
+ },
263
+ "POSITION": {
264
+ "config": {
265
+ "options": {
266
+ "mode": 2,
267
+ "batchSize": 1,
268
+ "pollFrequency": 10,
269
+ "recursiveTimeout": 100,
270
+ "messageCharset": "utf8",
271
+ "messageAsJSON": true,
272
+ "sync": true,
273
+ "consumeTimeout": 1000
274
+ },
275
+ "rdkafkaConf": {
276
+ "client.id": "cl-con-transfer-position",
277
+ "group.id": "cl-group-transfer-position",
278
+ "metadata.broker.list": "kafka:29092",
279
+ "allow.auto.create.topics": true,
280
+ "socket.keepalive.enable": true
281
+ },
282
+ "topicConf": {
283
+ "auto.offset.reset": "earliest"
284
+ }
285
+ }
286
+ }
287
+ },
288
+ "ADMIN": {
289
+ "TRANSFER": {
290
+ "config": {
291
+ "options": {
292
+ "mode": 2,
293
+ "batchSize": 1,
294
+ "pollFrequency": 10,
295
+ "recursiveTimeout": 100,
296
+ "messageCharset": "utf8",
297
+ "messageAsJSON": true,
298
+ "sync": true,
299
+ "consumeTimeout": 1000
300
+ },
301
+ "rdkafkaConf": {
302
+ "client.id": "cl-con-transfer-admin",
303
+ "group.id": "cl-group-transfer-admin",
304
+ "metadata.broker.list": "kafka:29092",
305
+ "allow.auto.create.topics": true,
306
+ "socket.keepalive.enable": true
307
+ },
308
+ "topicConf": {
309
+ "auto.offset.reset": "earliest"
310
+ }
311
+ }
312
+ }
313
+ },
314
+ "NOTIFICATION": {
315
+ "EVENT": {
316
+ "config": {
317
+ "options": {
318
+ "mode": 2,
319
+ "batchSize": 1,
320
+ "pollFrequency": 10,
321
+ "recursiveTimeout": 100,
322
+ "messageCharset": "utf8",
323
+ "messageAsJSON": true,
324
+ "sync": true,
325
+ "consumeTimeout": 1000
326
+ },
327
+ "rdkafkaConf": {
328
+ "client.id": "TESTONLY",
329
+ "group.id": "TESTONLY",
330
+ "metadata.broker.list": "kafka:29092",
331
+ "socket.keepalive.enable": true,
332
+ "allow.auto.create.topics": true
333
+ },
334
+ "topicConf": {
335
+ "auto.offset.reset": "earliest"
336
+ }
337
+ }
338
+ }
339
+ }
340
+ },
341
+ "PRODUCER": {
342
+ "BULK": {
343
+ "PROCESSING": {
344
+ "config": {
345
+ "options": {
346
+ "messageCharset": "utf8"
347
+ },
348
+ "rdkafkaConf": {
349
+ "metadata.broker.list": "kafka:29092",
350
+ "client.id": "cl-prod-bulk-processing",
351
+ "event_cb": true,
352
+ "dr_cb": true,
353
+ "socket.keepalive.enable": true,
354
+ "queue.buffering.max.messages": 10000000
355
+ },
356
+ "topicConf": {
357
+ "request.required.acks": "all"
358
+ }
359
+ }
360
+ }
361
+ },
362
+ "TRANSFER": {
363
+ "PREPARE": {
364
+ "config": {
365
+ "options": {
366
+ "messageCharset": "utf8"
367
+ },
368
+ "rdkafkaConf": {
369
+ "metadata.broker.list": "kafka:29092",
370
+ "client.id": "cl-prod-transfer-prepare",
371
+ "event_cb": true,
372
+ "dr_cb": true,
373
+ "socket.keepalive.enable": true,
374
+ "queue.buffering.max.messages": 10000000
375
+ },
376
+ "topicConf": {
377
+ "request.required.acks": "all"
378
+ }
379
+ }
380
+ },
381
+ "FULFIL": {
382
+ "config": {
383
+ "options": {
384
+ "messageCharset": "utf8"
385
+ },
386
+ "rdkafkaConf": {
387
+ "metadata.broker.list": "kafka:29092",
388
+ "client.id": "cl-prod-transfer-fulfil",
389
+ "event_cb": true,
390
+ "dr_cb": true,
391
+ "socket.keepalive.enable": true,
392
+ "queue.buffering.max.messages": 10000000
393
+ },
394
+ "topicConf": {
395
+ "request.required.acks": "all"
396
+ }
397
+ }
398
+ },
399
+ "POSITION": {
400
+ "config": {
401
+ "options": {
402
+ "messageCharset": "utf8"
403
+ },
404
+ "rdkafkaConf": {
405
+ "metadata.broker.list": "kafka:29092",
406
+ "client.id": "cl-prod-transfer-position",
407
+ "event_cb": true,
408
+ "dr_cb": true,
409
+ "socket.keepalive.enable": true,
410
+ "queue.buffering.max.messages": 10000000
411
+ },
412
+ "topicConf": {
413
+ "request.required.acks": "all"
414
+ }
415
+ }
416
+ }
417
+ },
418
+ "NOTIFICATION": {
419
+ "EVENT": {
420
+ "config": {
421
+ "options": {
422
+ "messageCharset": "utf8"
423
+ },
424
+ "rdkafkaConf": {
425
+ "metadata.broker.list": "kafka:29092",
426
+ "client.id": "cl-prod-notification-event",
427
+ "event_cb": true,
428
+ "dr_cb": true,
429
+ "socket.keepalive.enable": true,
430
+ "queue.buffering.max.messages": 10000000
431
+ },
432
+ "topicConf": {
433
+ "request.required.acks": "all"
434
+ }
435
+ }
436
+ }
437
+ },
438
+ "ADMIN": {
439
+ "TRANSFER": {
440
+ "config": {
441
+ "options": {
442
+ "messageCharset": "utf8"
443
+ },
444
+ "rdkafkaConf": {
445
+ "metadata.broker.list": "kafka:29092",
446
+ "client.id": "cl-prod-transfer-admin",
447
+ "event_cb": true,
448
+ "dr_cb": true,
449
+ "socket.keepalive.enable": true,
450
+ "queue.buffering.max.messages": 10000000
451
+ },
452
+ "topicConf": {
453
+ "request.required.acks": "all"
454
+ }
455
+ }
456
+ }
457
+ }
458
+ }
459
+ }
460
+ }
@@ -0,0 +1,42 @@
1
+ #!/bin/bash
2
+
3
+ KAFKAHOST="${1:-kafka}"
4
+ KAFKAPORT="${2:-29092}"
5
+
6
+ # blocks until kafka is reachable
7
+ echo -e "------------------------------------------"
8
+ echo -e "Listing current kafka topics"
9
+ echo -e "__________________________________________"
10
+ kafka-topics.sh --bootstrap-server $KAFKAHOST:$KAFKAPORT --list
11
+ echo -e ""
12
+ echo -e "------------------------------------------"
13
+ echo -e "Creating kafka topics"
14
+ echo -e "__________________________________________"
15
+
16
+
17
+ # List of topics to create
18
+ topics=(
19
+ "topic-transfer-prepare"
20
+ "topic-transfer-position"
21
+ "topic-transfer-fulfil"
22
+ "topic-notification-event"
23
+ "topic-transfer-get"
24
+ "topic-admin-transfer"
25
+ "topic-bulk-prepare"
26
+ "topic-bulk-fulfil"
27
+ "topic-bulk-processing"
28
+ "topic-bulk-get"
29
+ )
30
+
31
+ # Loop through the topics and create them using kafka-topics.sh
32
+ for topic in "${topics[@]}"
33
+ do
34
+ echo -e "--> Creating topic $topic..."
35
+ kafka-topics.sh --bootstrap-server $KAFKAHOST:$KAFKAPORT --create --if-not-exists --topic "$topic" --replication-factor 1 --partitions 1
36
+ done
37
+
38
+ echo -e ""
39
+ echo -e "------------------------------------------"
40
+ echo -e "Successfully created the following topics:"
41
+ echo -e "__________________________________________"
42
+ kafka-topics.sh --bootstrap-server $KAFKAHOST:$KAFKAPORT --list
@@ -0,0 +1,2 @@
1
+ ALTER USER 'central_ledger'@'%' identified WITH mysql_native_password by 'password';
2
+ FLUSH PRIVILEGES;
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+
3
+ echo "** STARTUP - Checking for Bulk-API-Adapter..."
4
+
5
+ source /opt/wait-for/wait-for.env
6
+
7
+ sh /opt/wait-for/wait-for-kafka.sh
8
+
9
+ sh /opt/wait-for/wait-for-objstore.sh
10
+
11
+ echo "** STARTUP - Bulk-API-Adapter successful!"
@@ -0,0 +1,13 @@
1
+ #!/bin/sh
2
+
3
+ echo "** STARTUP - Checking for Central-Ledger..."
4
+
5
+ source /opt/wait-for/wait-for.env
6
+
7
+ sh /opt/wait-for/wait-for-mysql.sh
8
+
9
+ sh /opt/wait-for/wait-for-kafka.sh
10
+
11
+ sh /opt/wait-for/wait-for-objstore.sh
12
+
13
+ echo "** STARTUP - Central-Ledger successful!"
@@ -0,0 +1,7 @@
1
+ #!/bin/sh
2
+
3
+ echo "** STARTUP - Checking for Broker connection..."
4
+
5
+ source /opt/wait-for/wait-for.env
6
+
7
+ sh /opt/wait-for/wait-for.sh $WAIT_FOR_DB_KAFKA_BROKER -t 240 -- echo "** STARTUP - Kafka connection successful!"