@cat-factory/worker 0.166.3 → 0.168.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/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -17
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/config/retention.d.ts.map +1 -1
- package/dist/infrastructure/config/retention.js +6 -0
- package/dist/infrastructure/config/retention.js.map +1 -1
- package/dist/infrastructure/container-assembly.d.ts.map +1 -1
- package/dist/infrastructure/container-assembly.js +17 -8
- package/dist/infrastructure/container-assembly.js.map +1 -1
- package/dist/infrastructure/env.d.ts +7 -0
- package/dist/infrastructure/env.d.ts.map +1 -1
- package/dist/infrastructure/env.js.map +1 -1
- package/dist/infrastructure/observability/logExport.d.ts.map +1 -1
- package/dist/infrastructure/observability/logExport.js +10 -4
- package/dist/infrastructure/observability/logExport.js.map +1 -1
- package/dist/infrastructure/observability/logSettings.d.ts +22 -0
- package/dist/infrastructure/observability/logSettings.d.ts.map +1 -0
- package/dist/infrastructure/observability/logSettings.js +42 -0
- package/dist/infrastructure/observability/logSettings.js.map +1 -0
- package/dist/infrastructure/repositories/D1AuditEventRepository.d.ts +1 -0
- package/dist/infrastructure/repositories/D1AuditEventRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1AuditEventRepository.js +6 -0
- package/dist/infrastructure/repositories/D1AuditEventRepository.js.map +1 -1
- package/dist/infrastructure/repositories/D1ReportsRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1ReportsRepository.js +9 -0
- package/dist/infrastructure/repositories/D1ReportsRepository.js.map +1 -1
- package/dist/infrastructure/repositories/D1SpendRollupRepository.d.ts +20 -0
- package/dist/infrastructure/repositories/D1SpendRollupRepository.d.ts.map +1 -0
- package/dist/infrastructure/repositories/D1SpendRollupRepository.js +243 -0
- package/dist/infrastructure/repositories/D1SpendRollupRepository.js.map +1 -0
- package/dist/infrastructure/repositories/D1UserRepository.d.ts +2 -0
- package/dist/infrastructure/repositories/D1UserRepository.d.ts.map +1 -1
- package/dist/infrastructure/repositories/D1UserRepository.js +26 -0
- package/dist/infrastructure/repositories/D1UserRepository.js.map +1 -1
- package/dist/infrastructure/workflows/BootstrapWorkflow.d.ts +1 -0
- package/dist/infrastructure/workflows/BootstrapWorkflow.d.ts.map +1 -1
- package/dist/infrastructure/workflows/BootstrapWorkflow.js +9 -2
- package/dist/infrastructure/workflows/BootstrapWorkflow.js.map +1 -1
- package/dist/infrastructure/workflows/EnvConfigRepairWorkflow.d.ts +1 -0
- package/dist/infrastructure/workflows/EnvConfigRepairWorkflow.d.ts.map +1 -1
- package/dist/infrastructure/workflows/EnvConfigRepairWorkflow.js +7 -2
- package/dist/infrastructure/workflows/EnvConfigRepairWorkflow.js.map +1 -1
- package/dist/infrastructure/workflows/EnvironmentTestWorkflow.d.ts +1 -0
- package/dist/infrastructure/workflows/EnvironmentTestWorkflow.d.ts.map +1 -1
- package/dist/infrastructure/workflows/EnvironmentTestWorkflow.js +7 -2
- package/dist/infrastructure/workflows/EnvironmentTestWorkflow.js.map +1 -1
- package/dist/infrastructure/workflows/ExecutionWorkflow.d.ts +1 -0
- package/dist/infrastructure/workflows/ExecutionWorkflow.d.ts.map +1 -1
- package/dist/infrastructure/workflows/ExecutionWorkflow.js +10 -2
- package/dist/infrastructure/workflows/ExecutionWorkflow.js.map +1 -1
- package/dist/infrastructure/workflows/GitHubBackfillWorkflow.d.ts.map +1 -1
- package/dist/infrastructure/workflows/GitHubBackfillWorkflow.js +11 -5
- package/dist/infrastructure/workflows/GitHubBackfillWorkflow.js.map +1 -1
- package/dist/infrastructure/workflows/logExport.d.ts +11 -0
- package/dist/infrastructure/workflows/logExport.d.ts.map +1 -0
- package/dist/infrastructure/workflows/logExport.js +110 -0
- package/dist/infrastructure/workflows/logExport.js.map +1 -0
- package/dist/infrastructure/workflows/retention.d.ts +20 -2
- package/dist/infrastructure/workflows/retention.d.ts.map +1 -1
- package/dist/infrastructure/workflows/retention.js +13 -2
- package/dist/infrastructure/workflows/retention.js.map +1 -1
- package/migrations/0084_spend_days.sql +72 -0
- package/migrations/0084_user_session_generation.sql +22 -0
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1AuditEventRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AuditEventRepository.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAG5B,oEAAoE;AACpE,MAAM,OAAO,sBAAsB;IAChB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAuB;QAClC,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,6FAA6F;QAC7F,2FAA2F;QAC3F,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;;kDAG0C,CAC3C;aACA,IAAI,CACH,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,EAAE,CACP;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,OAAoD;QAEpD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAChD,6FAA6F;QAC7F,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,SAAS,GAAG,KAAK;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;gDAEoC,CACrC;iBACA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;gDAEoC,CACrC;iBACA,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAEjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAiB,CAAA;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACzE,CAAA;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"D1AuditEventRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1AuditEventRepository.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAG5B,oEAAoE;AACpE,MAAM,OAAO,sBAAsB;IAChB,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAsB;QACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAuB;QAClC,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACpC,6FAA6F;QAC7F,2FAA2F;QAC3F,MAAM,IAAI,CAAC,EAAE;aACV,OAAO,CACN;;;kDAG0C,CAC3C;aACA,IAAI,CACH,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,EAAE,CACP;aACA,GAAG,EAAE,CAAA;IACV,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAc;QAClC,2FAA2F;QAC3F,4EAA4E;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;QAChG,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,OAAoD;QAEpD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAChD,6FAA6F;QAC7F,yFAAyF;QACzF,wEAAwE;QACxE,MAAM,SAAS,GAAG,KAAK;YACrB,CAAC,CAAC,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;gDAEoC,CACrC;iBACA,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,EAAE;iBACJ,OAAO,CACN;;gDAEoC,CACrC;iBACA,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAEjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAiB,CAAA;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACzE,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1ReportsRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1ReportsRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"D1ReportsRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1ReportsRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC3F,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAmK3D,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAgBb,gBAAgB,CACpB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA6B7B;IAEK,mBAAmB,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,uBAAuB,EAClC,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA2ChC;IAEK,UAAU,CACd,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkCnC;CACF"}
|
|
@@ -99,6 +99,15 @@ const SPEND_DIMENSIONS = {
|
|
|
99
99
|
key: "COALESCE(tk.ticket_key, '')",
|
|
100
100
|
label: 'NULL',
|
|
101
101
|
},
|
|
102
|
+
run: {
|
|
103
|
+
// The KEY needs no join (the ledger row records its run); the joins are the LABEL's, and
|
|
104
|
+
// both are 1:1 primary-key joins. A run with no block (a repo bootstrap) keeps its money
|
|
105
|
+
// and loses its name, like an unsynced repo above.
|
|
106
|
+
joins: `LEFT JOIN agent_runs ar ON ar.workspace_id = tu.workspace_id AND ar.id = tu.execution_id
|
|
107
|
+
LEFT JOIN blocks b ON b.workspace_id = ar.workspace_id AND b.id = ar.block_id`,
|
|
108
|
+
key: "COALESCE(tu.execution_id, '')",
|
|
109
|
+
label: 'MAX(b.title)',
|
|
110
|
+
},
|
|
102
111
|
};
|
|
103
112
|
/** The same, for the run-based activity breakdowns (a run already carries its service/block). */
|
|
104
113
|
const ACTIVITY_DIMENSIONS = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1ReportsRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1ReportsRepository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"D1ReportsRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1ReportsRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ReportSpendDimension } from '@cat-factory/contracts';
|
|
2
|
+
import { type ReportRange, type ReportScope, type ReportSpendGroup, type ReportSpendTrendBucket, type SpendRollupRepository } from '@cat-factory/kernel';
|
|
3
|
+
import type { D1Database } from '@cloudflare/workers-types';
|
|
4
|
+
export declare class D1SpendRollupRepository implements SpendRollupRepository {
|
|
5
|
+
private readonly db;
|
|
6
|
+
constructor({ db }: {
|
|
7
|
+
db: D1Database;
|
|
8
|
+
});
|
|
9
|
+
rollupSpendDays(fromEpochMs: number, toEpochMs: number): Promise<number>;
|
|
10
|
+
spendRollupWatermark(): Promise<number | null>;
|
|
11
|
+
/**
|
|
12
|
+
* The account (+ optional single-board) scope and the day window. Scoped on the row's OWN
|
|
13
|
+
* `account_id` rather than a `workspaces` sub-select: the whole point of the table is that
|
|
14
|
+
* a read of it does not depend on rows that may since have been re-pointed or deleted.
|
|
15
|
+
*/
|
|
16
|
+
private scopeClause;
|
|
17
|
+
spendByDimension(scope: ReportScope, dimension: ReportSpendDimension, range: ReportRange): Promise<ReportSpendGroup[]>;
|
|
18
|
+
spendTrend(scope: ReportScope, range: ReportRange, bucketMs: number): Promise<ReportSpendTrendBucket[]>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=D1SpendRollupRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"D1SpendRollupRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1SpendRollupRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAyB,MAAM,wBAAwB,CAAA;AACzF,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAqF3D,qBAAa,uBAAwB,YAAW,qBAAqB;IACnE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgG7E;IAEK,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMnD;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAYb,gBAAgB,CACpB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4B7B;IAEK,UAAU,CACd,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAkCnC;CACF"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { lastCompleteRollupDay } from '@cat-factory/contracts';
|
|
2
|
+
import { SPEND_DAYS_ROLLUP, } from '@cat-factory/kernel';
|
|
3
|
+
// The durable cost-attribution rollup (`spend_days`) against D1: the write is one
|
|
4
|
+
// `INSERT … SELECT … GROUP BY` folding the ledger with the run's board shape frozen onto it,
|
|
5
|
+
// and every read is one aggregate over that table ALONE, with no join, so nothing a reader sees
|
|
6
|
+
// can be re-pointed or pruned out from under it. Mirrors `DrizzleSpendRollupRepository`; the
|
|
7
|
+
// cross-runtime conformance suite asserts the two agree with each other AND with the
|
|
8
|
+
// ledger-side `ReportsRepository` they stand in for on the long windows.
|
|
9
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
10
|
+
/**
|
|
11
|
+
* A service's display name, PRE-AGGREGATED to one row per service id, the same guard the
|
|
12
|
+
* ledger-side repository documents at length: `blocks` is keyed `(workspace_id, id)`, a block
|
|
13
|
+
* id is only unique within a board, so joining `blocks ON blocks.id = services.frame_block_id`
|
|
14
|
+
* from an aggregate would FAN OUT and multiply that service's calls, tokens and cost.
|
|
15
|
+
*/
|
|
16
|
+
const SERVICE_LABELS = `SELECT s.id AS service_id, MIN(b.title) AS title
|
|
17
|
+
FROM services s
|
|
18
|
+
LEFT JOIN blocks b ON b.id = s.frame_block_id
|
|
19
|
+
GROUP BY s.id`;
|
|
20
|
+
/**
|
|
21
|
+
* The tracker ticket a block is linked to, PRE-AGGREGATED to one row per
|
|
22
|
+
* `(workspace_id, linked_block_id)`: `idx_tasks_block` is a plain index, so a block linked
|
|
23
|
+
* from two imported issues would otherwise fan the aggregate out and double that block's
|
|
24
|
+
* money. `MIN(source || ':' || external_id)` makes the pick deterministic, matching the
|
|
25
|
+
* ledger-side dimension exactly. The rollup must not attribute a block to a different ticket
|
|
26
|
+
* than the live read would, or the two sources would disagree at the window boundary.
|
|
27
|
+
*/
|
|
28
|
+
const TICKET_BY_BLOCK = `SELECT workspace_id, linked_block_id,
|
|
29
|
+
MIN(source || ':' || external_id) AS ticket_key
|
|
30
|
+
FROM tasks
|
|
31
|
+
WHERE linked_block_id IS NOT NULL AND deleted_at IS NULL
|
|
32
|
+
GROUP BY workspace_id, linked_block_id`;
|
|
33
|
+
/**
|
|
34
|
+
* Every join the fold needs, each provably 1:1 with a ledger row: `workspaces` and `services`
|
|
35
|
+
* on their primary keys, `blocks` and `github_repos` on theirs, and the two pre-aggregated
|
|
36
|
+
* sub-selects above. That is what lets `COUNT(*)` and the token/cost sums stay exact while
|
|
37
|
+
* seven tables are in the query.
|
|
38
|
+
*/
|
|
39
|
+
const ROLLUP_JOINS = `LEFT JOIN workspaces w ON w.id = tu.workspace_id
|
|
40
|
+
LEFT JOIN agent_runs ar ON ar.workspace_id = tu.workspace_id AND ar.id = tu.execution_id
|
|
41
|
+
LEFT JOIN blocks b ON b.workspace_id = ar.workspace_id AND b.id = ar.block_id
|
|
42
|
+
LEFT JOIN services s ON s.id = ar.service_id
|
|
43
|
+
LEFT JOIN (${SERVICE_LABELS}) sl ON sl.service_id = ar.service_id
|
|
44
|
+
LEFT JOIN github_repos gr ON gr.workspace_id = tu.workspace_id
|
|
45
|
+
AND gr.github_id = s.repo_github_id
|
|
46
|
+
LEFT JOIN (${TICKET_BY_BLOCK}) tk ON tk.workspace_id = ar.workspace_id
|
|
47
|
+
AND tk.linked_block_id = ar.block_id`;
|
|
48
|
+
/**
|
|
49
|
+
* The two cost sums, spelled out rather than referenced by output alias.
|
|
50
|
+
*
|
|
51
|
+
* The alias would be `metered_cost`, which is also the name of the COLUMN being summed, and
|
|
52
|
+
* inside an aggregate query SQLite resolves a bare name in an ORDER BY expression to the input
|
|
53
|
+
* column: the ranking then read one arbitrary row's cost per group instead of the group's
|
|
54
|
+
* total, which silently mis-ordered "heaviest first", the one thing every breakdown promises.
|
|
55
|
+
*/
|
|
56
|
+
const METERED_COST = 'COALESCE(SUM(sd.metered_cost), 0)';
|
|
57
|
+
const SUBSCRIPTION_COST = 'COALESCE(SUM(sd.subscription_cost), 0)';
|
|
58
|
+
/** Which stored column a spend dimension groups by, and which one labels it. */
|
|
59
|
+
const DIMENSIONS = {
|
|
60
|
+
model: { key: "sd.provider || ':' || sd.model", label: 'NULL' },
|
|
61
|
+
agentKind: { key: 'sd.agent_kind', label: 'NULL' },
|
|
62
|
+
workspace: { key: 'sd.workspace_id', label: 'MAX(sd.workspace_name)' },
|
|
63
|
+
service: { key: 'sd.service_id', label: 'MAX(sd.service_name)' },
|
|
64
|
+
taskType: { key: 'sd.task_type', label: 'NULL' },
|
|
65
|
+
repo: { key: 'sd.repo_id', label: 'MAX(sd.repo_name)' },
|
|
66
|
+
ticket: { key: 'sd.ticket_ref', label: 'NULL' },
|
|
67
|
+
run: { key: 'sd.execution_id', label: 'MAX(sd.block_title)' },
|
|
68
|
+
};
|
|
69
|
+
export class D1SpendRollupRepository {
|
|
70
|
+
db;
|
|
71
|
+
constructor({ db }) {
|
|
72
|
+
this.db = db;
|
|
73
|
+
}
|
|
74
|
+
async rollupSpendDays(fromEpochMs, toEpochMs) {
|
|
75
|
+
// Snap to day edges so a partially-covered day is never written with only the covered
|
|
76
|
+
// part's spend, which would then read as a complete (and cheap) day.
|
|
77
|
+
const from = Math.floor(fromEpochMs / DAY_MS) * DAY_MS;
|
|
78
|
+
const to = Math.ceil(toEpochMs / DAY_MS) * DAY_MS;
|
|
79
|
+
if (to <= from)
|
|
80
|
+
return 0;
|
|
81
|
+
// DELETE the window, then INSERT it: an upsert alone is NOT a rewrite. A ledger row can
|
|
82
|
+
// arrive for a day that has already been rolled up (a run still in flight, a late meter),
|
|
83
|
+
// and a bucket the new result set no longer produces (a run whose block was since
|
|
84
|
+
// deleted, so its `taskType` moves to the unattributed slice) is never touched by
|
|
85
|
+
// `DO UPDATE` and would sit there double-counting for the LIFE of the table, which here
|
|
86
|
+
// means forever. `batch()` runs both in one implicit transaction, so a concurrent report
|
|
87
|
+
// read never observes the window mid-rewrite and renders the gap as a quiet fortnight.
|
|
88
|
+
//
|
|
89
|
+
// The rewrite reaches only boards that STILL EXIST, because a rewrite may only delete
|
|
90
|
+
// what it can reproduce. `token_usage` IS in the workspace-delete cascade and this table
|
|
91
|
+
// deliberately is not (`WORKSPACE_CASCADE_SPECIAL_TABLES`), so for a deleted board the
|
|
92
|
+
// re-fold below reads nothing and a bare window DELETE would quietly reclaim the very
|
|
93
|
+
// rows the exclusion exists to keep: every day of it still inside the trailing rewrite
|
|
94
|
+
// window at the moment the board went. Once the board is gone the ledger can never speak
|
|
95
|
+
// for those buckets again, which is exactly what makes them final.
|
|
96
|
+
const [, inserted] = await this.db.batch([
|
|
97
|
+
this.db
|
|
98
|
+
.prepare(`DELETE FROM spend_days
|
|
99
|
+
WHERE day_start >= ? AND day_start < ?
|
|
100
|
+
AND workspace_id IN (SELECT id FROM workspaces)`)
|
|
101
|
+
.bind(from, to),
|
|
102
|
+
this.db
|
|
103
|
+
.prepare(`INSERT INTO spend_days (
|
|
104
|
+
workspace_id, day_start, execution_id, agent_kind, provider, model, billing, vendor,
|
|
105
|
+
account_id, workspace_name, block_id, block_title, service_id, service_name,
|
|
106
|
+
repo_id, repo_name, task_type, ticket_ref,
|
|
107
|
+
calls, input_tokens, output_tokens, metered_cost, subscription_cost)
|
|
108
|
+
SELECT tu.workspace_id,
|
|
109
|
+
CAST(tu.created_at / ? AS INTEGER) * ? AS day_start,
|
|
110
|
+
COALESCE(tu.execution_id, '') AS execution_id,
|
|
111
|
+
tu.agent_kind,
|
|
112
|
+
tu.provider,
|
|
113
|
+
tu.model,
|
|
114
|
+
tu.billing,
|
|
115
|
+
COALESCE(tu.vendor, '') AS vendor,
|
|
116
|
+
-- The ledger's own denormalized account wins; the board's is the fallback
|
|
117
|
+
-- for a row recorded before it was resolved.
|
|
118
|
+
MAX(COALESCE(tu.account_id, w.account_id, '')) AS account_id,
|
|
119
|
+
MAX(w.name) AS workspace_name,
|
|
120
|
+
MAX(COALESCE(ar.block_id, '')) AS block_id,
|
|
121
|
+
MAX(b.title) AS block_title,
|
|
122
|
+
MAX(COALESCE(ar.service_id, '')) AS service_id,
|
|
123
|
+
MAX(sl.title) AS service_name,
|
|
124
|
+
MAX(COALESCE(CAST(s.repo_github_id AS TEXT), '')) AS repo_id,
|
|
125
|
+
MAX(gr.owner || '/' || gr.name) AS repo_name,
|
|
126
|
+
MAX(COALESCE(b.task_type, '')) AS task_type,
|
|
127
|
+
MAX(COALESCE(tk.ticket_key, '')) AS ticket_ref,
|
|
128
|
+
COUNT(*) AS calls,
|
|
129
|
+
COALESCE(SUM(tu.input_tokens), 0) AS input_tokens,
|
|
130
|
+
COALESCE(SUM(tu.output_tokens), 0) AS output_tokens,
|
|
131
|
+
COALESCE(SUM(CASE WHEN tu.billing = 'subscription'
|
|
132
|
+
THEN 0 ELSE tu.cost_estimate END), 0) AS metered_cost,
|
|
133
|
+
COALESCE(SUM(CASE WHEN tu.billing = 'subscription'
|
|
134
|
+
THEN tu.cost_estimate ELSE 0 END), 0) AS subscription_cost
|
|
135
|
+
FROM token_usage tu
|
|
136
|
+
${ROLLUP_JOINS}
|
|
137
|
+
WHERE tu.created_at >= ? AND tu.created_at < ?
|
|
138
|
+
GROUP BY 1, 2, 3, 4, 5, 6, 7, 8
|
|
139
|
+
ON CONFLICT(workspace_id, day_start, execution_id, agent_kind, provider, model,
|
|
140
|
+
billing, vendor)
|
|
141
|
+
DO UPDATE SET calls = excluded.calls,
|
|
142
|
+
input_tokens = excluded.input_tokens,
|
|
143
|
+
output_tokens = excluded.output_tokens,
|
|
144
|
+
metered_cost = excluded.metered_cost,
|
|
145
|
+
subscription_cost = excluded.subscription_cost`)
|
|
146
|
+
.bind(DAY_MS, DAY_MS, from, to),
|
|
147
|
+
// The sweep's coverage, in the SAME batch (hence the same transaction) as the rewrite it
|
|
148
|
+
// describes, and forward-only so a catch-up pass over an older window cannot present a
|
|
149
|
+
// current rollup as a stalled one.
|
|
150
|
+
//
|
|
151
|
+
// `through_day` is the last day this pass covered COMPLETELY, which is not the last day
|
|
152
|
+
// it wrote: `to` is rounded UP to a day edge so today's partial spend is folded rather
|
|
153
|
+
// than deferred, and today keeps accruing after the sweep returns. Stamping the day
|
|
154
|
+
// `to` lands in would advertise a bucket still filling as finished, and the panel's
|
|
155
|
+
// "complete through <date>" would then name the one day guaranteed to be short. See
|
|
156
|
+
// `lastCompleteRollupDay`.
|
|
157
|
+
this.db
|
|
158
|
+
.prepare(`INSERT INTO platform_rollup_state (rollup, through_day, updated_at) VALUES (?, ?, ?)
|
|
159
|
+
ON CONFLICT(rollup) DO UPDATE SET
|
|
160
|
+
through_day = MAX(platform_rollup_state.through_day, excluded.through_day),
|
|
161
|
+
updated_at = MAX(platform_rollup_state.updated_at, excluded.updated_at)`)
|
|
162
|
+
.bind(SPEND_DAYS_ROLLUP, lastCompleteRollupDay(toEpochMs), toEpochMs),
|
|
163
|
+
]);
|
|
164
|
+
return inserted?.meta.changes ?? 0;
|
|
165
|
+
}
|
|
166
|
+
async spendRollupWatermark() {
|
|
167
|
+
const row = await this.db
|
|
168
|
+
.prepare('SELECT through_day FROM platform_rollup_state WHERE rollup = ?')
|
|
169
|
+
.bind(SPEND_DAYS_ROLLUP)
|
|
170
|
+
.first();
|
|
171
|
+
return row ? Number(row.through_day) : null;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* The account (+ optional single-board) scope and the day window. Scoped on the row's OWN
|
|
175
|
+
* `account_id` rather than a `workspaces` sub-select: the whole point of the table is that
|
|
176
|
+
* a read of it does not depend on rows that may since have been re-pointed or deleted.
|
|
177
|
+
*/
|
|
178
|
+
scopeClause(scope, range) {
|
|
179
|
+
const binds = [scope.accountId];
|
|
180
|
+
let sql = 'sd.account_id = ?';
|
|
181
|
+
if (scope.workspaceId) {
|
|
182
|
+
sql += ' AND sd.workspace_id = ?';
|
|
183
|
+
binds.push(scope.workspaceId);
|
|
184
|
+
}
|
|
185
|
+
sql += ' AND sd.day_start >= ? AND sd.day_start < ?';
|
|
186
|
+
binds.push(range.since, range.until);
|
|
187
|
+
return { sql, binds };
|
|
188
|
+
}
|
|
189
|
+
async spendByDimension(scope, dimension, range) {
|
|
190
|
+
const dim = DIMENSIONS[dimension];
|
|
191
|
+
const where = this.scopeClause(scope, range);
|
|
192
|
+
const { results } = await this.db
|
|
193
|
+
.prepare(`SELECT ${dim.key} AS k,
|
|
194
|
+
${dim.label} AS label,
|
|
195
|
+
COALESCE(SUM(sd.input_tokens), 0) AS input_tokens,
|
|
196
|
+
COALESCE(SUM(sd.output_tokens), 0) AS output_tokens,
|
|
197
|
+
COALESCE(SUM(sd.calls), 0) AS calls,
|
|
198
|
+
${METERED_COST} AS metered_cost,
|
|
199
|
+
${SUBSCRIPTION_COST} AS subscription_cost
|
|
200
|
+
FROM spend_days sd
|
|
201
|
+
WHERE ${where.sql}
|
|
202
|
+
GROUP BY k
|
|
203
|
+
ORDER BY (${METERED_COST} + ${SUBSCRIPTION_COST}) DESC, k`)
|
|
204
|
+
.bind(...where.binds)
|
|
205
|
+
.all();
|
|
206
|
+
return (results ?? []).map((r) => ({
|
|
207
|
+
key: r.k ?? '',
|
|
208
|
+
label: r.label,
|
|
209
|
+
inputTokens: Number(r.input_tokens),
|
|
210
|
+
outputTokens: Number(r.output_tokens),
|
|
211
|
+
calls: Number(r.calls),
|
|
212
|
+
meteredCost: Number(r.metered_cost),
|
|
213
|
+
subscriptionCost: Number(r.subscription_cost),
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
async spendTrend(scope, range, bucketMs) {
|
|
217
|
+
const where = this.scopeClause(scope, range);
|
|
218
|
+
// CAST(... AS INTEGER) forces integer (floor) division: D1 binds JS numbers as REAL, so a
|
|
219
|
+
// bare `day_start / ?` would be floating-point and never land on a bucket edge.
|
|
220
|
+
const { results } = await this.db
|
|
221
|
+
.prepare(`SELECT CAST(sd.day_start / ? AS INTEGER) * ? AS bucket_start,
|
|
222
|
+
COALESCE(SUM(sd.input_tokens), 0) AS input_tokens,
|
|
223
|
+
COALESCE(SUM(sd.output_tokens), 0) AS output_tokens,
|
|
224
|
+
COALESCE(SUM(sd.calls), 0) AS calls,
|
|
225
|
+
${METERED_COST} AS metered_cost,
|
|
226
|
+
${SUBSCRIPTION_COST} AS subscription_cost
|
|
227
|
+
FROM spend_days sd
|
|
228
|
+
WHERE ${where.sql}
|
|
229
|
+
GROUP BY bucket_start
|
|
230
|
+
ORDER BY bucket_start`)
|
|
231
|
+
.bind(bucketMs, bucketMs, ...where.binds)
|
|
232
|
+
.all();
|
|
233
|
+
return (results ?? []).map((r) => ({
|
|
234
|
+
bucketStart: Number(r.bucket_start),
|
|
235
|
+
meteredCost: Number(r.metered_cost),
|
|
236
|
+
subscriptionCost: Number(r.subscription_cost),
|
|
237
|
+
calls: Number(r.calls),
|
|
238
|
+
inputTokens: Number(r.input_tokens),
|
|
239
|
+
outputTokens: Number(r.output_tokens),
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=D1SpendRollupRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"D1SpendRollupRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1SpendRollupRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,7 @@ export declare class D1UserRepository implements UserRepository {
|
|
|
15
15
|
getIdentity(provider: IdentityProvider, subject: string): Promise<UserIdentityRecord | null>;
|
|
16
16
|
linkIdentity(identity: UserIdentityRecord): Promise<void>;
|
|
17
17
|
listIdentities(userId: string): Promise<UserIdentityRecord[]>;
|
|
18
|
+
sessionGeneration(userId: string): Promise<number | null>;
|
|
19
|
+
bumpSessionGeneration(userId: string): Promise<number>;
|
|
18
20
|
}
|
|
19
21
|
//# sourceMappingURL=D1UserRepository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1UserRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1UserRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAwC3D,0EAA0E;AAC1E,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGhD;IAEK,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5C;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,CAoBf;IAEK,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAU5F;IAEK,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAM3D;IAEK,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQpD;IAEK,WAAW,CACf,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAMpC;IAEK,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEK,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAMlE;CACF"}
|
|
1
|
+
{"version":3,"file":"D1UserRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1UserRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAwC3D,0EAA0E;AAC1E,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAE/B,YAAY,EAAE,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,UAAU,CAAA;KAAE,EAErC;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAGhD;IAEK,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK5C;IAEK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC,GAC/D,OAAO,CAAC,IAAI,CAAC,CAoBf;IAEK,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAU5F;IAEK,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAM3D;IAEK,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAQpD;IAEK,WAAW,CACf,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAMpC;IAEK,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEK,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAMlE;IAEK,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS9D;IAEK,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB3D;CACF"}
|
|
@@ -104,5 +104,31 @@ export class D1UserRepository {
|
|
|
104
104
|
.all();
|
|
105
105
|
return results.map(rowToIdentity);
|
|
106
106
|
}
|
|
107
|
+
async sessionGeneration(userId) {
|
|
108
|
+
// Selecting the ONE column rather than reusing `get`: this runs on every authenticated
|
|
109
|
+
// request on the facade whose cache profile passes through, so it stays the narrowest read
|
|
110
|
+
// the store can serve.
|
|
111
|
+
const row = await this.db
|
|
112
|
+
.prepare('SELECT session_generation FROM users WHERE id = ?')
|
|
113
|
+
.bind(userId)
|
|
114
|
+
.first();
|
|
115
|
+
return row ? row.session_generation : null;
|
|
116
|
+
}
|
|
117
|
+
async bumpSessionGeneration(userId) {
|
|
118
|
+
// Incremented in SQL and RETURNING the new value, so two concurrent revocations cannot both
|
|
119
|
+
// read the same generation and write the same successor — and so the caller invalidating the
|
|
120
|
+
// cached read can only ever cache a number the row actually holds.
|
|
121
|
+
const row = await this.db
|
|
122
|
+
.prepare(`UPDATE users SET session_generation = session_generation + 1
|
|
123
|
+
WHERE id = ? RETURNING session_generation`)
|
|
124
|
+
.bind(userId)
|
|
125
|
+
.first();
|
|
126
|
+
if (!row) {
|
|
127
|
+
// A revocation that matched no row must not report success: the caller's whole purpose is
|
|
128
|
+
// to withdraw access, and "nothing to withdraw" is a state it has to hear about.
|
|
129
|
+
throw new Error(`Cannot revoke sessions for unknown user '${userId}'`);
|
|
130
|
+
}
|
|
131
|
+
return row.session_generation;
|
|
132
|
+
}
|
|
107
133
|
}
|
|
108
134
|
//# sourceMappingURL=D1UserRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1UserRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1UserRepository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"D1UserRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/repositories/D1UserRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,5 +17,6 @@ export interface BootstrapWorkflowParams {
|
|
|
17
17
|
*/
|
|
18
18
|
export declare class BootstrapWorkflow extends WorkflowEntrypoint<Env, BootstrapWorkflowParams> {
|
|
19
19
|
run(event: WorkflowEvent<BootstrapWorkflowParams>, step: WorkflowStep): Promise<void>;
|
|
20
|
+
private drive;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=BootstrapWorkflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BootstrapWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/BootstrapWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"BootstrapWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/BootstrapWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAOjC,sFAAsF;AACtF,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAQD;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,uBAAuB,CAAC;IAC5E,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7F;YAEa,KAAK;CAwEpB"}
|
|
@@ -2,6 +2,7 @@ import { WorkflowEntrypoint, } from 'cloudflare:workers';
|
|
|
2
2
|
import { buildContainer } from '../container';
|
|
3
3
|
import { loadConfig } from '../config';
|
|
4
4
|
import { logger } from '../observability/logger';
|
|
5
|
+
import { withWorkflowLogExport } from './logExport';
|
|
5
6
|
import { buildWorkflowRuntime } from './runtime';
|
|
6
7
|
/** Per-step retry policy: a transient poll failure retries before the run fails. */
|
|
7
8
|
const STEP_CONFIG = {
|
|
@@ -19,8 +20,14 @@ const STEP_CONFIG = {
|
|
|
19
20
|
* `jobMaxPolls` is a backstop in case it never reports terminal.
|
|
20
21
|
*/
|
|
21
22
|
export class BootstrapWorkflow extends WorkflowEntrypoint {
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
run(event, step) {
|
|
24
|
+
// The wake's logging bracket: settings applied for an isolate no other entry point has
|
|
25
|
+
// touched, and a drain before every durable suspension the body below reaches. The body is
|
|
26
|
+
// a method rather than a closure so `run` stays the bracket and nothing else.
|
|
27
|
+
return withWorkflowLogExport(this.env, step, (step) => this.drive(event.payload, step));
|
|
28
|
+
}
|
|
29
|
+
async drive(params, step) {
|
|
30
|
+
const { workspaceId, jobId } = params;
|
|
24
31
|
// One DI-graph assembly per wake (pure wiring over env bindings, no I/O) shared by
|
|
25
32
|
// every poll in this invocation; a hibernation wake replays `run()` and rebuilds. Built
|
|
26
33
|
// via `buildWorkflowRuntime` so a transient throw here can't kill the instance terminally
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BootstrapWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/BootstrapWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAKnB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAQhD,oFAAoF;AACpF,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE;IACjE,OAAO,EAAE,WAAW;CACQ,CAAA;AAE9B;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAkB,SAAQ,kBAAgD;IAC5E,
|
|
1
|
+
{"version":3,"file":"BootstrapWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/BootstrapWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,5 +16,6 @@ export interface EnvConfigRepairWorkflowParams {
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class EnvConfigRepairWorkflow extends WorkflowEntrypoint<Env, EnvConfigRepairWorkflowParams> {
|
|
18
18
|
run(event: WorkflowEvent<EnvConfigRepairWorkflowParams>, step: WorkflowStep): Promise<void>;
|
|
19
|
+
private drive;
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=EnvConfigRepairWorkflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvConfigRepairWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvConfigRepairWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"EnvConfigRepairWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvConfigRepairWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAOjC,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAQD;;;;;;;;GAQG;AACH,qBAAa,uBAAwB,SAAQ,kBAAkB,CAC7D,GAAG,EACH,6BAA6B,CAC9B;IACU,GAAG,CACV,KAAK,EAAE,aAAa,CAAC,6BAA6B,CAAC,EACnD,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAGf;YAEa,KAAK;CA8DpB"}
|
|
@@ -2,6 +2,7 @@ import { WorkflowEntrypoint, } from 'cloudflare:workers';
|
|
|
2
2
|
import { buildContainer } from '../container';
|
|
3
3
|
import { loadConfig } from '../config';
|
|
4
4
|
import { logger } from '../observability/logger';
|
|
5
|
+
import { withWorkflowLogExport } from './logExport';
|
|
5
6
|
import { buildWorkflowRuntime } from './runtime';
|
|
6
7
|
/** Per-step retry policy: a transient poll failure retries before the run fails. */
|
|
7
8
|
const STEP_CONFIG = {
|
|
@@ -18,8 +19,12 @@ const STEP_CONFIG = {
|
|
|
18
19
|
* on a terminal outcome; this loop only decides when to stop.
|
|
19
20
|
*/
|
|
20
21
|
export class EnvConfigRepairWorkflow extends WorkflowEntrypoint {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
run(event, step) {
|
|
23
|
+
// See BootstrapWorkflow: `run` is the wake's logging bracket, `drive` is the body.
|
|
24
|
+
return withWorkflowLogExport(this.env, step, (step) => this.drive(event.payload, step));
|
|
25
|
+
}
|
|
26
|
+
async drive(params, step) {
|
|
27
|
+
const { workspaceId, jobId } = params;
|
|
23
28
|
// One DI-graph assembly per wake (pure wiring over env bindings, no I/O) shared by
|
|
24
29
|
// every poll in this invocation; a hibernation wake replays `run()` and rebuilds. Built
|
|
25
30
|
// via `buildWorkflowRuntime` so a transient throw here can't kill the instance terminally
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvConfigRepairWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvConfigRepairWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAKnB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAQhD,oFAAoF;AACpF,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE;IACjE,OAAO,EAAE,WAAW;CACQ,CAAA;AAE9B;;;;;;;;GAQG;AACH,MAAM,OAAO,uBAAwB,SAAQ,kBAG5C;IACU,
|
|
1
|
+
{"version":3,"file":"EnvConfigRepairWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvConfigRepairWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,5 +15,6 @@ export interface EnvironmentTestWorkflowParams {
|
|
|
15
15
|
*/
|
|
16
16
|
export declare class EnvironmentTestWorkflow extends WorkflowEntrypoint<Env, EnvironmentTestWorkflowParams> {
|
|
17
17
|
run(event: WorkflowEvent<EnvironmentTestWorkflowParams>, step: WorkflowStep): Promise<void>;
|
|
18
|
+
private drive;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=EnvironmentTestWorkflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentTestWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvironmentTestWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"EnvironmentTestWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvironmentTestWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAOjC,6FAA6F;AAC7F,MAAM,WAAW,6BAA6B;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAQD;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,kBAAkB,CAC7D,GAAG,EACH,6BAA6B,CAC9B;IACU,GAAG,CACV,KAAK,EAAE,aAAa,CAAC,6BAA6B,CAAC,EACnD,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAGf;YAEa,KAAK;CA8DpB"}
|
|
@@ -2,6 +2,7 @@ import { WorkflowEntrypoint, } from 'cloudflare:workers';
|
|
|
2
2
|
import { buildContainer } from '../container';
|
|
3
3
|
import { loadConfig } from '../config';
|
|
4
4
|
import { logger } from '../observability/logger';
|
|
5
|
+
import { withWorkflowLogExport } from './logExport';
|
|
5
6
|
import { buildWorkflowRuntime } from './runtime';
|
|
6
7
|
/** Per-step retry policy: a transient poll failure retries before the run fails. */
|
|
7
8
|
const STEP_CONFIG = {
|
|
@@ -17,8 +18,12 @@ const STEP_CONFIG = {
|
|
|
17
18
|
* provisioning survives eviction while the driver stays cheap.
|
|
18
19
|
*/
|
|
19
20
|
export class EnvironmentTestWorkflow extends WorkflowEntrypoint {
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
run(event, step) {
|
|
22
|
+
// See BootstrapWorkflow: `run` is the wake's logging bracket, `drive` is the body.
|
|
23
|
+
return withWorkflowLogExport(this.env, step, (step) => this.drive(event.payload, step));
|
|
24
|
+
}
|
|
25
|
+
async drive(params, step) {
|
|
26
|
+
const { workspaceId, jobId } = params;
|
|
22
27
|
const { container, execConfig } = await buildWorkflowRuntime(() => ({ container: buildContainer(this.env), execConfig: loadConfig(this.env).execution }), step, 'env-test');
|
|
23
28
|
const pollInterval = execConfig.jobPollInterval;
|
|
24
29
|
const log = logger.child({ workspaceId, jobId, workflow: 'env-test' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentTestWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvironmentTestWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAKnB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAQhD,oFAAoF;AACpF,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE;IACjE,OAAO,EAAE,WAAW;CACQ,CAAA;AAE9B;;;;;;;GAOG;AACH,MAAM,OAAO,uBAAwB,SAAQ,kBAG5C;IACU,
|
|
1
|
+
{"version":3,"file":"EnvironmentTestWorkflow.js","sourceRoot":"","sources":["../../../src/infrastructure/workflows/EnvironmentTestWorkflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,5 +11,6 @@ import type { ExecutionWorkflowParams } from './WorkflowsWorkRunner';
|
|
|
11
11
|
*/
|
|
12
12
|
export declare class ExecutionWorkflow extends WorkflowEntrypoint<Env, ExecutionWorkflowParams> {
|
|
13
13
|
run(event: WorkflowEvent<ExecutionWorkflowParams>, step: WorkflowStep): Promise<void>;
|
|
14
|
+
private drive;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=ExecutionWorkflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/ExecutionWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"ExecutionWorkflow.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/workflows/ExecutionWorkflow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,aAAa,EAElB,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAA;AAQ3B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAMjC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAoJpE;;;;;;;GAOG;AACH,qBAAa,iBAAkB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,uBAAuB,CAAC;IAC5E,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7F;YAEa,KAAK;CAyMpB"}
|