@checkdigit/eslint-athena-plugin 1.0.0-PR.2-dcdf

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 (66) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +17 -0
  3. package/SECURITY.md +13 -0
  4. package/dist-mjs/athena/api-locator.mjs +66 -0
  5. package/dist-mjs/athena/api-matcher.mjs +206 -0
  6. package/dist-mjs/athena/athena.mjs +165 -0
  7. package/dist-mjs/athena/column.mjs +1 -0
  8. package/dist-mjs/athena/context.mjs +21 -0
  9. package/dist-mjs/athena/index.mjs +1 -0
  10. package/dist-mjs/athena/service-table.mjs +45 -0
  11. package/dist-mjs/athena/sql-file.mjs +123 -0
  12. package/dist-mjs/athena/types.mjs +1 -0
  13. package/dist-mjs/athena/validate.mjs +619 -0
  14. package/dist-mjs/athena/visitor.mjs +291 -0
  15. package/dist-mjs/get-documentation-url.mjs +9 -0
  16. package/dist-mjs/index.mjs +56 -0
  17. package/dist-mjs/openapi/deref-schema.mjs +20 -0
  18. package/dist-mjs/openapi/generate-schema.mjs +375 -0
  19. package/dist-mjs/openapi/service-schema-generator.mjs +176 -0
  20. package/dist-mjs/peggy/athena-peggy.mjs +20700 -0
  21. package/dist-mjs/service.mjs +9 -0
  22. package/dist-mjs/sql-parser.mjs +28 -0
  23. package/dist-types/athena/api-locator.d.ts +2 -0
  24. package/dist-types/athena/api-matcher.d.ts +14 -0
  25. package/dist-types/athena/athena.d.ts +5 -0
  26. package/dist-types/athena/column.d.ts +1 -0
  27. package/dist-types/athena/context.d.ts +21 -0
  28. package/dist-types/athena/index.d.ts +8 -0
  29. package/dist-types/athena/service-table.d.ts +8 -0
  30. package/dist-types/athena/sql-file.d.ts +5 -0
  31. package/dist-types/athena/types.d.ts +493 -0
  32. package/dist-types/athena/validate.d.ts +14 -0
  33. package/dist-types/athena/visitor.d.ts +75 -0
  34. package/dist-types/get-documentation-url.d.ts +1 -0
  35. package/dist-types/index.d.ts +5 -0
  36. package/dist-types/openapi/deref-schema.d.ts +1 -0
  37. package/dist-types/openapi/generate-schema.d.ts +33 -0
  38. package/dist-types/openapi/service-schema-generator.d.ts +5 -0
  39. package/dist-types/peggy/athena-peggy.d.ts +13 -0
  40. package/dist-types/service.d.ts +2 -0
  41. package/dist-types/sql-parser.d.ts +25 -0
  42. package/package.json +1 -0
  43. package/src/api/v1/swagger.yml +619 -0
  44. package/src/api/v2/swagger.yml +477 -0
  45. package/src/athena/api-locator.ts +78 -0
  46. package/src/athena/api-matcher.ts +323 -0
  47. package/src/athena/athena.ts +224 -0
  48. package/src/athena/column.ts +4 -0
  49. package/src/athena/context.ts +47 -0
  50. package/src/athena/index.ts +13 -0
  51. package/src/athena/service-table.ts +78 -0
  52. package/src/athena/sql-file.ts +161 -0
  53. package/src/athena/types.ts +568 -0
  54. package/src/athena/validate.ts +902 -0
  55. package/src/athena/visitor.ts +406 -0
  56. package/src/get-documentation-url.ts +7 -0
  57. package/src/index.ts +67 -0
  58. package/src/openapi/deref-schema.ts +20 -0
  59. package/src/openapi/generate-schema.ts +553 -0
  60. package/src/openapi/service-schema-generator.ts +241 -0
  61. package/src/peggy/athena-peggy.ts +22149 -0
  62. package/src/peggy/athena.peggy +2971 -0
  63. package/src/service.ts +11 -0
  64. package/src/services/eslintAthenaPlugin/v1/swagger.schema.deref.json +1931 -0
  65. package/src/services/eslintAthenaPlugin/v2/swagger.schema.deref.json +978 -0
  66. package/src/sql-parser.ts +53 -0
