pixivflow 2.12.2 → 2.13.0

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 (131) hide show
  1. package/README.md +12 -4
  2. package/dist/commands/DoctorCommand.d.ts +20 -0
  3. package/dist/commands/DoctorCommand.d.ts.map +1 -0
  4. package/dist/commands/DoctorCommand.js +107 -0
  5. package/dist/commands/DoctorCommand.js.map +1 -0
  6. package/dist/commands/ReconcileCommand.d.ts +24 -0
  7. package/dist/commands/ReconcileCommand.d.ts.map +1 -0
  8. package/dist/commands/ReconcileCommand.js +70 -0
  9. package/dist/commands/ReconcileCommand.js.map +1 -0
  10. package/dist/commands/SchedulerCommand.d.ts.map +1 -1
  11. package/dist/commands/SchedulerCommand.js +5 -0
  12. package/dist/commands/SchedulerCommand.js.map +1 -1
  13. package/dist/commands/SchedulerRunOnceCommand.d.ts.map +1 -1
  14. package/dist/commands/SchedulerRunOnceCommand.js +6 -0
  15. package/dist/commands/SchedulerRunOnceCommand.js.map +1 -1
  16. package/dist/commands/index.d.ts +3 -1
  17. package/dist/commands/index.d.ts.map +1 -1
  18. package/dist/commands/index.js +7 -1
  19. package/dist/commands/index.js.map +1 -1
  20. package/dist/commands/scheduler-runtime.d.ts +10 -1
  21. package/dist/commands/scheduler-runtime.d.ts.map +1 -1
  22. package/dist/commands/scheduler-runtime.js +169 -47
  23. package/dist/commands/scheduler-runtime.js.map +1 -1
  24. package/dist/config/types.d.ts +10 -1
  25. package/dist/config/types.d.ts.map +1 -1
  26. package/dist/delivery/DeliveryAck.d.ts +70 -0
  27. package/dist/delivery/DeliveryAck.d.ts.map +1 -0
  28. package/dist/delivery/DeliveryAck.js +72 -0
  29. package/dist/delivery/DeliveryAck.js.map +1 -0
  30. package/dist/delivery/DeliveryDispatcher.js +1 -1
  31. package/dist/delivery/DeliveryDispatcher.js.map +1 -1
  32. package/dist/delivery/DeliveryService.d.ts +74 -0
  33. package/dist/delivery/DeliveryService.d.ts.map +1 -0
  34. package/dist/delivery/DeliveryService.js +207 -0
  35. package/dist/delivery/DeliveryService.js.map +1 -0
  36. package/dist/delivery/HttpMultipartDelivery.d.ts +10 -1
  37. package/dist/delivery/HttpMultipartDelivery.d.ts.map +1 -1
  38. package/dist/delivery/HttpMultipartDelivery.js +40 -65
  39. package/dist/delivery/HttpMultipartDelivery.js.map +1 -1
  40. package/dist/delivery/LegacyOutboxMigration.d.ts +21 -0
  41. package/dist/delivery/LegacyOutboxMigration.d.ts.map +1 -0
  42. package/dist/delivery/LegacyOutboxMigration.js +125 -0
  43. package/dist/delivery/LegacyOutboxMigration.js.map +1 -0
  44. package/dist/delivery/OutboxWorker.d.ts +69 -0
  45. package/dist/delivery/OutboxWorker.d.ts.map +1 -0
  46. package/dist/delivery/OutboxWorker.js +194 -0
  47. package/dist/delivery/OutboxWorker.js.map +1 -0
  48. package/dist/delivery/types.d.ts +11 -0
  49. package/dist/delivery/types.d.ts.map +1 -1
  50. package/dist/download/DownloadManager.d.ts +17 -12
  51. package/dist/download/DownloadManager.d.ts.map +1 -1
  52. package/dist/download/DownloadManager.js +31 -53
  53. package/dist/download/DownloadManager.js.map +1 -1
  54. package/dist/download/NovelDownloader.d.ts +3 -1
  55. package/dist/download/NovelDownloader.d.ts.map +1 -1
  56. package/dist/download/NovelDownloader.js +30 -2
  57. package/dist/download/NovelDownloader.js.map +1 -1
  58. package/dist/download/handlers/IllustrationTargetHandler.d.ts +18 -8
  59. package/dist/download/handlers/IllustrationTargetHandler.d.ts.map +1 -1
  60. package/dist/download/handlers/IllustrationTargetHandler.js +100 -74
  61. package/dist/download/handlers/IllustrationTargetHandler.js.map +1 -1
  62. package/dist/download/handlers/NovelTargetHandler.d.ts +8 -8
  63. package/dist/download/handlers/NovelTargetHandler.d.ts.map +1 -1
  64. package/dist/download/handlers/NovelTargetHandler.js +64 -83
  65. package/dist/download/handlers/NovelTargetHandler.js.map +1 -1
  66. package/dist/download/plan/DownloadPlanner.d.ts +6 -1
  67. package/dist/download/plan/DownloadPlanner.d.ts.map +1 -1
  68. package/dist/download/plan/DownloadPlanner.js +28 -5
  69. package/dist/download/plan/DownloadPlanner.js.map +1 -1
  70. package/dist/notification/NotificationPolicy.d.ts +38 -0
  71. package/dist/notification/NotificationPolicy.d.ts.map +1 -0
  72. package/dist/notification/NotificationPolicy.js +89 -0
  73. package/dist/notification/NotificationPolicy.js.map +1 -0
  74. package/dist/package.json +1 -1
  75. package/dist/pixiv/PixivClient.d.ts +4 -0
  76. package/dist/pixiv/PixivClient.d.ts.map +1 -1
  77. package/dist/pixiv/PixivClient.js +15 -2
  78. package/dist/pixiv/PixivClient.js.map +1 -1
  79. package/dist/pixiv/RateLimitCoordinator.d.ts +30 -0
  80. package/dist/pixiv/RateLimitCoordinator.d.ts.map +1 -0
  81. package/dist/pixiv/RateLimitCoordinator.js +66 -0
  82. package/dist/pixiv/RateLimitCoordinator.js.map +1 -0
  83. package/dist/pixiv/client/PixivApiCore.d.ts +5 -0
  84. package/dist/pixiv/client/PixivApiCore.d.ts.map +1 -1
  85. package/dist/pixiv/client/PixivApiCore.js +31 -9
  86. package/dist/pixiv/client/PixivApiCore.js.map +1 -1
  87. package/dist/scheduler/ScheduleTriggerServer.d.ts +7 -0
  88. package/dist/scheduler/ScheduleTriggerServer.d.ts.map +1 -1
  89. package/dist/scheduler/ScheduleTriggerServer.js +17 -0
  90. package/dist/scheduler/ScheduleTriggerServer.js.map +1 -1
  91. package/dist/scheduler/SlotCoordinator.d.ts +15 -0
  92. package/dist/scheduler/SlotCoordinator.d.ts.map +1 -1
  93. package/dist/scheduler/SlotCoordinator.js +74 -0
  94. package/dist/scheduler/SlotCoordinator.js.map +1 -1
  95. package/dist/scheduler/SlotStateMachine.d.ts +32 -0
  96. package/dist/scheduler/SlotStateMachine.d.ts.map +1 -0
  97. package/dist/scheduler/SlotStateMachine.js +65 -0
  98. package/dist/scheduler/SlotStateMachine.js.map +1 -0
  99. package/dist/scheduler/TargetOutcome.d.ts +63 -0
  100. package/dist/scheduler/TargetOutcome.d.ts.map +1 -0
  101. package/dist/scheduler/TargetOutcome.js +28 -0
  102. package/dist/scheduler/TargetOutcome.js.map +1 -0
  103. package/dist/storage/Database.d.ts +16 -0
  104. package/dist/storage/Database.d.ts.map +1 -1
  105. package/dist/storage/Database.js +29 -0
  106. package/dist/storage/Database.js.map +1 -1
  107. package/dist/storage/DatabaseMigration.d.ts.map +1 -1
  108. package/dist/storage/DatabaseMigration.js +66 -0
  109. package/dist/storage/DatabaseMigration.js.map +1 -1
  110. package/dist/storage/repositories/DeliveryRepository.d.ts +73 -0
  111. package/dist/storage/repositories/DeliveryRepository.d.ts.map +1 -0
  112. package/dist/storage/repositories/DeliveryRepository.js +148 -0
  113. package/dist/storage/repositories/DeliveryRepository.js.map +1 -0
  114. package/dist/storage/repositories/MetadataRepository.d.ts +27 -0
  115. package/dist/storage/repositories/MetadataRepository.d.ts.map +1 -0
  116. package/dist/storage/repositories/MetadataRepository.js +58 -0
  117. package/dist/storage/repositories/MetadataRepository.js.map +1 -0
  118. package/dist/storage/repositories/OutboxRepository.d.ts +70 -0
  119. package/dist/storage/repositories/OutboxRepository.d.ts.map +1 -0
  120. package/dist/storage/repositories/OutboxRepository.js +187 -0
  121. package/dist/storage/repositories/OutboxRepository.js.map +1 -0
  122. package/dist/storage/repositories/SlotRepository.d.ts +26 -1
  123. package/dist/storage/repositories/SlotRepository.d.ts.map +1 -1
  124. package/dist/storage/repositories/SlotRepository.js +76 -2
  125. package/dist/storage/repositories/SlotRepository.js.map +1 -1
  126. package/dist/webui/package.json +1 -1
  127. package/package.json +1 -1
  128. package/dist/delivery/DeliveryOutbox.d.ts +0 -43
  129. package/dist/delivery/DeliveryOutbox.d.ts.map +0 -1
  130. package/dist/delivery/DeliveryOutbox.js +0 -293
  131. package/dist/delivery/DeliveryOutbox.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DeliveryDispatcher.js","sourceRoot":"","sources":["../../src/delivery/DeliveryDispatcher.ts"],"names":[],"mappings":";;;AACA,4CAA8C;AAC9C,mEAAgE;AAGhE,iFAAiF;AACjF,MAAa,kBAAkB;IAEV;IACA;IAFnB,YACmB,MAAkC,EAClC,QAAiB;QADjB,WAAM,GAAN,MAAM,CAA4B;QAClC,aAAQ,GAAR,QAAQ,CAAS;IACjC,CAAC;IAEJ,SAAS,CAAC,IAAY;QACpB,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAwB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAW,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,eAAe;gBAClB,OAAO,IAAI,6CAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3E;gBACE,MAAM,IAAI,oBAAW,CAAC,qCAAsC,MAA4B,CAAC,IAAI,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAoC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAW,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,oBAAW,CAAC,qCAAsC,MAA4B,CAAC,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,oBAAW,CAAC,uDAAuD,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAI,6CAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CACF;AApCD,gDAoCC"}
