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.
- package/README.md +12 -4
- package/dist/commands/DoctorCommand.d.ts +20 -0
- package/dist/commands/DoctorCommand.d.ts.map +1 -0
- package/dist/commands/DoctorCommand.js +107 -0
- package/dist/commands/DoctorCommand.js.map +1 -0
- package/dist/commands/ReconcileCommand.d.ts +24 -0
- package/dist/commands/ReconcileCommand.d.ts.map +1 -0
- package/dist/commands/ReconcileCommand.js +70 -0
- package/dist/commands/ReconcileCommand.js.map +1 -0
- package/dist/commands/SchedulerCommand.d.ts.map +1 -1
- package/dist/commands/SchedulerCommand.js +5 -0
- package/dist/commands/SchedulerCommand.js.map +1 -1
- package/dist/commands/SchedulerRunOnceCommand.d.ts.map +1 -1
- package/dist/commands/SchedulerRunOnceCommand.js +6 -0
- package/dist/commands/SchedulerRunOnceCommand.js.map +1 -1
- package/dist/commands/index.d.ts +3 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/scheduler-runtime.d.ts +10 -1
- package/dist/commands/scheduler-runtime.d.ts.map +1 -1
- package/dist/commands/scheduler-runtime.js +169 -47
- package/dist/commands/scheduler-runtime.js.map +1 -1
- package/dist/config/types.d.ts +10 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/delivery/DeliveryAck.d.ts +70 -0
- package/dist/delivery/DeliveryAck.d.ts.map +1 -0
- package/dist/delivery/DeliveryAck.js +72 -0
- package/dist/delivery/DeliveryAck.js.map +1 -0
- package/dist/delivery/DeliveryDispatcher.js +1 -1
- package/dist/delivery/DeliveryDispatcher.js.map +1 -1
- package/dist/delivery/DeliveryService.d.ts +74 -0
- package/dist/delivery/DeliveryService.d.ts.map +1 -0
- package/dist/delivery/DeliveryService.js +207 -0
- package/dist/delivery/DeliveryService.js.map +1 -0
- package/dist/delivery/HttpMultipartDelivery.d.ts +10 -1
- package/dist/delivery/HttpMultipartDelivery.d.ts.map +1 -1
- package/dist/delivery/HttpMultipartDelivery.js +40 -65
- package/dist/delivery/HttpMultipartDelivery.js.map +1 -1
- package/dist/delivery/LegacyOutboxMigration.d.ts +21 -0
- package/dist/delivery/LegacyOutboxMigration.d.ts.map +1 -0
- package/dist/delivery/LegacyOutboxMigration.js +125 -0
- package/dist/delivery/LegacyOutboxMigration.js.map +1 -0
- package/dist/delivery/OutboxWorker.d.ts +69 -0
- package/dist/delivery/OutboxWorker.d.ts.map +1 -0
- package/dist/delivery/OutboxWorker.js +194 -0
- package/dist/delivery/OutboxWorker.js.map +1 -0
- package/dist/delivery/types.d.ts +11 -0
- package/dist/delivery/types.d.ts.map +1 -1
- package/dist/download/DownloadManager.d.ts +17 -12
- package/dist/download/DownloadManager.d.ts.map +1 -1
- package/dist/download/DownloadManager.js +31 -53
- package/dist/download/DownloadManager.js.map +1 -1
- package/dist/download/NovelDownloader.d.ts +3 -1
- package/dist/download/NovelDownloader.d.ts.map +1 -1
- package/dist/download/NovelDownloader.js +30 -2
- package/dist/download/NovelDownloader.js.map +1 -1
- package/dist/download/handlers/IllustrationTargetHandler.d.ts +18 -8
- package/dist/download/handlers/IllustrationTargetHandler.d.ts.map +1 -1
- package/dist/download/handlers/IllustrationTargetHandler.js +100 -74
- package/dist/download/handlers/IllustrationTargetHandler.js.map +1 -1
- package/dist/download/handlers/NovelTargetHandler.d.ts +8 -8
- package/dist/download/handlers/NovelTargetHandler.d.ts.map +1 -1
- package/dist/download/handlers/NovelTargetHandler.js +64 -83
- package/dist/download/handlers/NovelTargetHandler.js.map +1 -1
- package/dist/download/plan/DownloadPlanner.d.ts +6 -1
- package/dist/download/plan/DownloadPlanner.d.ts.map +1 -1
- package/dist/download/plan/DownloadPlanner.js +28 -5
- package/dist/download/plan/DownloadPlanner.js.map +1 -1
- package/dist/notification/NotificationPolicy.d.ts +38 -0
- package/dist/notification/NotificationPolicy.d.ts.map +1 -0
- package/dist/notification/NotificationPolicy.js +89 -0
- package/dist/notification/NotificationPolicy.js.map +1 -0
- package/dist/package.json +1 -1
- package/dist/pixiv/PixivClient.d.ts +4 -0
- package/dist/pixiv/PixivClient.d.ts.map +1 -1
- package/dist/pixiv/PixivClient.js +15 -2
- package/dist/pixiv/PixivClient.js.map +1 -1
- package/dist/pixiv/RateLimitCoordinator.d.ts +30 -0
- package/dist/pixiv/RateLimitCoordinator.d.ts.map +1 -0
- package/dist/pixiv/RateLimitCoordinator.js +66 -0
- package/dist/pixiv/RateLimitCoordinator.js.map +1 -0
- package/dist/pixiv/client/PixivApiCore.d.ts +5 -0
- package/dist/pixiv/client/PixivApiCore.d.ts.map +1 -1
- package/dist/pixiv/client/PixivApiCore.js +31 -9
- package/dist/pixiv/client/PixivApiCore.js.map +1 -1
- package/dist/scheduler/ScheduleTriggerServer.d.ts +7 -0
- package/dist/scheduler/ScheduleTriggerServer.d.ts.map +1 -1
- package/dist/scheduler/ScheduleTriggerServer.js +17 -0
- package/dist/scheduler/ScheduleTriggerServer.js.map +1 -1
- package/dist/scheduler/SlotCoordinator.d.ts +15 -0
- package/dist/scheduler/SlotCoordinator.d.ts.map +1 -1
- package/dist/scheduler/SlotCoordinator.js +74 -0
- package/dist/scheduler/SlotCoordinator.js.map +1 -1
- package/dist/scheduler/SlotStateMachine.d.ts +32 -0
- package/dist/scheduler/SlotStateMachine.d.ts.map +1 -0
- package/dist/scheduler/SlotStateMachine.js +65 -0
- package/dist/scheduler/SlotStateMachine.js.map +1 -0
- package/dist/scheduler/TargetOutcome.d.ts +63 -0
- package/dist/scheduler/TargetOutcome.d.ts.map +1 -0
- package/dist/scheduler/TargetOutcome.js +28 -0
- package/dist/scheduler/TargetOutcome.js.map +1 -0
- package/dist/storage/Database.d.ts +16 -0
- package/dist/storage/Database.d.ts.map +1 -1
- package/dist/storage/Database.js +29 -0
- package/dist/storage/Database.js.map +1 -1
- package/dist/storage/DatabaseMigration.d.ts.map +1 -1
- package/dist/storage/DatabaseMigration.js +66 -0
- package/dist/storage/DatabaseMigration.js.map +1 -1
- package/dist/storage/repositories/DeliveryRepository.d.ts +73 -0
- package/dist/storage/repositories/DeliveryRepository.d.ts.map +1 -0
- package/dist/storage/repositories/DeliveryRepository.js +148 -0
- package/dist/storage/repositories/DeliveryRepository.js.map +1 -0
- package/dist/storage/repositories/MetadataRepository.d.ts +27 -0
- package/dist/storage/repositories/MetadataRepository.d.ts.map +1 -0
- package/dist/storage/repositories/MetadataRepository.js +58 -0
- package/dist/storage/repositories/MetadataRepository.js.map +1 -0
- package/dist/storage/repositories/OutboxRepository.d.ts +70 -0
- package/dist/storage/repositories/OutboxRepository.d.ts.map +1 -0
- package/dist/storage/repositories/OutboxRepository.js +187 -0
- package/dist/storage/repositories/OutboxRepository.js.map +1 -0
- package/dist/storage/repositories/SlotRepository.d.ts +26 -1
- package/dist/storage/repositories/SlotRepository.d.ts.map +1 -1
- package/dist/storage/repositories/SlotRepository.js +76 -2
- package/dist/storage/repositories/SlotRepository.js.map +1 -1
- package/dist/webui/package.json +1 -1
- package/package.json +1 -1
- package/dist/delivery/DeliveryOutbox.d.ts +0 -43
- package/dist/delivery/DeliveryOutbox.d.ts.map +0 -1
- package/dist/delivery/DeliveryOutbox.js +0 -293
- 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,
|
|
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
|
-
|
|
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;
|
|
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
|
|
93
|
-
const
|
|
94
|
-
|
|
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
|
-
|
|
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
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -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"}
|