@@ -0,0 +1,978 @@
1
+ {
2
+ "apis": {
3
+ "/eslint-athena-plugin/v2/ping": {
4
+ "get": {
5
+ "request": {
6
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
7
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/PingGetRequestContext",
8
+ "type": "object",
9
+ "properties": {
10
+ "headers": {
11
+ "type": "object",
12
+ "additionalProperties": true
13
+ }
14
+ },
15
+ "required": [],
16
+ "additionalProperties": false
17
+ },
18
+ "responses": {
19
+ "200": {
20
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
21
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/PingGetResponseOK",
22
+ "type": "object",
23
+ "properties": {
24
+ "headers": {
25
+ "type": "object",
26
+ "additionalProperties": true
27
+ },
28
+ "body": {
29
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
30
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Ping",
31
+ "type": "object",
32
+ "additionalProperties": false,
33
+ "required": [
34
+ "serverTime",
35
+ "v2Only"
36
+ ],
37
+ "properties": {
38
+ "serverTime": {
39
+ "type": "string",
40
+ "format": "date-time",
41
+ "description": "Current server time."
42
+ },
43
+ "v2Only": {
44
+ "type": "boolean",
45
+ "description": "Indicates if the server is running in v2-only mode."
46
+ }
47
+ }
48
+ }
49
+ },
50
+ "required": [
51
+ "body"
52
+ ],
53
+ "additionalProperties": false
54
+ },
55
+ "default": {
56
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
57
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/PingGetResponseDefault",
58
+ "type": "object",
59
+ "properties": {
60
+ "headers": {
61
+ "type": "object",
62
+ "additionalProperties": true
63
+ },
64
+ "body": {
65
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
66
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Error",
67
+ "type": "object",
68
+ "additionalProperties": false,
69
+ "description": "Error message.",
70
+ "required": [
71
+ "message",
72
+ "code"
73
+ ],
74
+ "properties": {
75
+ "message": {
76
+ "type": "string"
77
+ },
78
+ "code": {
79
+ "type": "string",
80
+ "enum": [
81
+ "INVALID AT",
82
+ "INVALID FROM"
83
+ ]
84
+ }
85
+ }
86
+ }
87
+ },
88
+ "required": [
89
+ "body"
90
+ ],
91
+ "additionalProperties": false
92
+ }
93
+ }
94
+ }
95
+ },
96
+ "/eslint-athena-plugin/v2/tenant/:tenantId/entry/:entryId": {
97
+ "put": {
98
+ "request": {
99
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
100
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/TenantEntryPutRequestContext",
101
+ "type": "object",
102
+ "properties": {
103
+ "params": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "properties": {
107
+ "tenantId": {
108
+ "type": "string"
109
+ },
110
+ "entryId": {
111
+ "type": "string"
112
+ }
113
+ },
114
+ "required": [
115
+ "tenantId",
116
+ "entryId"
117
+ ]
118
+ },
119
+ "headers": {
120
+ "type": "object",
121
+ "additionalProperties": true,
122
+ "properties": {
123
+ "if-match": {
124
+ "type": "string"
125
+ },
126
+ "created-on": {
127
+ "type": "string",
128
+ "format": "date-time"
129
+ }
130
+ },
131
+ "required": [
132
+ "created-on"
133
+ ]
134
+ },
135
+ "body": {
136
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
137
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewEntry",
138
+ "type": "object",
139
+ "additionalProperties": false,
140
+ "required": [
141
+ "postings"
142
+ ],
143
+ "properties": {
144
+ "postings": {
145
+ "type": "array",
146
+ "description": "List of posts contained within the journal entry.",
147
+ "items": {
148
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
149
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Post",
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": [
153
+ "amount",
154
+ "currency",
155
+ "type",
156
+ "createdOn",
157
+ "accountId"
158
+ ],
159
+ "properties": {
160
+ "amount": {
161
+ "type": "string"
162
+ },
163
+ "currency": {
164
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
165
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
166
+ "type": "string",
167
+ "enum": [
168
+ "AED",
169
+ "AFN"
170
+ ]
171
+ },
172
+ "type": {
173
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
174
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
175
+ "type": "string",
176
+ "description": "CREDIT or DEBIT",
177
+ "enum": [
178
+ "CREDIT",
179
+ "DEBIT"
180
+ ]
181
+ },
182
+ "createdOn": {
183
+ "type": "string",
184
+ "format": "date-time"
185
+ },
186
+ "accountId": {
187
+ "type": "string",
188
+ "description": "account ID"
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
195
+ },
196
+ "required": [
197
+ "params",
198
+ "headers",
199
+ "body"
200
+ ],
201
+ "additionalProperties": false
202
+ },
203
+ "responses": {
204
+ "204": {
205
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
206
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/TenantEntryPutResponseNoContent",
207
+ "type": "object",
208
+ "properties": {
209
+ "headers": {
210
+ "type": "object",
211
+ "properties": {
212
+ "created-on": {
213
+ "type": "string",
214
+ "format": "date-time"
215
+ },
216
+ "updated-on": {
217
+ "type": "string",
218
+ "format": "date-time"
219
+ }
220
+ },
221
+ "required": [
222
+ "created-on",
223
+ "updated-on"
224
+ ]
225
+ }
226
+ },
227
+ "required": [
228
+ "headers"
229
+ ],
230
+ "additionalProperties": false
231
+ },
232
+ "409": {
233
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
234
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/TenantEntryPutResponseConflict",
235
+ "type": "object",
236
+ "properties": {
237
+ "headers": {
238
+ "type": "object",
239
+ "additionalProperties": true
240
+ }
241
+ },
242
+ "required": [],
243
+ "additionalProperties": false
244
+ },
245
+ "412": {
246
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
247
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/TenantEntryPutResponsePreconditionFailed",
248
+ "type": "object",
249
+ "properties": {
250
+ "headers": {
251
+ "type": "object",
252
+ "additionalProperties": true
253
+ }
254
+ },
255
+ "required": [],
256
+ "additionalProperties": false
257
+ },
258
+ "default": {
259
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
260
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/TenantEntryPutResponseDefault",
261
+ "type": "object",
262
+ "properties": {
263
+ "headers": {
264
+ "type": "object",
265
+ "additionalProperties": true
266
+ },
267
+ "body": {
268
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
269
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Error",
270
+ "type": "object",
271
+ "additionalProperties": false,
272
+ "description": "Error message.",
273
+ "required": [
274
+ "message",
275
+ "code"
276
+ ],
277
+ "properties": {
278
+ "message": {
279
+ "type": "string"
280
+ },
281
+ "code": {
282
+ "type": "string",
283
+ "enum": [
284
+ "INVALID AT",
285
+ "INVALID FROM"
286
+ ]
287
+ }
288
+ }
289
+ }
290
+ },
291
+ "required": [
292
+ "body"
293
+ ],
294
+ "additionalProperties": false
295
+ }
296
+ }
297
+ }
298
+ },
299
+ "/eslint-athena-plugin/v2/tenant/:tenantId/card/:cardId": {
300
+ "put": {
301
+ "request": {
302
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
303
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/CardPutRequestContext",
304
+ "type": "object",
305
+ "properties": {
306
+ "params": {
307
+ "type": "object",
308
+ "additionalProperties": false,
309
+ "properties": {
310
+ "tenantId": {
311
+ "type": "string"
312
+ },
313
+ "cardId": {
314
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
315
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/CardId",
316
+ "type": "string",
317
+ "description": "Card identifier",
318
+ "format": "uuid"
319
+ }
320
+ },
321
+ "required": [
322
+ "tenantId",
323
+ "cardId"
324
+ ]
325
+ },
326
+ "headers": {
327
+ "type": "object",
328
+ "additionalProperties": true,
329
+ "properties": {
330
+ "created-on": {
331
+ "type": "string",
332
+ "format": "date-time"
333
+ }
334
+ },
335
+ "required": [
336
+ "created-on"
337
+ ]
338
+ },
339
+ "body": {
340
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
341
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewCardRequest",
342
+ "type": "object",
343
+ "required": [
344
+ "dataEncryptionKeyId",
345
+ "cardNumberLength",
346
+ "newCard"
347
+ ],
348
+ "additionalProperties": false,
349
+ "properties": {
350
+ "dataEncryptionKeyId": {
351
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
352
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/DataEncryptionKeyId",
353
+ "type": "string",
354
+ "description": "Reference to encryption keys Payment Card Service will use to encrypt the Card object.\n",
355
+ "format": "uuid"
356
+ },
357
+ "cardNumberLength": {
358
+ "type": "integer",
359
+ "description": "Desired number of digits in the card number.",
360
+ "minimum": 15,
361
+ "maximum": 19
362
+ },
363
+ "newCard": {
364
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
365
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewCard",
366
+ "type": "object",
367
+ "additionalProperties": false,
368
+ "required": [
369
+ "serviceCode",
370
+ "sequenceNumber"
371
+ ],
372
+ "properties": {
373
+ "serviceCode": {
374
+ "type": "string",
375
+ "pattern": "^\\d+$",
376
+ "description": "Used to set general guidelines for how the card can be used, e.g. domestic only or international, online authorizations only, etc.\n",
377
+ "minLength": 3,
378
+ "maxLength": 3
379
+ },
380
+ "sequenceNumber": {
381
+ "type": "integer",
382
+ "description": "Used to differentiate issuing the same card and expiration date on multiple plastics.",
383
+ "minimum": 0,
384
+ "maximum": 10
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+ },
391
+ "required": [
392
+ "params",
393
+ "headers",
394
+ "body"
395
+ ],
396
+ "additionalProperties": false
397
+ },
398
+ "responses": {
399
+ "200": {
400
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
401
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/CardPutResponseOK",
402
+ "type": "object",
403
+ "properties": {
404
+ "headers": {
405
+ "type": "object",
406
+ "properties": {
407
+ "last-modified": {
408
+ "type": "string",
409
+ "format": "date-time"
410
+ },
411
+ "created-on": {
412
+ "type": "string",
413
+ "format": "date-time"
414
+ },
415
+ "updated-on": {
416
+ "type": "string",
417
+ "format": "date-time"
418
+ },
419
+ "etag": {
420
+ "type": "string"
421
+ }
422
+ },
423
+ "required": [
424
+ "last-modified",
425
+ "created-on",
426
+ "updated-on",
427
+ "etag"
428
+ ]
429
+ },
430
+ "body": {
431
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
432
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/CardResponse",
433
+ "type": "object",
434
+ "additionalProperties": false,
435
+ "required": [
436
+ "dataEncryptionKeyId",
437
+ "storageKeyId",
438
+ "card"
439
+ ],
440
+ "properties": {
441
+ "encryptedDataEncryptionKey": {
442
+ "description": "Encrypted DEK matching the publicKeyHash sent in the request. Used to decrypt values in the Card object.\n",
443
+ "type": "string"
444
+ },
445
+ "card": {
446
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
447
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Card",
448
+ "type": "object",
449
+ "additionalProperties": false,
450
+ "required": [
451
+ "last4",
452
+ "cardNumber"
453
+ ],
454
+ "properties": {
455
+ "last4": {
456
+ "type": "string",
457
+ "pattern": "^\\d+$",
458
+ "description": "Last four digits of the card number",
459
+ "minLength": 4,
460
+ "maxLength": 4
461
+ },
462
+ "cardNumber": {
463
+ "type": "string",
464
+ "description": "Encrypted card number (PAN)"
465
+ }
466
+ }
467
+ }
468
+ }
469
+ }
470
+ },
471
+ "required": [
472
+ "headers",
473
+ "body"
474
+ ],
475
+ "additionalProperties": false
476
+ },
477
+ "409": {
478
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
479
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/CardPutResponseConflict",
480
+ "type": "object",
481
+ "properties": {
482
+ "headers": {
483
+ "type": "object",
484
+ "additionalProperties": true
485
+ }
486
+ },
487
+ "required": [],
488
+ "additionalProperties": false
489
+ },
490
+ "default": {
491
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
492
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/api/CardPutResponseDefault",
493
+ "type": "object",
494
+ "properties": {
495
+ "headers": {
496
+ "type": "object",
497
+ "additionalProperties": true
498
+ },
499
+ "body": {
500
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
501
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Error",
502
+ "type": "object",
503
+ "additionalProperties": false,
504
+ "description": "Error message.",
505
+ "required": [
506
+ "message",
507
+ "code"
508
+ ],
509
+ "properties": {
510
+ "message": {
511
+ "type": "string"
512
+ },
513
+ "code": {
514
+ "type": "string",
515
+ "enum": [
516
+ "INVALID AT",
517
+ "INVALID FROM"
518
+ ]
519
+ }
520
+ }
521
+ }
522
+ },
523
+ "required": [
524
+ "body"
525
+ ],
526
+ "additionalProperties": false
527
+ }
528
+ }
529
+ }
530
+ }
531
+ },
532
+ "definitions": {
533
+ "Ping": {
534
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
535
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Ping",
536
+ "type": "object",
537
+ "additionalProperties": false,
538
+ "required": [
539
+ "serverTime",
540
+ "v2Only"
541
+ ],
542
+ "properties": {
543
+ "serverTime": {
544
+ "type": "string",
545
+ "format": "date-time",
546
+ "description": "Current server time."
547
+ },
548
+ "v2Only": {
549
+ "type": "boolean",
550
+ "description": "Indicates if the server is running in v2-only mode."
551
+ }
552
+ }
553
+ },
554
+ "Error": {
555
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
556
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Error",
557
+ "type": "object",
558
+ "additionalProperties": false,
559
+ "description": "Error message.",
560
+ "required": [
561
+ "message",
562
+ "code"
563
+ ],
564
+ "properties": {
565
+ "message": {
566
+ "type": "string"
567
+ },
568
+ "code": {
569
+ "type": "string",
570
+ "enum": [
571
+ "INVALID AT",
572
+ "INVALID FROM"
573
+ ]
574
+ }
575
+ }
576
+ },
577
+ "Currency": {
578
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
579
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
580
+ "type": "string",
581
+ "enum": [
582
+ "AED",
583
+ "AFN"
584
+ ]
585
+ },
586
+ "ResponseEntry": {
587
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
588
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/ResponseEntry",
589
+ "type": "object",
590
+ "additionalProperties": false,
591
+ "required": [
592
+ "entryId",
593
+ "createdOn",
594
+ "postings"
595
+ ],
596
+ "properties": {
597
+ "entryId": {
598
+ "type": "string",
599
+ "description": "Journal entry ID"
600
+ },
601
+ "createdOn": {
602
+ "type": "string",
603
+ "format": "date-time",
604
+ "description": "Journal entry creation date/time"
605
+ },
606
+ "postings": {
607
+ "type": "array",
608
+ "items": {
609
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
610
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/ResponsePost",
611
+ "type": "object",
612
+ "additionalProperties": false,
613
+ "required": [
614
+ "amount",
615
+ "currency",
616
+ "type",
617
+ "accountId",
618
+ "createdOn"
619
+ ],
620
+ "properties": {
621
+ "amount": {
622
+ "type": "string"
623
+ },
624
+ "currency": {
625
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
626
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
627
+ "type": "string",
628
+ "enum": [
629
+ "AED",
630
+ "AFN"
631
+ ]
632
+ },
633
+ "type": {
634
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
635
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
636
+ "type": "string",
637
+ "description": "CREDIT or DEBIT",
638
+ "enum": [
639
+ "CREDIT",
640
+ "DEBIT"
641
+ ]
642
+ },
643
+ "createdOn": {
644
+ "type": "string",
645
+ "format": "date-time"
646
+ },
647
+ "accountId": {
648
+ "type": "string",
649
+ "description": "account ID"
650
+ }
651
+ }
652
+ }
653
+ }
654
+ }
655
+ },
656
+ "NewEntry": {
657
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
658
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewEntry",
659
+ "type": "object",
660
+ "additionalProperties": false,
661
+ "required": [
662
+ "postings"
663
+ ],
664
+ "properties": {
665
+ "postings": {
666
+ "type": "array",
667
+ "description": "List of posts contained within the journal entry.",
668
+ "items": {
669
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
670
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Post",
671
+ "type": "object",
672
+ "additionalProperties": false,
673
+ "required": [
674
+ "amount",
675
+ "currency",
676
+ "type",
677
+ "createdOn",
678
+ "accountId"
679
+ ],
680
+ "properties": {
681
+ "amount": {
682
+ "type": "string"
683
+ },
684
+ "currency": {
685
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
686
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
687
+ "type": "string",
688
+ "enum": [
689
+ "AED",
690
+ "AFN"
691
+ ]
692
+ },
693
+ "type": {
694
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
695
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
696
+ "type": "string",
697
+ "description": "CREDIT or DEBIT",
698
+ "enum": [
699
+ "CREDIT",
700
+ "DEBIT"
701
+ ]
702
+ },
703
+ "createdOn": {
704
+ "type": "string",
705
+ "format": "date-time"
706
+ },
707
+ "accountId": {
708
+ "type": "string",
709
+ "description": "account ID"
710
+ }
711
+ }
712
+ }
713
+ }
714
+ }
715
+ },
716
+ "Post": {
717
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
718
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Post",
719
+ "type": "object",
720
+ "additionalProperties": false,
721
+ "required": [
722
+ "amount",
723
+ "currency",
724
+ "type",
725
+ "createdOn",
726
+ "accountId"
727
+ ],
728
+ "properties": {
729
+ "amount": {
730
+ "type": "string"
731
+ },
732
+ "currency": {
733
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
734
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
735
+ "type": "string",
736
+ "enum": [
737
+ "AED",
738
+ "AFN"
739
+ ]
740
+ },
741
+ "type": {
742
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
743
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
744
+ "type": "string",
745
+ "description": "CREDIT or DEBIT",
746
+ "enum": [
747
+ "CREDIT",
748
+ "DEBIT"
749
+ ]
750
+ },
751
+ "createdOn": {
752
+ "type": "string",
753
+ "format": "date-time"
754
+ },
755
+ "accountId": {
756
+ "type": "string",
757
+ "description": "account ID"
758
+ }
759
+ }
760
+ },
761
+ "ResponsePost": {
762
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
763
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/ResponsePost",
764
+ "type": "object",
765
+ "additionalProperties": false,
766
+ "required": [
767
+ "amount",
768
+ "currency",
769
+ "type",
770
+ "accountId",
771
+ "createdOn"
772
+ ],
773
+ "properties": {
774
+ "amount": {
775
+ "type": "string"
776
+ },
777
+ "currency": {
778
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
779
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Currency",
780
+ "type": "string",
781
+ "enum": [
782
+ "AED",
783
+ "AFN"
784
+ ]
785
+ },
786
+ "type": {
787
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
788
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
789
+ "type": "string",
790
+ "description": "CREDIT or DEBIT",
791
+ "enum": [
792
+ "CREDIT",
793
+ "DEBIT"
794
+ ]
795
+ },
796
+ "createdOn": {
797
+ "type": "string",
798
+ "format": "date-time"
799
+ },
800
+ "accountId": {
801
+ "type": "string",
802
+ "description": "account ID"
803
+ }
804
+ }
805
+ },
806
+ "Type": {
807
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
808
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Type",
809
+ "type": "string",
810
+ "description": "CREDIT or DEBIT",
811
+ "enum": [
812
+ "CREDIT",
813
+ "DEBIT"
814
+ ]
815
+ },
816
+ "CardId": {
817
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
818
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/CardId",
819
+ "type": "string",
820
+ "description": "Card identifier",
821
+ "format": "uuid"
822
+ },
823
+ "Hash": {
824
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
825
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Hash",
826
+ "type": "string",
827
+ "format": "uuid",
828
+ "example": "15a85f64-5717-4562-b3fc-2c963f66afa6",
829
+ "description": "UUID derived using @checkdigit/hash"
830
+ },
831
+ "CardResponse": {
832
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
833
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/CardResponse",
834
+ "type": "object",
835
+ "additionalProperties": false,
836
+ "required": [
837
+ "dataEncryptionKeyId",
838
+ "storageKeyId",
839
+ "card"
840
+ ],
841
+ "properties": {
842
+ "encryptedDataEncryptionKey": {
843
+ "description": "Encrypted DEK matching the publicKeyHash sent in the request. Used to decrypt values in the Card object.\n",
844
+ "type": "string"
845
+ },
846
+ "card": {
847
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
848
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Card",
849
+ "type": "object",
850
+ "additionalProperties": false,
851
+ "required": [
852
+ "last4",
853
+ "cardNumber"
854
+ ],
855
+ "properties": {
856
+ "last4": {
857
+ "type": "string",
858
+ "pattern": "^\\d+$",
859
+ "description": "Last four digits of the card number",
860
+ "minLength": 4,
861
+ "maxLength": 4
862
+ },
863
+ "cardNumber": {
864
+ "type": "string",
865
+ "description": "Encrypted card number (PAN)"
866
+ }
867
+ }
868
+ }
869
+ }
870
+ },
871
+ "Card": {
872
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
873
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/Card",
874
+ "type": "object",
875
+ "additionalProperties": false,
876
+ "required": [
877
+ "last4",
878
+ "cardNumber"
879
+ ],
880
+ "properties": {
881
+ "last4": {
882
+ "type": "string",
883
+ "pattern": "^\\d+$",
884
+ "description": "Last four digits of the card number",
885
+ "minLength": 4,
886
+ "maxLength": 4
887
+ },
888
+ "cardNumber": {
889
+ "type": "string",
890
+ "description": "Encrypted card number (PAN)"
891
+ }
892
+ }
893
+ },
894
+ "NewCardRequest": {
895
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
896
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewCardRequest",
897
+ "type": "object",
898
+ "required": [
899
+ "dataEncryptionKeyId",
900
+ "cardNumberLength",
901
+ "newCard"
902
+ ],
903
+ "additionalProperties": false,
904
+ "properties": {
905
+ "dataEncryptionKeyId": {
906
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
907
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/DataEncryptionKeyId",
908
+ "type": "string",
909
+ "description": "Reference to encryption keys Payment Card Service will use to encrypt the Card object.\n",
910
+ "format": "uuid"
911
+ },
912
+ "cardNumberLength": {
913
+ "type": "integer",
914
+ "description": "Desired number of digits in the card number.",
915
+ "minimum": 15,
916
+ "maximum": 19
917
+ },
918
+ "newCard": {
919
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
920
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewCard",
921
+ "type": "object",
922
+ "additionalProperties": false,
923
+ "required": [
924
+ "serviceCode",
925
+ "sequenceNumber"
926
+ ],
927
+ "properties": {
928
+ "serviceCode": {
929
+ "type": "string",
930
+ "pattern": "^\\d+$",
931
+ "description": "Used to set general guidelines for how the card can be used, e.g. domestic only or international, online authorizations only, etc.\n",
932
+ "minLength": 3,
933
+ "maxLength": 3
934
+ },
935
+ "sequenceNumber": {
936
+ "type": "integer",
937
+ "description": "Used to differentiate issuing the same card and expiration date on multiple plastics.",
938
+ "minimum": 0,
939
+ "maximum": 10
940
+ }
941
+ }
942
+ }
943
+ }
944
+ },
945
+ "DataEncryptionKeyId": {
946
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
947
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/DataEncryptionKeyId",
948
+ "type": "string",
949
+ "description": "Reference to encryption keys Payment Card Service will use to encrypt the Card object.\n",
950
+ "format": "uuid"
951
+ },
952
+ "NewCard": {
953
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
954
+ "$id": "https://eslint-athena-plugin.checkdigit/eslint-athena-plugin/v2/schemas/definitions/NewCard",
955
+ "type": "object",
956
+ "additionalProperties": false,
957
+ "required": [
958
+ "serviceCode",
959
+ "sequenceNumber"
960
+ ],
961
+ "properties": {
962
+ "serviceCode": {
963
+ "type": "string",
964
+ "pattern": "^\\d+$",
965
+ "description": "Used to set general guidelines for how the card can be used, e.g. domestic only or international, online authorizations only, etc.\n",
966
+ "minLength": 3,
967
+ "maxLength": 3
968
+ },
969
+ "sequenceNumber": {
970
+ "type": "integer",
971
+ "description": "Used to differentiate issuing the same card and expiration date on multiple plastics.",
972
+ "minimum": 0,
973
+ "maximum": 10
974
+ }
975
+ }
976
+ }
977
+ }
978
+ }