1
+ {"version":3,"file":"DeliveryDispatcher.js","sourceRoot":"","sources":["../../src/delivery/DeliveryDispatcher.ts"],"names":[],"mappings":";;;AACA,4CAA8C;AAC9C,mEAAgE;AAGhE,iFAAiF;AACjF,MAAa,kBAAkB;IAEV;IACA;IAFnB,YACmB,MAAkC,EAClC,QAAiB;QADjB,WAAM,GAAN,MAAM,CAA4B;QAClC,aAAQ,GAAR,QAAQ,CAAS;IACjC,CAAC;IAEJ,SAAS,CAAC,IAAY;QACpB,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,OAAwB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAW,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,eAAe;gBAClB,OAAO,IAAI,6CAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3E;gBACE,MAAM,IAAI,oBAAW,CAAC,qCAAsC,MAA4B,CAAC,IAAI,EAAE,CAAC,CAAC;QACrG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,OAAoC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,oBAAW,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,oBAAW,CAAC,qCAAsC,MAA4B,CAAC,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,oBAAW,CAAC,uDAAuD,IAAI,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAI,6CAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9E,CAAC;CACF;AApCD,gDAoCC"}
@@ -0,0 +1,74 @@
1
+ import { Database } from '../storage/Database';
2
+ import { TargetConfig } from '../config';
3
+ import { DownloadedArtifact } from './types';
4
+ /**
5
+ * The single place that turns a downloaded artifact into a durable delivery
6
+ * intent. It atomically:
7
+ * - inserts (or reuses) the delivery ledger row (pending),
8
+ * - enqueues the outbox side effect,
9
+ * - moves the slot cell to delivery_pending.
10
+ * Because all three land in one SQLite transaction, a crash at any point
11
+ * leaves a state with a deterministic recovery (resume), never a false
12
+ * "submitted". Downstream ACK is what later promotes the cell to submitted.
13
+ */
14
+ export interface EnqueueResult {
15
+ deliveryId: string;
16
+ idempotencyKey: string;
17
+ /** True when an already-confirmed ledger/fact short-circuited a new intent. */
18
+ duplicate: boolean;
19
+ /** True when this call created a brand new delivery row. */
20
+ created: boolean;
21
+ }
22
+ export declare class DeliveryService {
23
+ private readonly database;
24
+ constructor(database: Database);
25
+ /** Delivery target name for a target config, or null when it is not a delivery run. */
26
+ static targetName(target: TargetConfig): string | null;
27
+ /** Stable per-occurrence intent key, so ACK loss / replays converge to one row. */
28
+ static idempotencyKey(deliveryTarget: string, artifact: DownloadedArtifact, slotId?: string, targetId?: string): string;
29
+ /**
30
+ * Delivery-dedup preflight: is this work already CONFIRMED delivered to this
31
+ * target? Runs in the candidate pipeline BEFORE work lock so a historical
32
+ * duplicate is skipped and the next valid candidate is chosen. This is
33
+ * distinct from download dedupe (which only proves local caching).
34
+ */
35
+ isAlreadyDelivered(deliveryTarget: string, workType: string, pixivId: string): boolean;
36
+ /** Batch form for pre-lock candidate filtering. */
37
+ deliveredIds(deliveryTarget: string, workType: string, pixivIds: string[]): Set<string>;
38
+ /**
39
+ * Atomically create the delivery intent + outbox row and advance the cell.
40
+ * Missing local artifact files are treated as a recoverable error (the
41
+ * caller re-runs the download); a crash leaves the intent pending for the
42
+ * OutboxWorker — it never fabricates a submitted cell.
43
+ */
44
+ enqueue(artifact: DownloadedArtifact, target: TargetConfig, context?: {
45
+ slotId?: string;
46
+ idempotencyKey?: string;
47
+ fields?: Record<string, unknown>;
48
+ extraContext?: Record<string, unknown>;
49
+ }): EnqueueResult;
50
+ /**
51
+ * Record a historical downstream fact discovered via reconciliation: a work
52
+ * the remote already published from a different/older intent. Backfills the
53
+ * ledger so it never re-selects the work, and (optionally) settles the cell.
54
+ * This is the ONLY path that accepts a post-lock historical duplicate.
55
+ */
56
+ reconcileHistoricalDuplicate(input: {
57
+ deliveryTarget: string;
58
+ workType: string;
59
+ pixivId: string;
60
+ remoteId?: string;
61
+ remoteStatus?: string;
62
+ slotId?: string;
63
+ targetId?: string;
64
+ reason: string;
65
+ }): {
66
+ deliveryId: string;
67
+ created: boolean;
68
+ };
69
+ /** Enqueue a durable notification (retried independently; never affects content). */
70
+ enqueueNotification(deliveryTarget: string, text: string, idempotencyKey: string): void;
71
+ private guardCell;
72
+ private contextFrom;
73
+ }
74
+ //# sourceMappingURL=DeliveryService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeliveryService.d.ts","sourceRoot":"","sources":["../../src/delivery/DeliveryService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAG7C;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAE/C,uFAAuF;IACvF,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IAKtD,mFAAmF;IACnF,MAAM,CAAC,cAAc,CACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM;IAKT;;;;;OAKG;IACH,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAItF,mDAAmD;IACnD,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAIvF;;;;;OAKG;IACH,OAAO,CACL,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,GACL,aAAa;IA8FhB;;;;;OAKG;IACH,4BAA4B,CAAC,KAAK,EAAE;QAClC,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAmC5C,qFAAqF;IACrF,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IASvF,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;CAiBpB"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeliveryService = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const node_fs_1 = require("node:fs");
6
+ const logger_1 = require("../logger");
7
+ class DeliveryService {
8
+ database;
9
+ constructor(database) {
10
+ this.database = database;
11
+ }
12
+ /** Delivery target name for a target config, or null when it is not a delivery run. */
13
+ static targetName(target) {
14
+ if (target.storageMode !== 'cache')
15
+ return null;
16
+ return target.delivery?.target?.trim() || null;
17
+ }
18
+ /** Stable per-occurrence intent key, so ACK loss / replays converge to one row. */
19
+ static idempotencyKey(deliveryTarget, artifact, slotId, targetId) {
20
+ const scope = slotId && targetId ? `${slotId}:${targetId}` : 'adhoc';
21
+ return `pixivflow:${deliveryTarget}:${artifact.type}:${artifact.pixivId}:${scope}`;
22
+ }
23
+ /**
24
+ * Delivery-dedup preflight: is this work already CONFIRMED delivered to this
25
+ * target? Runs in the candidate pipeline BEFORE work lock so a historical
26
+ * duplicate is skipped and the next valid candidate is chosen. This is
27
+ * distinct from download dedupe (which only proves local caching).
28
+ */
29
+ isAlreadyDelivered(deliveryTarget, workType, pixivId) {
30
+ return this.database.deliveries.isDelivered(deliveryTarget, workType, String(pixivId));
31
+ }
32
+ /** Batch form for pre-lock candidate filtering. */
33
+ deliveredIds(deliveryTarget, workType, pixivIds) {
34
+ return this.database.deliveries.deliveredIds(deliveryTarget, workType, pixivIds);
35
+ }
36
+ /**
37
+ * Atomically create the delivery intent + outbox row and advance the cell.
38
+ * Missing local artifact files are treated as a recoverable error (the
39
+ * caller re-runs the download); a crash leaves the intent pending for the
40
+ * OutboxWorker — it never fabricates a submitted cell.
41
+ */
42
+ enqueue(artifact, target, context = {}) {
43
+ const deliveryTarget = DeliveryService.targetName(target);
44
+ if (!deliveryTarget) {
45
+ throw new Error('enqueue called for a non-delivery (non-cache) target');
46
+ }
47
+ if (artifact.files.length === 0) {
48
+ throw new Error(`no files produced for ${artifact.type} ${artifact.pixivId}`);
49
+ }
50
+ const missing = artifact.files.find((file) => !(0, node_fs_1.existsSync)(file));
51
+ if (missing) {
52
+ // Crash between download and intent, or cache eviction. Recoverable: the
53
+ // cell stays selected and a resume re-downloads the SAME locked work.
54
+ throw new Error(`artifact file missing before enqueue: ${missing}`);
55
+ }
56
+ // Ledger short-circuit: a confirmed fact must never create a new intent.
57
+ if (this.database.deliveries.isDelivered(deliveryTarget, artifact.type, artifact.pixivId)) {
58
+ return { deliveryId: '', idempotencyKey: '', duplicate: true, created: false };
59
+ }
60
+ const idempotencyKey = context.idempotencyKey ??
61
+ DeliveryService.idempotencyKey(deliveryTarget, artifact, context.slotId, target.id);
62
+ const result = this.database.transaction(() => {
63
+ const { row, created } = this.database.deliveries.insertIntent({
64
+ id: (0, node_crypto_1.randomUUID)(),
65
+ deliveryTarget,
66
+ workType: artifact.type,
67
+ pixivId: artifact.pixivId,
68
+ slotId: context.slotId ?? null,
69
+ targetId: target.id ?? null,
70
+ idempotencyKey,
71
+ });
72
+ // Reuse of our own prior intent (ACK lost / duplicate trigger / restart).
73
+ if (!created) {
74
+ if (row.status === 'delivered' || row.status === 'duplicate') {
75
+ return { deliveryId: row.id, duplicate: true, created: false };
76
+ }
77
+ // pending/failed: ensure an outbox row exists (idempotent) and keep the
78
+ // cell recoverable rather than emitting a second side effect.
79
+ this.database.outbox.enqueue({
80
+ kind: 'delivery',
81
+ deliveryTarget,
82
+ idempotencyKey: `outbox:${idempotencyKey}`,
83
+ deliveryId: row.id,
84
+ payload: {
85
+ files: artifact.files,
86
+ cleanupFiles: artifact.cleanupFiles ?? [],
87
+ fields: context.fields ?? null,
88
+ context: { ...this.contextFrom(artifact, target), idempotencyKey, ...(context.extraContext ?? {}) },
89
+ },
90
+ }, Date.now());
91
+ if (context.slotId && target.id) {
92
+ this.guardCell(context.slotId, target.id, 'delivery_pending');
93
+ }
94
+ return { deliveryId: row.id, duplicate: false, created: false };
95
+ }
96
+ this.database.outbox.enqueue({
97
+ kind: 'delivery',
98
+ deliveryTarget,
99
+ idempotencyKey: `outbox:${idempotencyKey}`,
100
+ deliveryId: row.id,
101
+ payload: {
102
+ files: artifact.files,
103
+ cleanupFiles: artifact.cleanupFiles ?? [],
104
+ fields: context.fields ?? null,
105
+ context: { ...this.contextFrom(artifact, target), idempotencyKey, ...(context.extraContext ?? {}) },
106
+ },
107
+ });
108
+ if (context.slotId && target.id) {
109
+ this.guardCell(context.slotId, target.id, 'delivery_pending');
110
+ }
111
+ return { deliveryId: row.id, duplicate: false, created: true };
112
+ });
113
+ logger_1.logger.info('Delivery intent enqueued', {
114
+ deliveryId: result.deliveryId,
115
+ deliveryTarget,
116
+ pixivId: artifact.pixivId,
117
+ workType: artifact.type,
118
+ slotId: context.slotId,
119
+ created: result.created,
120
+ idempotencyKey,
121
+ });
122
+ return { ...result, idempotencyKey };
123
+ }
124
+ /**
125
+ * Record a historical downstream fact discovered via reconciliation: a work
126
+ * the remote already published from a different/older intent. Backfills the
127
+ * ledger so it never re-selects the work, and (optionally) settles the cell.
128
+ * This is the ONLY path that accepts a post-lock historical duplicate.
129
+ */
130
+ reconcileHistoricalDuplicate(input) {
131
+ const key = `reconcile:${input.deliveryTarget}:${input.workType}:${input.pixivId}`;
132
+ const { row, created } = this.database.deliveries.backfill({
133
+ id: (0, node_crypto_1.randomUUID)(),
134
+ deliveryTarget: input.deliveryTarget,
135
+ workType: input.workType,
136
+ pixivId: input.pixivId,
137
+ slotId: input.slotId ?? null,
138
+ targetId: input.targetId ?? null,
139
+ idempotencyKey: key,
140
+ remoteId: input.remoteId,
141
+ remoteStatus: input.remoteStatus ?? 'duplicate_existing',
142
+ });
143
+ // Mark the backfilled ledger row as an attested historical duplicate.
144
+ if (row.status !== 'duplicate') {
145
+ this.database.deliveries.recordAck(row.id, {
146
+ status: 'duplicate',
147
+ remoteId: input.remoteId,
148
+ remoteStatus: input.remoteStatus ?? 'duplicate_existing',
149
+ reuseReason: input.reason,
150
+ });
151
+ }
152
+ if (input.slotId && input.targetId) {
153
+ this.guardCell(input.slotId, input.targetId, 'duplicate');
154
+ }
155
+ logger_1.logger.warn('Reconciled historical downstream duplicate', {
156
+ pixivId: input.pixivId,
157
+ workType: input.workType,
158
+ deliveryTarget: input.deliveryTarget,
159
+ remoteId: input.remoteId,
160
+ reason: input.reason,
161
+ });
162
+ return { deliveryId: row.id, created };
163
+ }
164
+ /** Enqueue a durable notification (retried independently; never affects content). */
165
+ enqueueNotification(deliveryTarget, text, idempotencyKey) {
166
+ this.database.outbox.enqueue({
167
+ kind: 'notification',
168
+ deliveryTarget,
169
+ idempotencyKey,
170
+ payload: { text },
171
+ });
172
+ }
173
+ guardCell(slotId, targetId, next) {
174
+ const cell = this.database.slots.getCell(slotId, targetId);
175
+ if (!cell)
176
+ return;
177
+ if (cell.status === next)
178
+ return;
179
+ if (cell.status === 'submitted' || cell.status === 'duplicate')
180
+ return; // never downgrade
181
+ try {
182
+ this.database.slots.transitionCell(slotId, targetId, next);
183
+ }
184
+ catch (error) {
185
+ logger_1.logger.debug('Cell transition skipped', { slotId, targetId, from: cell.status, to: next, error: error.message });
186
+ }
187
+ }
188
+ contextFrom(artifact, target) {
189
+ return {
190
+ title: artifact.title,
191
+ pixivId: artifact.pixivId,
192
+ type: artifact.type,
193
+ targetId: target.id,
194
+ tag: target.filterTag || target.tag || '',
195
+ topic: target.topic?.trim() || undefined,
196
+ workTags: artifact.tags,
197
+ spoiler: artifact.spoiler,
198
+ xRestrict: artifact.xRestrict,
199
+ publishedAt: artifact.publishedAt,
200
+ language: artifact.language,
201
+ bookmarkCount: artifact.bookmarkCount,
202
+ viewCount: artifact.viewCount,
203
+ };
204
+ }
205
+ }
206
+ exports.DeliveryService = DeliveryService;
207
+ //# sourceMappingURL=DeliveryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeliveryService.js","sourceRoot":"","sources":["../../src/delivery/DeliveryService.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,17 @@ export declare class HttpMultipartDelivery implements DeliveryProvider {
5
5
  private readonly config;
