@shipfox/api-logs 2.0.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/.turbo/turbo-build.log +2 -0
- package/.turbo/turbo-type$colon$emit.log +1 -0
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +179 -0
- package/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/api/object-storage.d.ts +69 -0
- package/dist/api/object-storage.d.ts.map +1 -0
- package/dist/api/object-storage.js +199 -0
- package/dist/api/object-storage.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +108 -0
- package/dist/config.js.map +1 -0
- package/dist/core/append-logs.d.ts +28 -0
- package/dist/core/append-logs.d.ts.map +1 -0
- package/dist/core/append-logs.js +318 -0
- package/dist/core/append-logs.js.map +1 -0
- package/dist/core/budget.d.ts +12 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +9 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/close-stream.d.ts +27 -0
- package/dist/core/close-stream.d.ts.map +1 -0
- package/dist/core/close-stream.js +59 -0
- package/dist/core/close-stream.js.map +1 -0
- package/dist/core/compaction.d.ts +28 -0
- package/dist/core/compaction.d.ts.map +1 -0
- package/dist/core/compaction.js +49 -0
- package/dist/core/compaction.js.map +1 -0
- package/dist/core/entities/attempt-stream.d.ts +37 -0
- package/dist/core/entities/attempt-stream.d.ts.map +1 -0
- package/dist/core/entities/attempt-stream.js +15 -0
- package/dist/core/entities/attempt-stream.js.map +1 -0
- package/dist/core/entities/job-accounting.d.ts +12 -0
- package/dist/core/entities/job-accounting.d.ts.map +1 -0
- package/dist/core/entities/job-accounting.js +6 -0
- package/dist/core/entities/job-accounting.js.map +1 -0
- package/dist/core/entities/log-object.d.ts +13 -0
- package/dist/core/entities/log-object.d.ts.map +1 -0
- package/dist/core/entities/log-object.js +9 -0
- package/dist/core/entities/log-object.js.map +1 -0
- package/dist/core/errors.d.ts +26 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +31 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/finalize-attempt-stream.d.ts +22 -0
- package/dist/core/finalize-attempt-stream.d.ts.map +1 -0
- package/dist/core/finalize-attempt-stream.js +48 -0
- package/dist/core/finalize-attempt-stream.js.map +1 -0
- package/dist/core/read-logs.d.ts +33 -0
- package/dist/core/read-logs.d.ts.map +1 -0
- package/dist/core/read-logs.js +49 -0
- package/dist/core/read-logs.js.map +1 -0
- package/dist/core/reap-stale-open-streams.d.ts +27 -0
- package/dist/core/reap-stale-open-streams.d.ts.map +1 -0
- package/dist/core/reap-stale-open-streams.js +50 -0
- package/dist/core/reap-stale-open-streams.js.map +1 -0
- package/dist/core/retention.d.ts +32 -0
- package/dist/core/retention.d.ts.map +1 -0
- package/dist/core/retention.js +148 -0
- package/dist/core/retention.js.map +1 -0
- package/dist/core/session/claude/rows.d.ts +6 -0
- package/dist/core/session/claude/rows.d.ts.map +1 -0
- package/dist/core/session/claude/rows.js +145 -0
- package/dist/core/session/claude/rows.js.map +1 -0
- package/dist/core/session/claude-parser.d.ts +4 -0
- package/dist/core/session/claude-parser.d.ts.map +1 -0
- package/dist/core/session/claude-parser.js +42 -0
- package/dist/core/session/claude-parser.js.map +1 -0
- package/dist/core/session/entry-schema.d.ts +51 -0
- package/dist/core/session/entry-schema.d.ts.map +1 -0
- package/dist/core/session/entry-schema.js +61 -0
- package/dist/core/session/entry-schema.js.map +1 -0
- package/dist/core/session/object.d.ts +12 -0
- package/dist/core/session/object.d.ts.map +1 -0
- package/dist/core/session/object.js +50 -0
- package/dist/core/session/object.js.map +1 -0
- package/dist/core/session/parse-session.d.ts +5 -0
- package/dist/core/session/parse-session.d.ts.map +1 -0
- package/dist/core/session/parse-session.js +18 -0
- package/dist/core/session/parse-session.js.map +1 -0
- package/dist/core/session/pi/message-rows.d.ts +4 -0
- package/dist/core/session/pi/message-rows.d.ts.map +1 -0
- package/dist/core/session/pi/message-rows.js +113 -0
- package/dist/core/session/pi/message-rows.js.map +1 -0
- package/dist/core/session/pi/metadata.d.ts +18 -0
- package/dist/core/session/pi/metadata.d.ts.map +1 -0
- package/dist/core/session/pi/metadata.js +120 -0
- package/dist/core/session/pi/metadata.js.map +1 -0
- package/dist/core/session/pi/text.d.ts +12 -0
- package/dist/core/session/pi/text.d.ts.map +1 -0
- package/dist/core/session/pi/text.js +59 -0
- package/dist/core/session/pi/text.js.map +1 -0
- package/dist/core/session/pi-parser.d.ts +5 -0
- package/dist/core/session/pi-parser.d.ts.map +1 -0
- package/dist/core/session/pi-parser.js +73 -0
- package/dist/core/session/pi-parser.js.map +1 -0
- package/dist/core/session/rows.d.ts +7 -0
- package/dist/core/session/rows.d.ts.map +1 -0
- package/dist/core/session/rows.js +39 -0
- package/dist/core/session/rows.js.map +1 -0
- package/dist/core/session/session-record.d.ts +5 -0
- package/dist/core/session/session-record.d.ts.map +1 -0
- package/dist/core/session/session-record.js +3 -0
- package/dist/core/session/session-record.js.map +1 -0
- package/dist/db/accounting.d.ts +33 -0
- package/dist/db/accounting.d.ts.map +1 -0
- package/dist/db/accounting.js +52 -0
- package/dist/db/accounting.js.map +1 -0
- package/dist/db/chunks.d.ts +62 -0
- package/dist/db/chunks.d.ts.map +1 -0
- package/dist/db/chunks.js +88 -0
- package/dist/db/chunks.js.map +1 -0
- package/dist/db/db.d.ts +752 -0
- package/dist/db/db.d.ts.map +1 -0
- package/dist/db/db.js +24 -0
- package/dist/db/db.js.map +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema/attempt-streams.d.ts +304 -0
- package/dist/db/schema/attempt-streams.d.ts.map +1 -0
- package/dist/db/schema/attempt-streams.js +100 -0
- package/dist/db/schema/attempt-streams.js.map +1 -0
- package/dist/db/schema/chunks.d.ts +166 -0
- package/dist/db/schema/chunks.d.ts.map +1 -0
- package/dist/db/schema/chunks.js +47 -0
- package/dist/db/schema/chunks.js.map +1 -0
- package/dist/db/schema/common.d.ts +29 -0
- package/dist/db/schema/common.d.ts.map +1 -0
- package/dist/db/schema/common.js +11 -0
- package/dist/db/schema/common.js.map +1 -0
- package/dist/db/schema/job-accounting.d.ts +143 -0
- package/dist/db/schema/job-accounting.d.ts.map +1 -0
- package/dist/db/schema/job-accounting.js +43 -0
- package/dist/db/schema/job-accounting.js.map +1 -0
- package/dist/db/schema/outbox.d.ts +195 -0
- package/dist/db/schema/outbox.d.ts.map +1 -0
- package/dist/db/schema/outbox.js +5 -0
- package/dist/db/schema/outbox.js.map +1 -0
- package/dist/db/streams.d.ts +141 -0
- package/dist/db/streams.d.ts.map +1 -0
- package/dist/db/streams.js +197 -0
- package/dist/db/streams.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +3 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/instance.d.ts +14 -0
- package/dist/metrics/instance.d.ts.map +1 -0
- package/dist/metrics/instance.js +16 -0
- package/dist/metrics/instance.js.map +1 -0
- package/dist/metrics/service.d.ts +2 -0
- package/dist/metrics/service.d.ts.map +1 -0
- package/dist/metrics/service.js +20 -0
- package/dist/metrics/service.js.map +1 -0
- package/dist/presentation/dto/read-logs.d.ts +4 -0
- package/dist/presentation/dto/read-logs.d.ts.map +1 -0
- package/dist/presentation/dto/read-logs.js +22 -0
- package/dist/presentation/dto/read-logs.js.map +1 -0
- package/dist/presentation/routes/append-logs.d.ts +2 -0
- package/dist/presentation/routes/append-logs.d.ts.map +1 -0
- package/dist/presentation/routes/append-logs.js +71 -0
- package/dist/presentation/routes/append-logs.js.map +1 -0
- package/dist/presentation/routes/index.d.ts +3 -0
- package/dist/presentation/routes/index.d.ts.map +1 -0
- package/dist/presentation/routes/index.js +32 -0
- package/dist/presentation/routes/index.js.map +1 -0
- package/dist/presentation/routes/read-logs.d.ts +2 -0
- package/dist/presentation/routes/read-logs.d.ts.map +1 -0
- package/dist/presentation/routes/read-logs.js +41 -0
- package/dist/presentation/routes/read-logs.js.map +1 -0
- package/dist/presentation/subscribers/on-job-terminated.d.ts +8 -0
- package/dist/presentation/subscribers/on-job-terminated.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-job-terminated.js +32 -0
- package/dist/presentation/subscribers/on-job-terminated.js.map +1 -0
- package/dist/presentation/subscribers/on-log-stream-closed.d.ts +9 -0
- package/dist/presentation/subscribers/on-log-stream-closed.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-log-stream-closed.js +31 -0
- package/dist/presentation/subscribers/on-log-stream-closed.js.map +1 -0
- package/dist/presentation/subscribers/on-step-attempt-terminated.d.ts +3 -0
- package/dist/presentation/subscribers/on-step-attempt-terminated.d.ts.map +1 -0
- package/dist/presentation/subscribers/on-step-attempt-terminated.js +14 -0
- package/dist/presentation/subscribers/on-step-attempt-terminated.js.map +1 -0
- package/dist/temporal/activities/close-abandoned-streams.d.ts +12 -0
- package/dist/temporal/activities/close-abandoned-streams.d.ts.map +1 -0
- package/dist/temporal/activities/close-abandoned-streams.js +33 -0
- package/dist/temporal/activities/close-abandoned-streams.js.map +1 -0
- package/dist/temporal/activities/compact-stream.d.ts +33 -0
- package/dist/temporal/activities/compact-stream.d.ts.map +1 -0
- package/dist/temporal/activities/compact-stream.js +95 -0
- package/dist/temporal/activities/compact-stream.js.map +1 -0
- package/dist/temporal/activities/compaction-reconcile.d.ts +16 -0
- package/dist/temporal/activities/compaction-reconcile.d.ts.map +1 -0
- package/dist/temporal/activities/compaction-reconcile.js +52 -0
- package/dist/temporal/activities/compaction-reconcile.js.map +1 -0
- package/dist/temporal/activities/index.d.ts +14 -0
- package/dist/temporal/activities/index.d.ts.map +1 -0
- package/dist/temporal/activities/index.js +16 -0
- package/dist/temporal/activities/index.js.map +1 -0
- package/dist/temporal/activities/reap-stale-open-streams.d.ts +4 -0
- package/dist/temporal/activities/reap-stale-open-streams.d.ts.map +1 -0
- package/dist/temporal/activities/reap-stale-open-streams.js +11 -0
- package/dist/temporal/activities/reap-stale-open-streams.js.map +1 -0
- package/dist/temporal/activities/retention-sweep.d.ts +7 -0
- package/dist/temporal/activities/retention-sweep.d.ts.map +1 -0
- package/dist/temporal/activities/retention-sweep.js +19 -0
- package/dist/temporal/activities/retention-sweep.js.map +1 -0
- package/dist/temporal/constants.d.ts +7 -0
- package/dist/temporal/constants.d.ts.map +1 -0
- package/dist/temporal/constants.js +13 -0
- package/dist/temporal/constants.js.map +1 -0
- package/dist/temporal/workflows/close-abandoned-streams.d.ts +11 -0
- package/dist/temporal/workflows/close-abandoned-streams.d.ts.map +1 -0
- package/dist/temporal/workflows/close-abandoned-streams.js +22 -0
- package/dist/temporal/workflows/close-abandoned-streams.js.map +1 -0
- package/dist/temporal/workflows/compact-stream.d.ts +6 -0
- package/dist/temporal/workflows/compact-stream.d.ts.map +1 -0
- package/dist/temporal/workflows/compact-stream.js +25 -0
- package/dist/temporal/workflows/compact-stream.js.map +1 -0
- package/dist/temporal/workflows/compaction-reconcile-cron.d.ts +3 -0
- package/dist/temporal/workflows/compaction-reconcile-cron.d.ts.map +1 -0
- package/dist/temporal/workflows/compaction-reconcile-cron.js +15 -0
- package/dist/temporal/workflows/compaction-reconcile-cron.js.map +1 -0
- package/dist/temporal/workflows/index.d.ts +6 -0
- package/dist/temporal/workflows/index.d.ts.map +1 -0
- package/dist/temporal/workflows/index.js +7 -0
- package/dist/temporal/workflows/index.js.map +1 -0
- package/dist/temporal/workflows/reap-stale-open-streams-cron.d.ts +2 -0
- package/dist/temporal/workflows/reap-stale-open-streams-cron.d.ts.map +1 -0
- package/dist/temporal/workflows/reap-stale-open-streams-cron.js +15 -0
- package/dist/temporal/workflows/reap-stale-open-streams-cron.js.map +1 -0
- package/dist/temporal/workflows/retention-sweep-cron.d.ts +2 -0
- package/dist/temporal/workflows/retention-sweep-cron.d.ts.map +1 -0
- package/dist/temporal/workflows/retention-sweep-cron.js +23 -0
- package/dist/temporal/workflows/retention-sweep-cron.js.map +1 -0
- package/dist/tsconfig.test.tsbuildinfo +1 -0
- package/drizzle/0000_initial.sql +65 -0
- package/drizzle/meta/0000_snapshot.json +529 -0
- package/drizzle/meta/_journal.json +13 -0
- package/drizzle.config.ts +7 -0
- package/package.json +84 -0
- package/src/api/object-storage-credentials.test.ts +70 -0
- package/src/api/object-storage.test.ts +64 -0
- package/src/api/object-storage.ts +226 -0
- package/src/config.test.ts +118 -0
- package/src/config.ts +130 -0
- package/src/core/append-logs.test.ts +563 -0
- package/src/core/append-logs.ts +384 -0
- package/src/core/budget.test.ts +30 -0
- package/src/core/budget.ts +19 -0
- package/src/core/close-stream.ts +72 -0
- package/src/core/compaction.ts +68 -0
- package/src/core/entities/attempt-stream.ts +38 -0
- package/src/core/entities/job-accounting.ts +11 -0
- package/src/core/entities/log-object.test.ts +25 -0
- package/src/core/entities/log-object.ts +18 -0
- package/src/core/errors.ts +37 -0
- package/src/core/finalize-attempt-stream.test.ts +90 -0
- package/src/core/finalize-attempt-stream.ts +59 -0
- package/src/core/read-logs.ts +77 -0
- package/src/core/reap-stale-open-streams.test.ts +137 -0
- package/src/core/reap-stale-open-streams.ts +60 -0
- package/src/core/retention.test.ts +388 -0
- package/src/core/retention.ts +184 -0
- package/src/core/session/claude/rows.ts +223 -0
- package/src/core/session/claude-parser.test.ts +199 -0
- package/src/core/session/claude-parser.ts +38 -0
- package/src/core/session/entry-schema.ts +82 -0
- package/src/core/session/object.ts +57 -0
- package/src/core/session/parse-session.ts +23 -0
- package/src/core/session/pi/message-rows.ts +211 -0
- package/src/core/session/pi/metadata.ts +148 -0
- package/src/core/session/pi/text.ts +83 -0
- package/src/core/session/pi-parser.test.ts +451 -0
- package/src/core/session/pi-parser.ts +107 -0
- package/src/core/session/rows.ts +38 -0
- package/src/core/session/session-record.ts +4 -0
- package/src/db/accounting.ts +81 -0
- package/src/db/chunks.ts +143 -0
- package/src/db/db.ts +22 -0
- package/src/db/index.ts +4 -0
- package/src/db/schema/attempt-streams.ts +106 -0
- package/src/db/schema/chunks.ts +43 -0
- package/src/db/schema/common.ts +12 -0
- package/src/db/schema/job-accounting.ts +38 -0
- package/src/db/schema/outbox.ts +4 -0
- package/src/db/streams.test.ts +47 -0
- package/src/db/streams.ts +368 -0
- package/src/index.ts +77 -0
- package/src/metrics/index.ts +1 -0
- package/src/metrics/instance.ts +33 -0
- package/src/metrics/service.ts +23 -0
- package/src/presentation/dto/read-logs.ts +24 -0
- package/src/presentation/routes/append-logs.test.ts +279 -0
- package/src/presentation/routes/append-logs.ts +66 -0
- package/src/presentation/routes/index.ts +27 -0
- package/src/presentation/routes/read-logs.test.ts +504 -0
- package/src/presentation/routes/read-logs.ts +38 -0
- package/src/presentation/subscribers/on-job-terminated.test.ts +64 -0
- package/src/presentation/subscribers/on-job-terminated.ts +26 -0
- package/src/presentation/subscribers/on-log-stream-closed.test.ts +63 -0
- package/src/presentation/subscribers/on-log-stream-closed.ts +26 -0
- package/src/presentation/subscribers/on-step-attempt-terminated.ts +16 -0
- package/src/temporal/activities/close-abandoned-streams.test.ts +84 -0
- package/src/temporal/activities/close-abandoned-streams.ts +30 -0
- package/src/temporal/activities/compact-stream.test.ts +221 -0
- package/src/temporal/activities/compact-stream.ts +123 -0
- package/src/temporal/activities/compaction-reconcile.test.ts +143 -0
- package/src/temporal/activities/compaction-reconcile.ts +48 -0
- package/src/temporal/activities/index.ts +15 -0
- package/src/temporal/activities/reap-stale-open-streams.test.ts +48 -0
- package/src/temporal/activities/reap-stale-open-streams.ts +14 -0
- package/src/temporal/activities/retention-sweep.test.ts +38 -0
- package/src/temporal/activities/retention-sweep.ts +23 -0
- package/src/temporal/constants.ts +14 -0
- package/src/temporal/workflows/close-abandoned-streams.ts +25 -0
- package/src/temporal/workflows/compact-stream.ts +26 -0
- package/src/temporal/workflows/compaction-reconcile-cron.ts +14 -0
- package/src/temporal/workflows/index.ts +5 -0
- package/src/temporal/workflows/reap-stale-open-streams-cron.ts +13 -0
- package/src/temporal/workflows/retention-sweep-cron.ts +23 -0
- package/test/env.ts +37 -0
- package/test/factories/job-accounting.ts +38 -0
- package/test/fixtures/closed-stream.ts +53 -0
- package/test/fixtures/lease-token.ts +42 -0
- package/test/fixtures/ndjson.ts +34 -0
- package/test/globalSetup.ts +44 -0
- package/test/index.ts +9 -0
- package/test/queries.ts +54 -0
- package/test/setup.ts +17 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +3 -0
- package/tsconfig.test.json +8 -0
- package/vitest.config.ts +13 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const LOGS_LIFECYCLE_TASK_QUEUE = 'logs-lifecycle';
|
|
2
|
+
// Compaction uploads can run for minutes; keeping them off the lifecycle queue stops a
|
|
3
|
+
// burst of large compactions from starving the short, time-sensitive close-abandoned sweep.
|
|
4
|
+
export const LOGS_COMPACTION_TASK_QUEUE = 'logs-compaction';
|
|
5
|
+
// The wall-clock budget is the real sweep bound; Temporal's timeout does not stop JS already
|
|
6
|
+
// running in the worker.
|
|
7
|
+
export const RETENTION_BATCH_LIMIT = 200;
|
|
8
|
+
export const RETENTION_TIME_BUDGET_MS = 4 * 60_000;
|
|
9
|
+
export const RETENTION_MAX_ITERATIONS = 1_000;
|
|
10
|
+
// Bounded per tick; remaining stale open streams are picked up on the next cron run.
|
|
11
|
+
export const REAP_BATCH_LIMIT = 100;
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/temporal/constants.ts"],"sourcesContent":["export const LOGS_LIFECYCLE_TASK_QUEUE = 'logs-lifecycle';\n\n// Compaction uploads can run for minutes; keeping them off the lifecycle queue stops a\n// burst of large compactions from starving the short, time-sensitive close-abandoned sweep.\nexport const LOGS_COMPACTION_TASK_QUEUE = 'logs-compaction';\n\n// The wall-clock budget is the real sweep bound; Temporal's timeout does not stop JS already\n// running in the worker.\nexport const RETENTION_BATCH_LIMIT = 200;\nexport const RETENTION_TIME_BUDGET_MS = 4 * 60_000;\nexport const RETENTION_MAX_ITERATIONS = 1_000;\n\n// Bounded per tick; remaining stale open streams are picked up on the next cron run.\nexport const REAP_BATCH_LIMIT = 100;\n"],"names":["LOGS_LIFECYCLE_TASK_QUEUE","LOGS_COMPACTION_TASK_QUEUE","RETENTION_BATCH_LIMIT","RETENTION_TIME_BUDGET_MS","RETENTION_MAX_ITERATIONS","REAP_BATCH_LIMIT"],"mappings":"AAAA,OAAO,MAAMA,4BAA4B,iBAAiB;AAE1D,uFAAuF;AACvF,4FAA4F;AAC5F,OAAO,MAAMC,6BAA6B,kBAAkB;AAE5D,6FAA6F;AAC7F,yBAAyB;AACzB,OAAO,MAAMC,wBAAwB,IAAI;AACzC,OAAO,MAAMC,2BAA2B,IAAI,OAAO;AACnD,OAAO,MAAMC,2BAA2B,MAAM;AAE9C,qFAAqF;AACrF,OAAO,MAAMC,mBAAmB,IAAI"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface CloseAbandonedStreamsInput {
|
|
2
|
+
jobId: string;
|
|
3
|
+
graceSeconds: number;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Started by the `WORKFLOWS_JOB_TERMINATED` subscriber, deduped per job. Waits out
|
|
7
|
+
* the grace period (so a last in-flight append can land and the runner's own
|
|
8
|
+
* declared close can win), then force-closes whatever is still open.
|
|
9
|
+
*/
|
|
10
|
+
export declare function closeAbandonedStreams(input: CloseAbandonedStreamsInput): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=close-abandoned-streams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close-abandoned-streams.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/close-abandoned-streams.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { log, proxyActivities, sleep } from '@temporalio/workflow';
|
|
2
|
+
const { closeAbandonedStreamsActivity } = proxyActivities({
|
|
3
|
+
startToCloseTimeout: '5 minutes'
|
|
4
|
+
});
|
|
5
|
+
/**
|
|
6
|
+
* Started by the `WORKFLOWS_JOB_TERMINATED` subscriber, deduped per job. Waits out
|
|
7
|
+
* the grace period (so a last in-flight append can land and the runner's own
|
|
8
|
+
* declared close can win), then force-closes whatever is still open.
|
|
9
|
+
*/ export async function closeAbandonedStreams(input) {
|
|
10
|
+
await sleep(input.graceSeconds * 1000);
|
|
11
|
+
const { closed } = await closeAbandonedStreamsActivity({
|
|
12
|
+
jobId: input.jobId
|
|
13
|
+
});
|
|
14
|
+
if (closed > 0) {
|
|
15
|
+
log.info('Force-closed abandoned log streams', {
|
|
16
|
+
jobId: input.jobId,
|
|
17
|
+
closed
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=close-abandoned-streams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/close-abandoned-streams.ts"],"sourcesContent":["import {log, proxyActivities, sleep} from '@temporalio/workflow';\nimport type {createLogsActivities} from '../activities/index.js';\n\nconst {closeAbandonedStreamsActivity} = proxyActivities<ReturnType<typeof createLogsActivities>>({\n startToCloseTimeout: '5 minutes',\n});\n\nexport interface CloseAbandonedStreamsInput {\n jobId: string;\n graceSeconds: number;\n}\n\n/**\n * Started by the `WORKFLOWS_JOB_TERMINATED` subscriber, deduped per job. Waits out\n * the grace period (so a last in-flight append can land and the runner's own\n * declared close can win), then force-closes whatever is still open.\n */\nexport async function closeAbandonedStreams(input: CloseAbandonedStreamsInput): Promise<void> {\n await sleep(input.graceSeconds * 1000);\n\n const {closed} = await closeAbandonedStreamsActivity({jobId: input.jobId});\n if (closed > 0) {\n log.info('Force-closed abandoned log streams', {jobId: input.jobId, closed});\n }\n}\n"],"names":["log","proxyActivities","sleep","closeAbandonedStreamsActivity","startToCloseTimeout","closeAbandonedStreams","input","graceSeconds","closed","jobId","info"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,eAAe,EAAEC,KAAK,QAAO,uBAAuB;AAGjE,MAAM,EAACC,6BAA6B,EAAC,GAAGF,gBAAyD;IAC/FG,qBAAqB;AACvB;AAOA;;;;CAIC,GACD,OAAO,eAAeC,sBAAsBC,KAAiC;IAC3E,MAAMJ,MAAMI,MAAMC,YAAY,GAAG;IAEjC,MAAM,EAACC,MAAM,EAAC,GAAG,MAAML,8BAA8B;QAACM,OAAOH,MAAMG,KAAK;IAAA;IACxE,IAAID,SAAS,GAAG;QACdR,IAAIU,IAAI,CAAC,sCAAsC;YAACD,OAAOH,MAAMG,KAAK;YAAED;QAAM;IAC5E;AACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface CompactStreamInput {
|
|
2
|
+
streamId: string;
|
|
3
|
+
}
|
|
4
|
+
/** Started per closed stream (deduped by `logs-compact:{streamId}`) by the closed-event subscriber and the reconcile cron. */
|
|
5
|
+
export declare function compactStream(input: CompactStreamInput): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=compact-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-stream.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/compact-stream.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,8HAA8H;AAC9H,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { log, proxyActivities } from '@temporalio/workflow';
|
|
2
|
+
// Bounded generous retry (not unlimited): a never-finishing RUNNING workflow would reject
|
|
3
|
+
// the reconcile cron's restart of the same workflow id. After the attempts are spent the
|
|
4
|
+
// run fails and closes, so the cron can re-drive it.
|
|
5
|
+
const { compactStreamActivity } = proxyActivities({
|
|
6
|
+
startToCloseTimeout: '1 hour',
|
|
7
|
+
heartbeatTimeout: '2 minutes',
|
|
8
|
+
retry: {
|
|
9
|
+
initialInterval: '10 seconds',
|
|
10
|
+
backoffCoefficient: 2,
|
|
11
|
+
maximumInterval: '5 minutes',
|
|
12
|
+
maximumAttempts: 12
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
/** Started per closed stream (deduped by `logs-compact:{streamId}`) by the closed-event subscriber and the reconcile cron. */ export async function compactStream(input) {
|
|
16
|
+
const result = await compactStreamActivity({
|
|
17
|
+
streamId: input.streamId
|
|
18
|
+
});
|
|
19
|
+
log.info('Compacted log stream', {
|
|
20
|
+
streamId: input.streamId,
|
|
21
|
+
...result
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=compact-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/compact-stream.ts"],"sourcesContent":["import {log, proxyActivities} from '@temporalio/workflow';\nimport type {createLogsActivities} from '../activities/index.js';\n\n// Bounded generous retry (not unlimited): a never-finishing RUNNING workflow would reject\n// the reconcile cron's restart of the same workflow id. After the attempts are spent the\n// run fails and closes, so the cron can re-drive it.\nconst {compactStreamActivity} = proxyActivities<ReturnType<typeof createLogsActivities>>({\n startToCloseTimeout: '1 hour',\n heartbeatTimeout: '2 minutes',\n retry: {\n initialInterval: '10 seconds',\n backoffCoefficient: 2,\n maximumInterval: '5 minutes',\n maximumAttempts: 12,\n },\n});\n\nexport interface CompactStreamInput {\n streamId: string;\n}\n\n/** Started per closed stream (deduped by `logs-compact:{streamId}`) by the closed-event subscriber and the reconcile cron. */\nexport async function compactStream(input: CompactStreamInput): Promise<void> {\n const result = await compactStreamActivity({streamId: input.streamId});\n log.info('Compacted log stream', {streamId: input.streamId, ...result});\n}\n"],"names":["log","proxyActivities","compactStreamActivity","startToCloseTimeout","heartbeatTimeout","retry","initialInterval","backoffCoefficient","maximumInterval","maximumAttempts","compactStream","input","result","streamId","info"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,eAAe,QAAO,uBAAuB;AAG1D,0FAA0F;AAC1F,yFAAyF;AACzF,qDAAqD;AACrD,MAAM,EAACC,qBAAqB,EAAC,GAAGD,gBAAyD;IACvFE,qBAAqB;IACrBC,kBAAkB;IAClBC,OAAO;QACLC,iBAAiB;QACjBC,oBAAoB;QACpBC,iBAAiB;QACjBC,iBAAiB;IACnB;AACF;AAMA,4HAA4H,GAC5H,OAAO,eAAeC,cAAcC,KAAyB;IAC3D,MAAMC,SAAS,MAAMV,sBAAsB;QAACW,UAAUF,MAAME,QAAQ;IAAA;IACpEb,IAAIc,IAAI,CAAC,wBAAwB;QAACD,UAAUF,MAAME,QAAQ;QAAE,GAAGD,MAAM;IAAA;AACvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction-reconcile-cron.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/compaction-reconcile-cron.ts"],"names":[],"mappings":"AAOA,kHAAkH;AAClH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { log, proxyActivities } from '@temporalio/workflow';
|
|
2
|
+
const { compactionReconcileActivity } = proxyActivities({
|
|
3
|
+
startToCloseTimeout: '5 minutes'
|
|
4
|
+
});
|
|
5
|
+
/** Cron-scheduled backstop that re-drives closed streams whose compaction never started or permanently failed. */ export async function compactionReconcileCron() {
|
|
6
|
+
const { restarted, failed } = await compactionReconcileActivity();
|
|
7
|
+
if (restarted > 0 || failed > 0) {
|
|
8
|
+
log.info('Re-drove stale uncompacted log streams', {
|
|
9
|
+
restarted,
|
|
10
|
+
failed
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=compaction-reconcile-cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/compaction-reconcile-cron.ts"],"sourcesContent":["import {log, proxyActivities} from '@temporalio/workflow';\nimport type {createLogsActivities} from '../activities/index.js';\n\nconst {compactionReconcileActivity} = proxyActivities<ReturnType<typeof createLogsActivities>>({\n startToCloseTimeout: '5 minutes',\n});\n\n/** Cron-scheduled backstop that re-drives closed streams whose compaction never started or permanently failed. */\nexport async function compactionReconcileCron(): Promise<void> {\n const {restarted, failed} = await compactionReconcileActivity();\n if (restarted > 0 || failed > 0) {\n log.info('Re-drove stale uncompacted log streams', {restarted, failed});\n }\n}\n"],"names":["log","proxyActivities","compactionReconcileActivity","startToCloseTimeout","compactionReconcileCron","restarted","failed","info"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,eAAe,QAAO,uBAAuB;AAG1D,MAAM,EAACC,2BAA2B,EAAC,GAAGD,gBAAyD;IAC7FE,qBAAqB;AACvB;AAEA,gHAAgH,GAChH,OAAO,eAAeC;IACpB,MAAM,EAACC,SAAS,EAAEC,MAAM,EAAC,GAAG,MAAMJ;IAClC,IAAIG,YAAY,KAAKC,SAAS,GAAG;QAC/BN,IAAIO,IAAI,CAAC,0CAA0C;YAACF;YAAWC;QAAM;IACvE;AACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { closeAbandonedStreams } from './close-abandoned-streams.js';
|
|
2
|
+
export { compactStream } from './compact-stream.js';
|
|
3
|
+
export { compactionReconcileCron } from './compaction-reconcile-cron.js';
|
|
4
|
+
export { reapStaleOpenStreamsCron } from './reap-stale-open-streams-cron.js';
|
|
5
|
+
export { retentionSweepCron } from './retention-sweep-cron.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,uBAAuB,EAAC,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { closeAbandonedStreams } from './close-abandoned-streams.js';
|
|
2
|
+
export { compactStream } from './compact-stream.js';
|
|
3
|
+
export { compactionReconcileCron } from './compaction-reconcile-cron.js';
|
|
4
|
+
export { reapStaleOpenStreamsCron } from './reap-stale-open-streams-cron.js';
|
|
5
|
+
export { retentionSweepCron } from './retention-sweep-cron.js';
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/index.ts"],"sourcesContent":["export {closeAbandonedStreams} from './close-abandoned-streams.js';\nexport {compactStream} from './compact-stream.js';\nexport {compactionReconcileCron} from './compaction-reconcile-cron.js';\nexport {reapStaleOpenStreamsCron} from './reap-stale-open-streams-cron.js';\nexport {retentionSweepCron} from './retention-sweep-cron.js';\n"],"names":["closeAbandonedStreams","compactStream","compactionReconcileCron","reapStaleOpenStreamsCron","retentionSweepCron"],"mappings":"AAAA,SAAQA,qBAAqB,QAAO,+BAA+B;AACnE,SAAQC,aAAa,QAAO,sBAAsB;AAClD,SAAQC,uBAAuB,QAAO,iCAAiC;AACvE,SAAQC,wBAAwB,QAAO,oCAAoC;AAC3E,SAAQC,kBAAkB,QAAO,4BAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reap-stale-open-streams-cron.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/reap-stale-open-streams-cron.ts"],"names":[],"mappings":"AAOA,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { log, proxyActivities } from '@temporalio/workflow';
|
|
2
|
+
const { reapStaleOpenStreamsActivity } = proxyActivities({
|
|
3
|
+
startToCloseTimeout: '5 minutes'
|
|
4
|
+
});
|
|
5
|
+
export async function reapStaleOpenStreamsCron() {
|
|
6
|
+
const { reaped, failed } = await reapStaleOpenStreamsActivity();
|
|
7
|
+
if (reaped > 0 || failed > 0) {
|
|
8
|
+
log.info('Reaped stale open log streams', {
|
|
9
|
+
reaped,
|
|
10
|
+
failed
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=reap-stale-open-streams-cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/reap-stale-open-streams-cron.ts"],"sourcesContent":["import {log, proxyActivities} from '@temporalio/workflow';\nimport type {createLogsActivities} from '../activities/index.js';\n\nconst {reapStaleOpenStreamsActivity} = proxyActivities<ReturnType<typeof createLogsActivities>>({\n startToCloseTimeout: '5 minutes',\n});\n\nexport async function reapStaleOpenStreamsCron(): Promise<void> {\n const {reaped, failed} = await reapStaleOpenStreamsActivity();\n if (reaped > 0 || failed > 0) {\n log.info('Reaped stale open log streams', {reaped, failed});\n }\n}\n"],"names":["log","proxyActivities","reapStaleOpenStreamsActivity","startToCloseTimeout","reapStaleOpenStreamsCron","reaped","failed","info"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,eAAe,QAAO,uBAAuB;AAG1D,MAAM,EAACC,4BAA4B,EAAC,GAAGD,gBAAyD;IAC9FE,qBAAqB;AACvB;AAEA,OAAO,eAAeC;IACpB,MAAM,EAACC,MAAM,EAAEC,MAAM,EAAC,GAAG,MAAMJ;IAC/B,IAAIG,SAAS,KAAKC,SAAS,GAAG;QAC5BN,IAAIO,IAAI,CAAC,iCAAiC;YAACF;YAAQC;QAAM;IAC3D;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention-sweep-cron.d.ts","sourceRoot":"","sources":["../../../src/temporal/workflows/retention-sweep-cron.ts"],"names":[],"mappings":"AAUA,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYxD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { log, proxyActivities } from '@temporalio/workflow';
|
|
2
|
+
const { retentionSweepActivity } = proxyActivities({
|
|
3
|
+
startToCloseTimeout: '5 minutes',
|
|
4
|
+
heartbeatTimeout: '1 minute',
|
|
5
|
+
// Retry on the next cron tick so a timed-out attempt cannot overlap its own still-running loop.
|
|
6
|
+
retry: {
|
|
7
|
+
maximumAttempts: 1
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
export async function retentionSweepCron() {
|
|
11
|
+
const { deleted, raced, failed, accountingPruned, iterations, timedOut } = await retentionSweepActivity();
|
|
12
|
+
// Keep a workflow-level audit trail for this destructive sweep.
|
|
13
|
+
log.info('Retention sweep complete', {
|
|
14
|
+
deleted,
|
|
15
|
+
raced,
|
|
16
|
+
failed,
|
|
17
|
+
accountingPruned,
|
|
18
|
+
iterations,
|
|
19
|
+
timedOut
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=retention-sweep-cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/temporal/workflows/retention-sweep-cron.ts"],"sourcesContent":["import {log, proxyActivities} from '@temporalio/workflow';\nimport type {createLogsActivities} from '../activities/index.js';\n\nconst {retentionSweepActivity} = proxyActivities<ReturnType<typeof createLogsActivities>>({\n startToCloseTimeout: '5 minutes',\n heartbeatTimeout: '1 minute',\n // Retry on the next cron tick so a timed-out attempt cannot overlap its own still-running loop.\n retry: {maximumAttempts: 1},\n});\n\nexport async function retentionSweepCron(): Promise<void> {\n const {deleted, raced, failed, accountingPruned, iterations, timedOut} =\n await retentionSweepActivity();\n // Keep a workflow-level audit trail for this destructive sweep.\n log.info('Retention sweep complete', {\n deleted,\n raced,\n failed,\n accountingPruned,\n iterations,\n timedOut,\n });\n}\n"],"names":["log","proxyActivities","retentionSweepActivity","startToCloseTimeout","heartbeatTimeout","retry","maximumAttempts","retentionSweepCron","deleted","raced","failed","accountingPruned","iterations","timedOut","info"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,eAAe,QAAO,uBAAuB;AAG1D,MAAM,EAACC,sBAAsB,EAAC,GAAGD,gBAAyD;IACxFE,qBAAqB;IACrBC,kBAAkB;IAClB,gGAAgG;IAChGC,OAAO;QAACC,iBAAiB;IAAC;AAC5B;AAEA,OAAO,eAAeC;IACpB,MAAM,EAACC,OAAO,EAAEC,KAAK,EAAEC,MAAM,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,QAAQ,EAAC,GACpE,MAAMX;IACR,gEAAgE;IAChEF,IAAIc,IAAI,CAAC,4BAA4B;QACnCN;QACAC;QACAC;QACAC;QACAC;QACAC;IACF;AACF"}
|