@abyss-project/tools 1.0.1 → 1.0.5

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 (35) hide show
  1. package/dist/api/abyss.admin.api.d.ts +0 -3
  2. package/dist/api/abyss.admin.api.js +1 -13
  3. package/dist/api/abyss.admin.api.js.map +1 -1
  4. package/dist/api/index.d.ts +1 -0
  5. package/dist/api/index.js +1 -0
  6. package/dist/api/index.js.map +1 -1
  7. package/dist/api/monitor.api.d.ts +2 -0
  8. package/dist/api/monitor.api.js +9 -0
  9. package/dist/api/monitor.api.js.map +1 -0
  10. package/dist/index.d.ts +4 -3
  11. package/dist/index.js +4 -3
  12. package/dist/index.js.map +1 -1
  13. package/dist/types/interface/api/responses/index.d.ts +1 -0
  14. package/dist/types/interface/api/responses/index.js +1 -0
  15. package/dist/types/interface/api/responses/index.js.map +1 -1
  16. package/dist/types/interface/api/responses/monitor.response.d.ts +7 -0
  17. package/dist/types/interface/api/responses/monitor.response.js +3 -0
  18. package/dist/types/interface/api/responses/monitor.response.js.map +1 -0
  19. package/dist/types/interface/api/responses/recent.response.d.ts +1 -0
  20. package/package.json +52 -57
  21. package/src/api/abyss.admin.api.ts +0 -18
  22. package/src/api/index.ts +3 -1
  23. package/src/api/monitor.api.ts +6 -0
  24. package/src/api/rcb.api.ts +829 -829
  25. package/src/index.ts +7 -6
  26. package/src/types/enum/pdf-operation.enum.ts +98 -98
  27. package/src/types/enum/rcb-bank.enum.ts +137 -137
  28. package/src/types/interface/api/requests/rcb.request.ts +267 -267
  29. package/src/types/interface/api/responses/index.ts +1 -0
  30. package/src/types/interface/api/responses/monitor.response.ts +8 -0
  31. package/src/types/interface/api/responses/rcb.response.ts +399 -399
  32. package/src/types/interface/api/responses/recent.response.ts +2 -0
  33. package/src/types/interface/models/rcb.dto.ts +267 -267
  34. package/src/utils/rcb-webhook.utils.ts +30 -30
  35. package/src/api/atlas-page-content.api.ts +0 -0