6
6
  private readonly dispatcher?;
7
7
  constructor(config: HttpMultipartDeliveryConfig, proxyUrl?: string);
8
+ /**
9
+ * One delivery attempt. Retry/backoff/dead-letter belong to the outbox worker,
10
+ * not here, so this performs exactly ONE HTTP call and normalizes the result
11
+ * into a DeliveryAck. HTTP status/body is never silently treated as success.
12
+ */
8
13
  deliver(request: DeliveryRequest): Promise<DeliveryResult>;
9
- notify(request: DeliveryNotificationRequest): Promise<DeliveryResult>;
14
+ /** Single notification attempt; the outbox owns retries. */
15
+ notifyOnce(request: DeliveryNotificationRequest): Promise<{
16
+ status: number;
17
+ body: unknown;
18
+ }>;
10
19
  private attempt;
11
20
  private assertSuccess;
12
21
  private resolveHeaders;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpMultipartDelivery.d.ts","sourceRoot":"","sources":["../../src/delivery/HttpMultipartDelivery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmCzG,0DAA0D;AAC1D,qBAAa,qBAAsB,YAAW,gBAAgB;IAI1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAU;gBAGnB,MAAM,EAAE,2BAA2B,EACpD,QAAQ,CAAC,EAAE,MAAM;IASb,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA8B1D,MAAM,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,cAAc,CAAC;YAmD7D,OAAO;IA+CrB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAmFrB,OAAO,CAAC,sBAAsB;YAUhB,mBAAmB;IAkDjC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,OAAO;CAIhB"}
1
+ {"version":3,"file":"HttpMultipartDelivery.d.ts","sourceRoot":"","sources":["../../src/delivery/HttpMultipartDelivery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAoCzG,0DAA0D;AAC1D,qBAAa,qBAAsB,YAAW,gBAAgB;IAI1D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAU;gBAGnB,MAAM,EAAE,2BAA2B,EACpD,QAAQ,CAAC,EAAE,MAAM;IASnB;;;;OAIG;IACG,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAShE,4DAA4D;IACtD,UAAU,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;YAsBpF,OAAO;IAgDrB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAuFrB,OAAO,CAAC,sBAAsB;YAUhB,mBAAmB;IAkDjC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,OAAO;CAIhB"}
@@ -39,6 +39,7 @@ const path = __importStar(require("node:path"));
39
39
  const node_crypto_1 = require("node:crypto");
40
40
  const node_stream_1 = require("node:stream");
41
41
  const logger_1 = require("../logger");
42
+ const DeliveryAck_1 = require("./DeliveryAck");
42
43
  /** Render an ISO timestamp to YYYY-MM-DD (create_date is JST). */
43
44
  function formatPublishedDate(iso) {
44
45
  if (!iso)
@@ -85,79 +86,48 @@ class HttpMultipartDelivery {
85
86
  this.dispatcher = new ProxyAgent(proxyUrl);
86
87
  }
87
88
  }
89
+ /**
90
+ * One delivery attempt. Retry/backoff/dead-letter belong to the outbox worker,
91
+ * not here, so this performs exactly ONE HTTP call and normalizes the result
92
+ * into a DeliveryAck. HTTP status/body is never silently treated as success.
93
+ */
88
94
  async deliver(request) {
89
95
  if (request.files.length === 0) {
90
96
  throw new Error('HTTP multipart delivery requires at least one file');
91
97
  }
92
- const maxAttempts = Math.max(1, this.config.maxAttempts ?? 3);
93
- const retryDelayMs = Math.max(0, this.config.retryDelayMs ?? 2000);
94
- let lastError;
95
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
96
- try {
97
- return await this.attempt(request);
98
- }
99
- catch (error) {
100
- lastError = error;
101
- logger_1.logger.warn(`HTTP multipart delivery attempt ${attempt}/${maxAttempts} failed`, {
102
- url: this.config.url,
103
- error: error instanceof Error ? error.message : String(error),
104
- files: request.files.length,
105
- });
106
- if (attempt < maxAttempts) {
107
- await new Promise((resolve) => setTimeout(resolve, retryDelayMs * attempt));
108
- }
109
- }
110
- }
111
- throw new Error(`HTTP multipart delivery failed after ${maxAttempts} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`);
98
+ const { status, body } = await this.attempt(request);
99
+ const httpStatus = status ?? 0;
100
+ return { status: httpStatus, body, ack: (0, DeliveryAck_1.parseDeliveryAck)(httpStatus, body, this.config.ack) };
112
101
  }