@@ -1,399 +1,399 @@
1
- // ──────────────────────────────────────────────
2
- // RCB API responses.
3
- // ──────────────────────────────────────────────
4
-
5
- import { IResponse } from '../type-message/response';
6
- import {
7
- IRcbBankVersion,
8
- IRcbExtraction,
9
- IRcbExtractionMetadata,
10
- IRcbFeedback,
11
- IRcbFile,
12
- IRcbQuota,
13
- IRcbTemplate,
14
- IRcbTemplateVersion,
15
- IRcbTransaction,
16
- IRcbWebhookDelivery,
17
- RcbExtractionMode,
18
- } from '../../models/rcb.dto';
19
-
20
- // ─── EXTRACT ─────────────────────────────────
21
-
22
- export interface IExtractSyncRcbData {
23
- extraction_id: string;
24
- file_id: string;
25
- application_file_id: string | null;
26
- cached: boolean;
27
- records: IRcbTransaction[];
28
- metadata: IRcbExtractionMetadata;
29
- extraction: {
30
- mode: RcbExtractionMode;
31
- strategy_used: string | null;
32
- confidence: number | null;
33
- detected_bank: string | null;
34
- detected_version: string | null;
35
- balance_validated: boolean | null;
36
- duration_ms: number | null;
37
- warnings: string[];
38
- alternatives: unknown[];
39
- };
40
- }
41
- export type IExtractSyncRcbResponse = IResponse<IExtractSyncRcbData>;
42
-
43
- export interface IExtractQueueRcbData {
44
- job_id: string;
45
- status: string;
46
- queued_at: string;
47
- poll_url: string;
48
- }
49
- export type IExtractQueueRcbResponse = IResponse<IExtractQueueRcbData>;
50
-
51
- export interface IExtractBulkRcbData {
52
- accepted: number;
53
- rejected: number;
54
- jobs: Array<{ index: number; job_id: string }>;
55
- errors: Array<{ index: number; error: string }>;
56
- }
57
- export type IExtractBulkRcbResponse = IResponse<IExtractBulkRcbData>;
58
-
59
- // ─── DETECT ──────────────────────────────────
60
-
61
- export interface IDetectRcbData {
62
- pdfHash: string;
63
- pageCount: number;
64
- metadata: {
65
- ibans: Array<{ iban: string; bankCode: string; countryCode: string }>;
66
- bics: Array<{ bic: string; bankCode: string }>;
67
- };
68
- candidates: Array<{
69
- id: string;
70
- bankName: string;
71
- version: string;
72
- score: number;
73
- matchedSignals: string[];
74
- }>;
75
- durationMs: number;
76
- }
77
- export type IDetectRcbResponse = IResponse<IDetectRcbData>;
78
-
79
- export interface IDetectBulkRcbData {
80
- count: number;
81
- results: Array<{ index: number; result?: IDetectRcbData; error?: string }>;
82
- }
83
- export type IDetectBulkRcbResponse = IResponse<IDetectBulkRcbData>;
84
-
85
- // ─── FILES / EXTRACTIONS ─────────────────────
86
-
87
- export interface IListFilesRcbData {
88
- data: IRcbFile[];
89
- total?: number;
90
- }
91
- export type IListFilesRcbResponse = IListFilesRcbData;
92
-
93
- export type IGetFileRcbResponse = IResponse<IRcbFile>;
94
-
95
- export interface IListFileExtractionsRcbData {
96
- data: IRcbExtraction[];
97
- total?: number;
98
- }
99
- export type IListFileExtractionsRcbResponse = IListFileExtractionsRcbData;
100
-
101
- export type IGetExtractionRcbResponse = IResponse<IRcbExtraction>;
102
-
103
- export interface ISearchExtractionRecordsRcbResponse {
104
- data: IRcbTransaction[];
105
- matched: number;
106
- total: number;
107
- }
108
-
109
- export interface IDiffExtractionsRcbData {
110
- left: { id: string; mode: RcbExtractionMode; recordsCount: number | null };
111
- right: { id: string; mode: RcbExtractionMode; recordsCount: number | null };
112
- same: number;
113
- added: IRcbTransaction[];
114
- removed: IRcbTransaction[];
115
- changed: Array<{ before: IRcbTransaction; after: IRcbTransaction; fields: string[] }>;
116
- summary: { leftCount: number; rightCount: number; sumDeltaCents: number };
117
- }
118
- export type IDiffExtractionsRcbResponse = IResponse<IDiffExtractionsRcbData>;
119
-
120
- export interface IAsyncExportRcbData {
121
- job_id: string;
122
- status: string;
123
- poll_url: string;
124
- }
125
- export type IAsyncExportRcbResponse = IResponse<IAsyncExportRcbData>;
126
-
127
- export interface IGetExportJobRcbData {
128
- id: string;
129
- status: string;
130
- progress: number | object | string | boolean;
131
- result: {
132
- applicationFileId: string;
133
- filename: string;
134
- contentType: string;
135
- byteSize: number;
136
- } | null;
137
- error: string | null;
138
- }
139
- export type IGetExportJobRcbResponse = IResponse<IGetExportJobRcbData>;
140
-
141
- // ─── TEMPLATES ───────────────────────────────
142
-
143
- export interface ITemplateAndVersionRcbData {
144
- template: IRcbTemplate;
145
- version: IRcbTemplateVersion;
146
- warnings?: string[];
147
- }
148
- export type ICreateTemplateRcbResponse = IResponse<ITemplateAndVersionRcbData>;
149
- export type IUpdateTemplateRcbResponse = IResponse<ITemplateAndVersionRcbData>;
150
-
151
- export type IListTemplatesRcbResponse = IResponse<IRcbTemplate[]>;
152
-
153
- export interface IGetTemplateRcbData {
154
- template: IRcbTemplate;
155
- latest_version: IRcbTemplateVersion | null;
156
- }
157
- export type IGetTemplateRcbResponse = IResponse<IGetTemplateRcbData>;
158
-
159
- export type IListTemplateVersionsRcbResponse = IResponse<IRcbTemplateVersion[]>;
160
-
161
- export interface IRcbTemplateCollection {
162
- $schema: 'abyss-rcb-template-collection/v1';
163
- exported_at: string;
164
- templates: Array<{
165
- name: string;
166
- description: string | null;
167
- versions: Array<{
168
- version: number;
169
- comment: string | null;
170
- template_json: Record<string, unknown>;
171
- }>;
172
- }>;
173
- }
174
-
175
- export interface IImportTemplateCollectionRcbData {
176
- imported: Array<{
177
- originalName: string;
178
- createdName: string;
179
- templateId: string;
180
- versions: number;
181
- }>;
182
- errors: Array<{ originalName: string; error: string }>;
183
- }
184
- export type IImportTemplateCollectionRcbResponse = IResponse<IImportTemplateCollectionRcbData>;
185
-
186
- // ─── JOBS ────────────────────────────────────
187
-
188
- export interface IRcbJob {
189
- id: string;
190
- status:
191
- | 'waiting'
192
- | 'active'
193
- | 'completed'
194
- | 'failed'
195
- | 'delayed'
196
- | 'paused'
197
- | 'pending'
198
- | 'stuck';
199
- progress: number | object | string | boolean;
200
- result: {
201
- extractionId: string;
202
- fileId: string;
203
- cached: boolean;
204
- recordsCount: number;
205
- strategyUsed: string | null;
206
- } | null;
207
- error: string | null;
208
- createdAt: number;
209
- processedOn: number | null;
210
- finishedOn: number | null;
211
- attemptsMade: number;
212
- }
213
- export type IGetJobRcbResponse = IResponse<IRcbJob>;
214
-
215
- // ─── FEEDBACK ────────────────────────────────
216
-
217
- export type ICreateFeedbackRcbResponse = IResponse<IRcbFeedback>;
218
- export interface IListFeedbackRcbResponse {
219
- data: IRcbFeedback[];
220
- total?: number;
221
- }
222
- export type IGetFeedbackRcbResponse = IResponse<IRcbFeedback>;
223
-
224
- // ─── HEALTH / STATS / QUOTA ─────────────────
225
-
226
- export interface IRcbHealth {
227
- status: 'ok' | 'degraded' | 'down';
228
- redis: 'ok' | 'down';
229
- queue: 'ok' | 'down';
230
- worker: 'ok' | 'down';
231
- isShuttingDown: boolean;
232
- rssMb: number;
233
- heapUsedMb: number;
234
- uptimeSec: number;
235
- }
236
- export type IHealthRcbResponse = IResponse<IRcbHealth>;
237
-
238
- export interface IRcbStats {
239
- waiting: number;
240
- active: number;
241
- completed: number;
242
- failed: number;
243
- delayed: number;
244
- workerConcurrency: number;
245
- isPaused: boolean;
246
- }
247
- export type IStatsRcbResponse = IResponse<IRcbStats>;
248
-
249
- export interface IRcbUsageSummary {
250
- totalEvents: number;
251
- successCount: number;
252
- failedCount: number;
253
- cachedCount: number;
254
- totalDurationMs: number;
255
- totalRecordsExtracted: number;
256
- totalBytesProcessed: number;
257
- byEventType: Record<string, number>;
258
- byBank: Record<string, number>;
259
- }
260
- export type ISummaryUsageRcbResponse = IResponse<IRcbUsageSummary>;
261
-
262
- export interface IRcbQuotaStatus {
263
- tier: string;
264
- used: { extractCalls: number; extractedRecords: number; bytesProcessed: number };
265
- caps: {
266
- monthlyExtractCap: number | null;
267
- monthlyExtractedCap: number | null;
268
- monthlyBytesCap: number | null;
269
- queueOnlyAboveCount: number | null;
270
- };
271
- allowed: boolean;
272
- force_queue: boolean;
273
- reason: string | null;
274
- }
275
- export type IGetQuotaRcbResponse = IResponse<IRcbQuotaStatus>;
276
-
277
- // ─── WEBHOOK DELIVERIES ─────────────────────
278
-
279
- export interface IListWebhookDeliveriesRcbResponse {
280
- data: IRcbWebhookDelivery[];
281
- total?: number;
282
- }
283
- export type IGetWebhookDeliveryRcbResponse = IResponse<IRcbWebhookDelivery>;
284
-
285
- // ─── SHARE (public) ──────────────────────────
286
-
287
- export interface IGetSharedExtractionRcbData {
288
- id: string;
289
- mode: RcbExtractionMode;
290
- strategy_used: string | null;
291
- confidence: number | null;
292
- records_count: number | null;
293
- balance_validated: boolean | null;
294
- records: IRcbTransaction[];
295
- metadata: IRcbExtractionMetadata;
296
- warnings: string[];
297
- share_expires_at: string | null;
298
- created_at: string;
299
- }
300
- export type IGetSharedExtractionRcbResponse = IResponse<IGetSharedExtractionRcbData>;
301
-
302
- export interface IMintShareExtractionRcbData {
303
- share_url: string;
304
- share_token: string;
305
- share_expires_at: string | null;
306
- }
307
- export type IMintShareExtractionRcbResponse = IResponse<IMintShareExtractionRcbData>;
308
-
309
- // ─── CHANGELOG ──────────────────────────────
310
-
311
- export interface IChangelogRcbData {
312
- current_version: string;
313
- entries: Array<{ version: string; date: string; highlights: string[] }>;
314
- }
315
- export type IChangelogRcbResponse = IResponse<IChangelogRcbData>;
316
-
317
- // ─── ADMIN: CATALOGUE ────────────────────────
318
-
319
- export interface IListBankVersionsAdminRcbResponse {
320
- data: IRcbBankVersion[];
321
- total?: number;
322
- }
323
- export type IGetBankVersionAdminRcbResponse = IResponse<IRcbBankVersion>;
324
- export type IUpsertBankVersionAdminRcbResponse = IResponse<IRcbBankVersion>;
325
-
326
- export interface IReloadBankVersionsAdminRcbData {
327
- loaded: number;
328
- skipped: number;
329
- total: number;
330
- }
331
- export type IReloadBankVersionsAdminRcbResponse = IResponse<IReloadBankVersionsAdminRcbData>;
332
-
333
- export type IGetQuotaAdminRcbResponse = IResponse<IRcbQuota | null>;
334
- export type IUpsertQuotaAdminRcbResponse = IResponse<IRcbQuota>;
335
-
336
- export interface IDetectorReplayAdminRcbData {
337
- scanned: number;
338
- kept: number;
339
- flipped: number;
340
- newDetections: number;
341
- skipped: number;
342
- details: unknown[];
343
- durationMs: number;
344
- }
345
- export type IDetectorReplayAdminRcbResponse = IResponse<IDetectorReplayAdminRcbData>;
346
-
347
- export interface IListRequestLogAdminRcbData {
348
- data: Array<{
349
- ts: number;
350
- method: string;
351
- path: string;
352
- status: number;
353
- durationMs: number;
354
- userId: string | null;
355
- requestId: string | null;
356
- rateLimitBucket: string | null;
357
- }>;
358
- meta: { capacity: number; used: number; oldestTs: number | null; newestTs: number | null };
359
- }
360
-
361
- // ─── METRICS ────────────────────────────────
362
-
363
- export interface IRcbPerBankMetric {
364
- bank: string;
365
- extractions: number;
366
- avgConfidence: number;
367
- avgRecords: number;
368
- balanceValidatedRate: number;
369
- avgDurationMs: number;
370
- feedbackOpen: number;
371
- }
372
- export type IPerBankMetricsAdminRcbResponse = IResponse<IRcbPerBankMetric[]>;
373
-
374
- export interface IRcbLatencyBucket {
375
- bucket: string;
376
- count: number;
377
- }
378
- export type ILatencyMetricsAdminRcbResponse = IResponse<IRcbLatencyBucket[]>;
379
-
380
- export interface IRcbOverviewMetrics {
381
- last24h: { extractions: number; failures: number; avgLatencyMs: number };
382
- last30d: { extractions: number; uniqueUsers: number };
383
- }
384
- export type IOverviewMetricsAdminRcbResponse = IResponse<IRcbOverviewMetrics>;
385
-
386
- // ─── WEBHOOK SUBSCRIPTIONS ──────────────────
387
-
388
- import type { IRcbWebhook } from '../../models/rcb.dto';
389
-
390
- export interface IPaginateRcbWebhookData {
391
- rows: IRcbWebhook[];
392
- total: number;
393
- }
394
- export type IPaginateRcbWebhookResponse = IResponse<IPaginateRcbWebhookData>;
395
- export type IGetRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
396
- export type ICreateRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
397
- export type IUpdateRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
398
- export type IDeleteRcbWebhookResponse = IResponse<{ ok: true }>;
399
- export type IResetSecretRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
1
+ // ──────────────────────────────────────────────
2
+ // RCB API responses.
3
+ // ──────────────────────────────────────────────
4
+
5
+ import { IResponse } from '../type-message/response';
6
+ import {
7
+ IRcbBankVersion,
8
+ IRcbExtraction,
9
+ IRcbExtractionMetadata,
10
+ IRcbFeedback,
11
+ IRcbFile,
12
+ IRcbQuota,
13
+ IRcbTemplate,
14
+ IRcbTemplateVersion,
15
+ IRcbTransaction,
16
+ IRcbWebhookDelivery,
17
+ RcbExtractionMode,
18
+ } from '../../models/rcb.dto';
19
+
20
+ // ─── EXTRACT ─────────────────────────────────
21
+
22
+ export interface IExtractSyncRcbData {
23
+ extraction_id: string;
24
+ file_id: string;
25
+ application_file_id: string | null;
26
+ cached: boolean;
27
+ records: IRcbTransaction[];
28
+ metadata: IRcbExtractionMetadata;
29
+ extraction: {
30
+ mode: RcbExtractionMode;
31
+ strategy_used: string | null;
32
+ confidence: number | null;
33
+ detected_bank: string | null;
34
+ detected_version: string | null;
35
+ balance_validated: boolean | null;
36
+ duration_ms: number | null;
37
+ warnings: string[];
38
+ alternatives: unknown[];
39
+ };
40
+ }
41
+ export type IExtractSyncRcbResponse = IResponse<IExtractSyncRcbData>;
42
+
43
+ export interface IExtractQueueRcbData {
44
+ job_id: string;
45
+ status: string;
46
+ queued_at: string;
47
+ poll_url: string;
48
+ }
49
+ export type IExtractQueueRcbResponse = IResponse<IExtractQueueRcbData>;
50
+
51
+ export interface IExtractBulkRcbData {
52
+ accepted: number;
53
+ rejected: number;
54
+ jobs: Array<{ index: number; job_id: string }>;
55
+ errors: Array<{ index: number; error: string }>;
56
+ }
57
+ export type IExtractBulkRcbResponse = IResponse<IExtractBulkRcbData>;
58
+
59
+ // ─── DETECT ──────────────────────────────────
60
+
61
+ export interface IDetectRcbData {
62
+ pdfHash: string;
63
+ pageCount: number;
64
+ metadata: {
65
+ ibans: Array<{ iban: string; bankCode: string; countryCode: string }>;
66
+ bics: Array<{ bic: string; bankCode: string }>;
67
+ };
68
+ candidates: Array<{
69
+ id: string;
70
+ bankName: string;
71
+ version: string;
72
+ score: number;
73
+ matchedSignals: string[];
74
+ }>;
75
+ durationMs: number;
76
+ }
77
+ export type IDetectRcbResponse = IResponse<IDetectRcbData>;
78
+
79
+ export interface IDetectBulkRcbData {
80
+ count: number;
81
+ results: Array<{ index: number; result?: IDetectRcbData; error?: string }>;
82
+ }
83
+ export type IDetectBulkRcbResponse = IResponse<IDetectBulkRcbData>;
84
+
85
+ // ─── FILES / EXTRACTIONS ─────────────────────
86
+
87
+ export interface IListFilesRcbData {
88
+ data: IRcbFile[];
89
+ total?: number;
90
+ }
91
+ export type IListFilesRcbResponse = IListFilesRcbData;
92
+
93
+ export type IGetFileRcbResponse = IResponse<IRcbFile>;
94
+
95
+ export interface IListFileExtractionsRcbData {
96
+ data: IRcbExtraction[];
97
+ total?: number;
98
+ }
99
+ export type IListFileExtractionsRcbResponse = IListFileExtractionsRcbData;
100
+
101
+ export type IGetExtractionRcbResponse = IResponse<IRcbExtraction>;
102
+
103
+ export interface ISearchExtractionRecordsRcbResponse {
104
+ data: IRcbTransaction[];
105
+ matched: number;
106
+ total: number;
107
+ }
108
+
109
+ export interface IDiffExtractionsRcbData {
110
+ left: { id: string; mode: RcbExtractionMode; recordsCount: number | null };
111
+ right: { id: string; mode: RcbExtractionMode; recordsCount: number | null };
112
+ same: number;
113
+ added: IRcbTransaction[];
114
+ removed: IRcbTransaction[];
115
+ changed: Array<{ before: IRcbTransaction; after: IRcbTransaction; fields: string[] }>;
116
+ summary: { leftCount: number; rightCount: number; sumDeltaCents: number };
117
+ }
118
+ export type IDiffExtractionsRcbResponse = IResponse<IDiffExtractionsRcbData>;
119
+
120
+ export interface IAsyncExportRcbData {
121
+ job_id: string;
122
+ status: string;
123
+ poll_url: string;
124
+ }
125
+ export type IAsyncExportRcbResponse = IResponse<IAsyncExportRcbData>;
126
+
127
+ export interface IGetExportJobRcbData {
128
+ id: string;
129
+ status: string;
130
+ progress: number | object | string | boolean;
131
+ result: {
132
+ applicationFileId: string;
133
+ filename: string;
134
+ contentType: string;
135
+ byteSize: number;
136
+ } | null;
137
+ error: string | null;
138
+ }
139
+ export type IGetExportJobRcbResponse = IResponse<IGetExportJobRcbData>;
140
+
141
+ // ─── TEMPLATES ───────────────────────────────
142
+
143
+ export interface ITemplateAndVersionRcbData {
144
+ template: IRcbTemplate;
145
+ version: IRcbTemplateVersion;
146
+ warnings?: string[];
147
+ }
148
+ export type ICreateTemplateRcbResponse = IResponse<ITemplateAndVersionRcbData>;
149
+ export type IUpdateTemplateRcbResponse = IResponse<ITemplateAndVersionRcbData>;
150
+
151
+ export type IListTemplatesRcbResponse = IResponse<IRcbTemplate[]>;
152
+
153
+ export interface IGetTemplateRcbData {
154
+ template: IRcbTemplate;
155
+ latest_version: IRcbTemplateVersion | null;
156
+ }
157
+ export type IGetTemplateRcbResponse = IResponse<IGetTemplateRcbData>;
158
+
159
+ export type IListTemplateVersionsRcbResponse = IResponse<IRcbTemplateVersion[]>;
160
+
161
+ export interface IRcbTemplateCollection {
162
+ $schema: 'abyss-rcb-template-collection/v1';
163
+ exported_at: string;
164
+ templates: Array<{
165
+ name: string;
166
+ description: string | null;
167
+ versions: Array<{
168
+ version: number;
169
+ comment: string | null;
170
+ template_json: Record<string, unknown>;
171
+ }>;
172
+ }>;
173
+ }
174
+
175
+ export interface IImportTemplateCollectionRcbData {
176
+ imported: Array<{
177
+ originalName: string;
178
+ createdName: string;
179
+ templateId: string;
180
+ versions: number;
181
+ }>;
182
+ errors: Array<{ originalName: string; error: string }>;
183
+ }
184
+ export type IImportTemplateCollectionRcbResponse = IResponse<IImportTemplateCollectionRcbData>;
185
+
186
+ // ─── JOBS ────────────────────────────────────
187
+
188
+ export interface IRcbJob {
189
+ id: string;
190
+ status:
191
+ | 'waiting'
192
+ | 'active'
193
+ | 'completed'
194
+ | 'failed'
195
+ | 'delayed'
196
+ | 'paused'
197
+ | 'pending'
198
+ | 'stuck';
199
+ progress: number | object | string | boolean;
200
+ result: {
201
+ extractionId: string;
202
+ fileId: string;
203
+ cached: boolean;
204
+ recordsCount: number;
205
+ strategyUsed: string | null;
206
+ } | null;
207
+ error: string | null;
208
+ createdAt: number;
209
+ processedOn: number | null;
210
+ finishedOn: number | null;
211
+ attemptsMade: number;
212
+ }
213
+ export type IGetJobRcbResponse = IResponse<IRcbJob>;
214
+
215
+ // ─── FEEDBACK ────────────────────────────────
216
+
217
+ export type ICreateFeedbackRcbResponse = IResponse<IRcbFeedback>;
218
+ export interface IListFeedbackRcbResponse {
219
+ data: IRcbFeedback[];
220
+ total?: number;
221
+ }
222
+ export type IGetFeedbackRcbResponse = IResponse<IRcbFeedback>;
223
+
224
+ // ─── HEALTH / STATS / QUOTA ─────────────────
225
+
226
+ export interface IRcbHealth {
227
+ status: 'ok' | 'degraded' | 'down';
228
+ redis: 'ok' | 'down';
229
+ queue: 'ok' | 'down';
230
+ worker: 'ok' | 'down';
231
+ isShuttingDown: boolean;
232
+ rssMb: number;
233
+ heapUsedMb: number;
234
+ uptimeSec: number;
235
+ }
236
+ export type IHealthRcbResponse = IResponse<IRcbHealth>;
237
+
238
+ export interface IRcbStats {
239
+ waiting: number;
240
+ active: number;
241
+ completed: number;
242
+ failed: number;
243
+ delayed: number;
244
+ workerConcurrency: number;
245
+ isPaused: boolean;
246
+ }
247
+ export type IStatsRcbResponse = IResponse<IRcbStats>;
248
+
249
+ export interface IRcbUsageSummary {
250
+ totalEvents: number;
251
+ successCount: number;
252
+ failedCount: number;
253
+ cachedCount: number;
254
+ totalDurationMs: number;
255
+ totalRecordsExtracted: number;
256
+ totalBytesProcessed: number;
257
+ byEventType: Record<string, number>;
258
+ byBank: Record<string, number>;
259
+ }
260
+ export type ISummaryUsageRcbResponse = IResponse<IRcbUsageSummary>;
261
+
262
+ export interface IRcbQuotaStatus {
263
+ tier: string;
264
+ used: { extractCalls: number; extractedRecords: number; bytesProcessed: number };
265
+ caps: {
266
+ monthlyExtractCap: number | null;
267
+ monthlyExtractedCap: number | null;
268
+ monthlyBytesCap: number | null;
269
+ queueOnlyAboveCount: number | null;
270
+ };
271
+ allowed: boolean;
272
+ force_queue: boolean;
273
+ reason: string | null;
274
+ }
275
+ export type IGetQuotaRcbResponse = IResponse<IRcbQuotaStatus>;
276
+
277
+ // ─── WEBHOOK DELIVERIES ─────────────────────
278
+
279
+ export interface IListWebhookDeliveriesRcbResponse {
280
+ data: IRcbWebhookDelivery[];
281
+ total?: number;
282
+ }
283
+ export type IGetWebhookDeliveryRcbResponse = IResponse<IRcbWebhookDelivery>;
284
+
285
+ // ─── SHARE (public) ──────────────────────────
286
+
287
+ export interface IGetSharedExtractionRcbData {
288
+ id: string;
289
+ mode: RcbExtractionMode;
290
+ strategy_used: string | null;
291
+ confidence: number | null;
292
+ records_count: number | null;
293
+ balance_validated: boolean | null;
294
+ records: IRcbTransaction[];
295
+ metadata: IRcbExtractionMetadata;
296
+ warnings: string[];
297
+ share_expires_at: string | null;
298
+ created_at: string;
299
+ }
300
+ export type IGetSharedExtractionRcbResponse = IResponse<IGetSharedExtractionRcbData>;
301
+
302
+ export interface IMintShareExtractionRcbData {
303
+ share_url: string;
304
+ share_token: string;
305
+ share_expires_at: string | null;
306
+ }
307
+ export type IMintShareExtractionRcbResponse = IResponse<IMintShareExtractionRcbData>;
308
+
309
+ // ─── CHANGELOG ──────────────────────────────
310
+
311
+ export interface IChangelogRcbData {
312
+ current_version: string;
313
+ entries: Array<{ version: string; date: string; highlights: string[] }>;
314
+ }
315
+ export type IChangelogRcbResponse = IResponse<IChangelogRcbData>;
316
+
317
+ // ─── ADMIN: CATALOGUE ────────────────────────
318
+
319
+ export interface IListBankVersionsAdminRcbResponse {
320
+ data: IRcbBankVersion[];
321
+ total?: number;
322
+ }
323
+ export type IGetBankVersionAdminRcbResponse = IResponse<IRcbBankVersion>;
324
+ export type IUpsertBankVersionAdminRcbResponse = IResponse<IRcbBankVersion>;
325
+
326
+ export interface IReloadBankVersionsAdminRcbData {
327
+ loaded: number;
328
+ skipped: number;
329
+ total: number;
330
+ }
331
+ export type IReloadBankVersionsAdminRcbResponse = IResponse<IReloadBankVersionsAdminRcbData>;
332
+
333
+ export type IGetQuotaAdminRcbResponse = IResponse<IRcbQuota | null>;
334
+ export type IUpsertQuotaAdminRcbResponse = IResponse<IRcbQuota>;
335
+
336
+ export interface IDetectorReplayAdminRcbData {
337
+ scanned: number;
338
+ kept: number;
339
+ flipped: number;
340
+ newDetections: number;
341
+ skipped: number;
342
+ details: unknown[];
343
+ durationMs: number;
344
+ }
345
+ export type IDetectorReplayAdminRcbResponse = IResponse<IDetectorReplayAdminRcbData>;
346
+
347
+ export interface IListRequestLogAdminRcbData {
348
+ data: Array<{
349
+ ts: number;
350
+ method: string;
351
+ path: string;
352
+ status: number;
353
+ durationMs: number;
354
+ userId: string | null;
355
+ requestId: string | null;
356
+ rateLimitBucket: string | null;
357
+ }>;
358
+ meta: { capacity: number; used: number; oldestTs: number | null; newestTs: number | null };
359
+ }
360
+
361
+ // ─── METRICS ────────────────────────────────
362
+
363
+ export interface IRcbPerBankMetric {
364
+ bank: string;
365
+ extractions: number;
366
+ avgConfidence: number;
367
+ avgRecords: number;
368
+ balanceValidatedRate: number;
369
+ avgDurationMs: number;
370
+ feedbackOpen: number;
371
+ }
372
+ export type IPerBankMetricsAdminRcbResponse = IResponse<IRcbPerBankMetric[]>;
373
+
374
+ export interface IRcbLatencyBucket {
375
+ bucket: string;
376
+ count: number;
377
+ }
378
+ export type ILatencyMetricsAdminRcbResponse = IResponse<IRcbLatencyBucket[]>;
379
+
380
+ export interface IRcbOverviewMetrics {
381
+ last24h: { extractions: number; failures: number; avgLatencyMs: number };
382
+ last30d: { extractions: number; uniqueUsers: number };
383
+ }
384
+ export type IOverviewMetricsAdminRcbResponse = IResponse<IRcbOverviewMetrics>;
385
+
386
+ // ─── WEBHOOK SUBSCRIPTIONS ──────────────────
387
+
388
+ import type { IRcbWebhook } from '../../models/rcb.dto';
389
+
390
+ export interface IPaginateRcbWebhookData {
391
+ rows: IRcbWebhook[];
392
+ total: number;
393
+ }
394
+ export type IPaginateRcbWebhookResponse = IResponse<IPaginateRcbWebhookData>;
395
+ export type IGetRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
396
+ export type ICreateRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
397
+ export type IUpdateRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;
398
+ export type IDeleteRcbWebhookResponse = IResponse<{ ok: true }>;
399
+ export type IResetSecretRcbWebhookResponse = IResponse<{ webhook: IRcbWebhook }>;