113
- async notify(request) {
102
+ /** Single notification attempt; the outbox owns retries. */
103
+ async notifyOnce(request) {
114
104
  const url = this.config.notificationUrl?.trim();
115
105
  if (!url)
116
106
  throw new Error('HTTP delivery notificationUrl is not configured');
117
- const maxAttempts = Math.max(1, this.config.maxAttempts ?? 3);
118
- const retryDelayMs = Math.max(0, this.config.retryDelayMs ?? 2000);
119
- let lastError;
120
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
107
+ const headers = {
108
+ ...this.resolveHeaders(this.config.headers ?? {}),
109
+ 'Content-Type': 'application/json',
110
+ };
111
+ const options = {
112
+ method: 'POST',
113
+ headers,
114
+ body: JSON.stringify({ text: request.text, idempotency_key: request.idempotencyKey }),
115
+ };
116
+ if (this.dispatcher)
117
+ options.dispatcher = this.dispatcher;
118
+ const response = await fetch(this.interpolateEnvironment(url), options);
119
+ const text = await response.text();
120
+ let body = text;
121
+ if (text) {
121
122
  try {
122
- const headers = {
123
- ...this.resolveHeaders(this.config.headers ?? {}),
124
- 'Content-Type': 'application/json',
125
- };
126
- const options = {
127
- method: 'POST',
128
- headers,
129
- body: JSON.stringify({
130
- text: request.text,
131
- idempotency_key: request.idempotencyKey,
132
- }),
133
- };
134
- if (this.dispatcher)
135
- options.dispatcher = this.dispatcher;
136
- const response = await fetch(this.interpolateEnvironment(url), options);
137
- const text = await response.text();
138
- let body = text;
139
- if (text) {
140
- try {
141
- body = JSON.parse(text);
142
- }
143
- catch { /* plain text is valid */ }
144
- }
145
- this.assertSuccess(response, body);
146
- logger_1.logger.info('HTTP delivery notification succeeded', { url: redactUrl(url), status: response.status });
147
- return { status: response.status, body };
148
- }
149
- catch (error) {
150
- lastError = error;
151
- logger_1.logger.warn(`HTTP delivery notification attempt ${attempt}/${maxAttempts} failed`, {
152
- url: redactUrl(url),
153
- error: error instanceof Error ? error.message : String(error),
154
- });
155
- if (attempt < maxAttempts) {
156
- await new Promise((resolve) => setTimeout(resolve, retryDelayMs * attempt));
157
- }
123
+ body = JSON.parse(text);
158
124
  }
125
+ catch { /* plain ok */ }
159
126
  }
160
- throw new Error(`HTTP delivery notification failed after ${maxAttempts} attempts: ${lastError instanceof Error ? lastError.message : String(lastError)}`);
127
+ if (!response.ok)
128
+ throw new Error(`notification endpoint returned HTTP ${response.status}`);
129
+ logger_1.logger.info('HTTP delivery notification sent', { url: redactUrl(url), status: response.status });
130
+ return { status: response.status, body };
161
131
  }
162
132
  async attempt(request) {
163
133
  const fields = this.resolveFields({ ...(this.config.fields ?? {}), ...(request.fields ?? {}) }, request);
@@ -186,11 +156,12 @@ class HttpMultipartDelivery {
186
156
  // Non-JSON responses are valid when only HTTP status is configured.
187
157
  }
188
158
  }
189
- this.assertSuccess(response, body);
190
159
  const data = body && typeof body === 'object'
191
160
  ? body.data
192
161
  : undefined;
193
- logger_1.logger.info('HTTP multipart delivery succeeded', {
162
+ // Classification happens in parseDeliveryAck (DeliveryResult.ack). We keep
163
+ // the raw status/body and only log for correlation.
164
+ logger_1.logger.info('HTTP multipart delivery response', {
194
165
  url: this.config.url,
195
166
  status: response.status,
196
167
  files: request.files.length,
@@ -291,10 +262,14 @@ class HttpMultipartDelivery {
291
262
  slotId: request.context.slotId ?? '',
292
263
  slotName: request.context.slotName ?? '',
293
264
  slotDate: request.context.slotDate ?? '',
265
+ // The occurrence-scoped intent key. MUST be sent so an ACK-loss retry
266
+ // (same key) converges remotely as idempotent_replay instead of being
267
+ // mistaken for a historical duplicate or, worse, double-posting.
268
+ idempotencyKey: request.context.idempotencyKey ?? '',
294
269
  };
295
270
  return Object.fromEntries(Object.entries(fields).map(([name, value]) => {
296
271
  const values = Array.isArray(value) ? value : [value];
297
- const rendered = values.map((item) => String(item).replace(/\{\{(title|pixivId|type|targetId|tag|topic|workTags|link|topicTag|spoiler|xRestrict|xRestrictLabel|xRestrictTag|rankingDate|publishedDate|language|bookmarkCount|viewCount|scheduleId|executionId|occurrenceAt|triggerSource|slotId|slotName|slotDate)\}\}/g, (_, key) => variables[key]));
272
+ const rendered = values.map((item) => String(item).replace(/\{\{(title|pixivId|type|targetId|tag|topic|workTags|link|topicTag|spoiler|xRestrict|xRestrictLabel|xRestrictTag|rankingDate|publishedDate|language|bookmarkCount|viewCount|scheduleId|executionId|occurrenceAt|triggerSource|slotId|slotName|slotDate|idempotencyKey)\}\}/g, (_, key) => variables[key]));
298
273
  switch (this.config.arrayFormat ?? 'comma') {
299
274
  case 'repeat':
300
275
  return [name, rendered];
@@ -1 +1 @@
1
- {"version":3,"file":"HttpMultipartDelivery.js","sourceRoot":"","sources":["../../src/delivery/HttpMultipartDelivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpMultipartDelivery.js","sourceRoot":"","sources":["../../src/delivery/HttpMultipartDelivery.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA8B;AAC9B,gDAAkC;AAClC,6CAAyC;AACzC,6CAAuC;AAEvC,sCAAmC;AAEnC,+CAAiD;AAEjD,kEAAkE;AAClE,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACpF,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;IACxE,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;IACtE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,iEAAiE;AACjE,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QAE/E,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,SAAS,GAAG,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAa,qBAAqB;IAIb;IAHF,UAAU,CAAW;IAEtC,YACmB,MAAmC,EACpD,QAAiB;QADA,WAAM,GAAN,MAAM,CAA6B;QAGpD,IAAI,QAAQ,EAAE,CAAC;YACb,8DAA8D;YAC9D,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAA,8BAAgB,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChG,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,UAAU,CAAC,OAAoC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACjD,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,MAAM,OAAO,GAA4B;YACvC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SACtF,CAAC;QACF,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,OAAsC,CAAC,CAAC;QACvG,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5F,eAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAwB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAC/B,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAC5D,OAAO,CACR,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,OAAO,GAA2B;YACtC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACjD,cAAc,EAAE,iCAAiC,SAAS,CAAC,QAAQ,EAAE;YACrE,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC;SAClD,CAAC;QACF,MAAM,OAAO,GAA4B;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM;YACpC,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,OAAO;YACP,MAAM,EAAE,MAAM;SACf,CAAC;QACF,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAE1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAC5C,OAAsC,CACvC,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,IAAI,GAAY,IAAI,CAAC;QACzB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAC3C,CAAC,CAAE,IAA2C,CAAC,IAAI;YACnD,CAAC,CAAC,SAAS,CAAC;QACd,2EAA2E;QAC3E,oDAAoD;QACpD,eAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC9C,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAC3B,cAAc,EAAE,IAAI,EAAE,MAAM;YAC5B,QAAQ,EAAE,IAAI,EAAE,SAAS;YACzB,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAEO,aAAa,CAAC,QAAkB,EAAE,IAAa;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;QACvD,MAAM,QAAQ,GAAG,gBAAgB;YAC/B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAU,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAChE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBAC1D,OAAQ,KAAiC,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAClF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;gBAC7B,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,kBAAkB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACjG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,OAA+B;QACpD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CACzF,CAAC;IACJ,CAAC;IAEO,aAAa,CACnB,MAA0C,EAC1C,OAAwB;QAExB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5C,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE;YAC3B,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC9C,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,UAAU,CAAC;YACvC,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC;YACnC,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,OAAO,CAAC;YACpC,OAAO,WAAW,SAAS,GAAG,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;YACzB,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACvC,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtC,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAClC,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC;YACnC,OAAO,YAAY,SAAS,EAAE,CAAC;QACjC,CAAC,CAAC,EAAE,CAAC;QACL,MAAM,SAAS,GAA2B;YACxC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO;YAChC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YAC1B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;YACxC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE;YAC9B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAClC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACnD,6EAA6E;YAC7E,IAAI,EACF,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;gBAC9B,CAAC,CAAC,2CAA2C,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;gBACtE,CAAC,CAAC,kCAAkC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE;YACjE,4EAA4E;YAC5E,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE;YAC5D,yEAAyE;YACzE,uBAAuB;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC5D,wEAAwE;YACxE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3D,cAAc;YACd,YAAY;YACZ,gEAAgE;YAChE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;YAC9C,2DAA2D;YAC3D,aAAa,EAAE,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAC/D,uEAAuE;YACvE,oDAAoD;YACpD,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;YACxC,sEAAsE;YACtE,uDAAuD;YACvD,aAAa,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;YACzD,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;YACjD,4EAA4E;YAC5E,yEAAyE;YACzE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE;YAC5C,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;YAC9C,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE;YAChD,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE;YAClD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE;YACpC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;YACxC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE;YACxC,sEAAsE;YACtE,sEAAsE;YACtE,iEAAiE;YACjE,cAAc,EAAG,OAAO,CAAC,OAAO,CAAC,cAAyB,IAAI,EAAE;SACjE,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACnC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAClB,4QAA4Q,EAC5Q,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CACnC,CACF,CAAC;YACF,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC3C,KAAK,QAAQ;oBACX,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC1B,KAAK,MAAM;oBACT,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5C;oBACE,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,KAAa;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC,MAAM,EAAE,IAAY,EAAE,EAAE;YAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,IAAI,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAe,EACf,MAAgC;QAEhC,MAAM,QAAQ,GAAG,aAAa,IAAA,wBAAU,GAAE,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;QAChF,MAAM,SAAS,GAA0D,EAAE,CAAC;QAC5E,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,KAAK,QAAQ,MAAM;gBACjB,yCAAyC,SAAS,gBAAgB,QAAQ,OAAO;gBACjF,gDAAgD,CACnD,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxD,aAAa,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,KAAK,QAAQ,MAAM;oBACjB,yCAAyC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW;oBACrF,GAAG,KAAK,MAAM,CACjB,CAAC;gBACF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,QAAQ,CAAC,CAAC;QACnD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;QAEhC,MAAM,IAAI,GAAG,sBAAQ,CAAC,IAAI,CACxB,CAAC,KAAK,SAAS,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,MAAM,CAAC;gBAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAM,KAAK,CAAC;gBACtE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,UAAU;gBAAE,MAAM,IAAI,CAAC;YAC1C,MAAM,OAAO,CAAC;QAChB,CAAC,CAAC,EAAE,CACL,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IAC3C,CAAC;IAEO,sBAAsB,CAAC,KAAa;QAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAEO,OAAO,CAAC,IAAa;QAC3B,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF;AA9RD,sDA8RC"}
@@ -0,0 +1,21 @@
1
+ import { Database } from '../storage/Database';
2
+ /**
3
+ * Idempotent migration from the legacy file-based outbox
4
+ * (delivery-outbox/*.json manifests) to the SQLite transactional outbox.
5
+ *
6
+ * It is crash-safe: a manifest is only ARCHIVED after its outbox row is
7
+ * committed, and re-running finds the row via the same idempotency key (no
8
+ * duplicate side effects). Pending/retryable manifests become due rows;
9
+ * already-delivered manifests are archived without a new intent (their work is
10
+ * also backfilled into the delivery ledger when resolvable).
11
+ */
12
+ export interface LegacyMigrationResult {
13
+ scanned: number;
14
+ imported: number;
15
+ delivered: number;
16
+ skipped: number;
17
+ failed: number;
18
+ }
19
+ export declare function legacyOutboxDir(databasePath: string): string;
20
+ export declare function migrateLegacyOutbox(database: Database, outboxDir?: string): LegacyMigrationResult;
21
+ //# sourceMappingURL=LegacyOutboxMigration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegacyOutboxMigration.d.ts","sourceRoot":"","sources":["../../src/delivery/LegacyOutboxMigration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAwBD,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,MAAoD,GAC9D,qBAAqB,CA8GvB"}