@substrat-run/kernel 0.138.0 → 0.140.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/admin-log-ddl.d.ts +21 -0
- package/dist/admin-log-ddl.d.ts.map +1 -0
- package/dist/admin-log-ddl.js +32 -0
- package/dist/admin-log-ddl.js.map +1 -0
- package/dist/attachment-extractor.d.ts +21 -2
- package/dist/attachment-extractor.d.ts.map +1 -1
- package/dist/attachment-extractor.js +31 -6
- package/dist/attachment-extractor.js.map +1 -1
- package/dist/attachment-text.d.ts +64 -0
- package/dist/attachment-text.d.ts.map +1 -1
- package/dist/attachment-text.js +87 -16
- package/dist/attachment-text.js.map +1 -1
- package/dist/attribution.d.ts +36 -3
- package/dist/attribution.d.ts.map +1 -1
- package/dist/attribution.js +21 -8
- package/dist/attribution.js.map +1 -1
- package/dist/audit-outcome.d.ts +149 -0
- package/dist/audit-outcome.d.ts.map +1 -0
- package/dist/audit-outcome.js +233 -0
- package/dist/audit-outcome.js.map +1 -0
- package/dist/connect-links.d.ts +91 -0
- package/dist/connect-links.d.ts.map +1 -0
- package/dist/connect-links.js +189 -0
- package/dist/connect-links.js.map +1 -0
- package/dist/connect-state.d.ts +12 -3
- package/dist/connect-state.d.ts.map +1 -1
- package/dist/connect-state.js +8 -3
- package/dist/connect-state.js.map +1 -1
- package/dist/derived-object.d.ts +14 -0
- package/dist/derived-object.d.ts.map +1 -0
- package/dist/derived-object.js +2 -0
- package/dist/derived-object.js.map +1 -0
- package/dist/derived-objects.d.ts +108 -0
- package/dist/derived-objects.d.ts.map +1 -0
- package/dist/derived-objects.js +199 -0
- package/dist/derived-objects.js.map +1 -0
- package/dist/email-intent.d.ts +56 -0
- package/dist/email-intent.d.ts.map +1 -0
- package/dist/email-intent.js +71 -0
- package/dist/email-intent.js.map +1 -0
- package/dist/entity-edges.d.ts +6 -1
- package/dist/entity-edges.d.ts.map +1 -1
- package/dist/entity-edges.js +13 -0
- package/dist/entity-edges.js.map +1 -1
- package/dist/entity-grant-shape.d.ts +94 -0
- package/dist/entity-grant-shape.d.ts.map +1 -0
- package/dist/entity-grant-shape.js +329 -0
- package/dist/entity-grant-shape.js.map +1 -0
- package/dist/entity-grant.d.ts +45 -0
- package/dist/entity-grant.d.ts.map +1 -0
- package/dist/entity-grant.js +71 -0
- package/dist/entity-grant.js.map +1 -0
- package/dist/entity-state-reads.d.ts +40 -0
- package/dist/entity-state-reads.d.ts.map +1 -0
- package/dist/entity-state-reads.js +91 -0
- package/dist/entity-state-reads.js.map +1 -0
- package/dist/entity-state.d.ts +204 -0
- package/dist/entity-state.d.ts.map +1 -0
- package/dist/entity-state.js +356 -0
- package/dist/entity-state.js.map +1 -0
- package/dist/entity-trash.d.ts +245 -0
- package/dist/entity-trash.d.ts.map +1 -0
- package/dist/entity-trash.js +380 -0
- package/dist/entity-trash.js.map +1 -0
- package/dist/findings.d.ts +143 -0
- package/dist/findings.d.ts.map +1 -0
- package/dist/findings.js +463 -0
- package/dist/findings.js.map +1 -0
- package/dist/grant-scoped-read.d.ts +41 -0
- package/dist/grant-scoped-read.d.ts.map +1 -0
- package/dist/grant-scoped-read.js +100 -0
- package/dist/grant-scoped-read.js.map +1 -0
- package/dist/index.d.ts +40 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -6
- package/dist/index.js.map +1 -1
- package/dist/kernel-outbox.d.ts +14 -0
- package/dist/kernel-outbox.d.ts.map +1 -0
- package/dist/kernel-outbox.js +37 -0
- package/dist/kernel-outbox.js.map +1 -0
- package/dist/list-index.d.ts +34 -3
- package/dist/list-index.d.ts.map +1 -1
- package/dist/list-index.js +83 -31
- package/dist/list-index.js.map +1 -1
- package/dist/mail-sender.d.ts +78 -0
- package/dist/mail-sender.d.ts.map +1 -0
- package/dist/mail-sender.js +2 -0
- package/dist/mail-sender.js.map +1 -0
- package/dist/membership-executor.d.ts +7 -47
- package/dist/membership-executor.d.ts.map +1 -1
- package/dist/membership-executor.js +28 -53
- package/dist/membership-executor.js.map +1 -1
- package/dist/migration-digest.d.ts +161 -0
- package/dist/migration-digest.d.ts.map +1 -0
- package/dist/migration-digest.js +237 -0
- package/dist/migration-digest.js.map +1 -0
- package/dist/module-erasure.d.ts +156 -0
- package/dist/module-erasure.d.ts.map +1 -0
- package/dist/module-erasure.js +440 -0
- package/dist/module-erasure.js.map +1 -0
- package/dist/module-migrations.d.ts +6 -3
- package/dist/module-migrations.d.ts.map +1 -1
- package/dist/module-migrations.js +12 -5
- package/dist/module-migrations.js.map +1 -1
- package/dist/peer.d.ts +9 -1
- package/dist/peer.d.ts.map +1 -1
- package/dist/peer.js +29 -0
- package/dist/peer.js.map +1 -1
- package/dist/permission-checker.d.ts +6 -0
- package/dist/permission-checker.d.ts.map +1 -1
- package/dist/permission-checker.js.map +1 -1
- package/dist/permission-eval.d.ts +51 -1
- package/dist/permission-eval.d.ts.map +1 -1
- package/dist/permission-eval.js +104 -2
- package/dist/permission-eval.js.map +1 -1
- package/dist/platform-sweep.d.ts +8 -2
- package/dist/platform-sweep.d.ts.map +1 -1
- package/dist/platform-sweep.js +17 -0
- package/dist/platform-sweep.js.map +1 -1
- package/dist/scope-host.d.ts +479 -24
- package/dist/scope-host.d.ts.map +1 -1
- package/dist/scope-host.js +82 -7
- package/dist/scope-host.js.map +1 -1
- package/dist/scope-role-admin.d.ts +68 -0
- package/dist/scope-role-admin.d.ts.map +1 -0
- package/dist/scope-role-admin.js +80 -0
- package/dist/scope-role-admin.js.map +1 -0
- package/dist/search-index.d.ts +21 -1
- package/dist/search-index.d.ts.map +1 -1
- package/dist/search-index.js +60 -37
- package/dist/search-index.js.map +1 -1
- package/dist/spine-guard.d.ts +71 -2
- package/dist/spine-guard.d.ts.map +1 -1
- package/dist/spine-guard.js +393 -10
- package/dist/spine-guard.js.map +1 -1
- package/dist/spine-restore.d.ts.map +1 -1
- package/dist/spine-restore.js +5 -0
- package/dist/spine-restore.js.map +1 -1
- package/dist/sql-identifier.d.ts +12 -0
- package/dist/sql-identifier.d.ts.map +1 -0
- package/dist/sql-identifier.js +17 -0
- package/dist/sql-identifier.js.map +1 -0
- package/dist/sql-statements.d.ts +71 -0
- package/dist/sql-statements.d.ts.map +1 -0
- package/dist/sql-statements.js +191 -0
- package/dist/sql-statements.js.map +1 -0
- package/dist/subject-redaction.d.ts +9 -1
- package/dist/subject-redaction.d.ts.map +1 -1
- package/dist/subject-redaction.js.map +1 -1
- package/dist/system-switch-record.d.ts +3 -0
- package/dist/system-switch-record.d.ts.map +1 -1
- package/dist/system-switch-record.js +2 -0
- package/dist/system-switch-record.js.map +1 -1
- package/dist/table-ownership.d.ts +103 -0
- package/dist/table-ownership.d.ts.map +1 -0
- package/dist/table-ownership.js +285 -0
- package/dist/table-ownership.js.map +1 -0
- package/dist/timeline.d.ts +4 -4
- package/dist/timeline.js +4 -4
- package/dist/visible-continuation.d.ts +38 -0
- package/dist/visible-continuation.d.ts.map +1 -0
- package/dist/visible-continuation.js +162 -0
- package/dist/visible-continuation.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every index on the directory's `_substrat_admin_log`, as ONE script both adapters build from
|
|
3
|
+
* (#2064). The table is created by each adapter's directory schema, and it is REBUILT on a
|
|
4
|
+
* legacy directory (K-23's `tenant_id` made nullable, `ensureAdminLogTenantNullable`). A
|
|
5
|
+
* rebuild drops every index on the table it replaces, so this script runs twice: in the schema,
|
|
6
|
+
* and again inside the rebuild's own transaction, after the rename. An index added to the log
|
|
7
|
+
* goes here, never into one adapter's DDL, or the next legacy rebuild drops it silently.
|
|
8
|
+
*
|
|
9
|
+
* - The first five are the console's read-path indexes (control-plane.md §4.5). The log is
|
|
10
|
+
* append-only and only grows, so every filter it offers needs one, and the trailing id
|
|
11
|
+
* makes each a covering index for the ORDER BY.
|
|
12
|
+
* - `_substrat_admin_log_operation` (#2064) finds an audited change's rows by operation id
|
|
13
|
+
* rather than by scanning the log. It is partial, so rows that pair nothing cost nothing.
|
|
14
|
+
*
|
|
15
|
+
* A literal with no comments and no interpolation, because `lint:spine-ddl` inlines it as
|
|
16
|
+
* written and the hosted DDL is split on semicolons.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ADMIN_LOG_INDEXES_SQL = "\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_tenant ON _substrat_admin_log (tenant_id, id);\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_scope ON _substrat_admin_log (scope_id, id);\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_actor ON _substrat_admin_log (actor, id);\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_action ON _substrat_admin_log (action, id);\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_at ON _substrat_admin_log (at);\n CREATE INDEX IF NOT EXISTS _substrat_admin_log_operation\n ON _substrat_admin_log (json_extract(after, '$.operationId'))\n WHERE json_extract(after, '$.operationId') IS NOT NULL;\n";
|
|
19
|
+
/** `ADMIN_LOG_INDEXES_SQL` one statement at a time, for a host that executes them singly. */
|
|
20
|
+
export declare const ADMIN_LOG_INDEX_DDL: readonly string[];
|
|
21
|
+
//# sourceMappingURL=admin-log-ddl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-log-ddl.d.ts","sourceRoot":"","sources":["../src/admin-log-ddl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,+oBASjC,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAEP,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every index on the directory's `_substrat_admin_log`, as ONE script both adapters build from
|
|
3
|
+
* (#2064). The table is created by each adapter's directory schema, and it is REBUILT on a
|
|
4
|
+
* legacy directory (K-23's `tenant_id` made nullable, `ensureAdminLogTenantNullable`). A
|
|
5
|
+
* rebuild drops every index on the table it replaces, so this script runs twice: in the schema,
|
|
6
|
+
* and again inside the rebuild's own transaction, after the rename. An index added to the log
|
|
7
|
+
* goes here, never into one adapter's DDL, or the next legacy rebuild drops it silently.
|
|
8
|
+
*
|
|
9
|
+
* - The first five are the console's read-path indexes (control-plane.md §4.5). The log is
|
|
10
|
+
* append-only and only grows, so every filter it offers needs one, and the trailing id
|
|
11
|
+
* makes each a covering index for the ORDER BY.
|
|
12
|
+
* - `_substrat_admin_log_operation` (#2064) finds an audited change's rows by operation id
|
|
13
|
+
* rather than by scanning the log. It is partial, so rows that pair nothing cost nothing.
|
|
14
|
+
*
|
|
15
|
+
* A literal with no comments and no interpolation, because `lint:spine-ddl` inlines it as
|
|
16
|
+
* written and the hosted DDL is split on semicolons.
|
|
17
|
+
*/
|
|
18
|
+
export const ADMIN_LOG_INDEXES_SQL = `
|
|
19
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_tenant ON _substrat_admin_log (tenant_id, id);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_scope ON _substrat_admin_log (scope_id, id);
|
|
21
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_actor ON _substrat_admin_log (actor, id);
|
|
22
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_action ON _substrat_admin_log (action, id);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_at ON _substrat_admin_log (at);
|
|
24
|
+
CREATE INDEX IF NOT EXISTS _substrat_admin_log_operation
|
|
25
|
+
ON _substrat_admin_log (json_extract(after, '$.operationId'))
|
|
26
|
+
WHERE json_extract(after, '$.operationId') IS NOT NULL;
|
|
27
|
+
`;
|
|
28
|
+
/** `ADMIN_LOG_INDEXES_SQL` one statement at a time, for a host that executes them singly. */
|
|
29
|
+
export const ADMIN_LOG_INDEX_DDL = ADMIN_LOG_INDEXES_SQL.split(';')
|
|
30
|
+
.map((statement) => statement.trim())
|
|
31
|
+
.filter((statement) => statement !== '');
|
|
32
|
+
//# sourceMappingURL=admin-log-ddl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-log-ddl.js","sourceRoot":"","sources":["../src/admin-log-ddl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;CASpC,CAAC;AAEF,6FAA6F;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAsB,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC;KACnF,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;KACpC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* **The kernel indexes attachment text; it does not parse file formats** (K-43). Every
|
|
5
5
|
* parser — text and HTML decoding, the zip reader and its inflate budget, DOCX/XLSX/PPTX,
|
|
6
|
-
* and later
|
|
6
|
+
* PDF, and later OCR — lives behind this seam in a host-side package
|
|
7
7
|
* (`@substrat-run/attachment-extractors`), which neither the kernel nor an adapter imports.
|
|
8
8
|
* Whoever constructs the host passes the extractors in; a host given none records every
|
|
9
9
|
* type `unsupported`, with that reason, which is a valid configuration rather than a broken
|
|
@@ -140,6 +140,14 @@ export declare function isPositiveIntegerBound(value: unknown): value is number;
|
|
|
140
140
|
export declare function mediaTypeOf(contentType: string): string;
|
|
141
141
|
/** Refuse bounds the kernel could not honour: each must be a positive integer. */
|
|
142
142
|
export declare function assertAttachmentTextBounds(bounds: AttachmentTextBounds): void;
|
|
143
|
+
/**
|
|
144
|
+
* A host's `attachmentTextBounds` option, over the defaults: each given bound replaces the
|
|
145
|
+
* default, and each may only TIGHTEN it. The defaults are sized to the platform — the text
|
|
146
|
+
* cap to a Durable Object row, the input ceiling to a Worker's memory — so a looser bound is
|
|
147
|
+
* one no adapter can keep, and refusing it when the host is built is cheaper than learning it
|
|
148
|
+
* from a scope. A host under a CPU limit below the 30 s budget is the case for tightening.
|
|
149
|
+
*/
|
|
150
|
+
export declare function resolveAttachmentTextBounds(given?: Partial<AttachmentTextBounds>): AttachmentTextBounds;
|
|
143
151
|
/**
|
|
144
152
|
* Refuse, when the host is built, an extractor list it could not honour: a missing or
|
|
145
153
|
* repeated name, an `accepts` or `extract` that is not a function, or a `maxInputBytes` that
|
|
@@ -175,6 +183,17 @@ export declare function truncateUtf8(text: string, maxBytes: number): {
|
|
|
175
183
|
* or an HTML file's indentation would spend the per-attachment budget on nothing.
|
|
176
184
|
*/
|
|
177
185
|
export declare function normalizeExtractedText(text: string): string;
|
|
186
|
+
/**
|
|
187
|
+
* The timers the time budget runs on: the deadline, and the turn owed to it after a
|
|
188
|
+
* synchronous extractor returns. Both go through the same pair, because the guarantee is an
|
|
189
|
+
* ORDER between them — the deadline, if it passed, runs first. The runtime's own by default; a
|
|
190
|
+
* caller that passes others (a test, on a clock it moves itself) moves both together, so the
|
|
191
|
+
* outcome is decided by that clock rather than by how busy the machine is (#2085).
|
|
192
|
+
*/
|
|
193
|
+
export interface ExtractionTimers {
|
|
194
|
+
setTimeout(fn: () => void, ms: number): unknown;
|
|
195
|
+
clearTimeout(handle: unknown): void;
|
|
196
|
+
}
|
|
178
197
|
/**
|
|
179
198
|
* Run one extractor and turn whatever it does into an outcome the kernel can record: the
|
|
180
199
|
* time budget, the throw, the shape and the output cap, all judged here, after it returns.
|
|
@@ -184,5 +203,5 @@ export declare function runAttachmentExtractor(extractor: AttachmentExtractor, i
|
|
|
184
203
|
body: Uint8Array;
|
|
185
204
|
contentType: string;
|
|
186
205
|
filename: string;
|
|
187
|
-
}, bounds?: AttachmentTextBounds): Promise<ExtractionOutcome>;
|
|
206
|
+
}, bounds?: AttachmentTextBounds, timers?: ExtractionTimers): Promise<ExtractionOutcome>;
|
|
188
207
|
//# sourceMappingURL=attachment-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-extractor.d.ts","sourceRoot":"","sources":["../src/attachment-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAQH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAa,CAAC;AAE5C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,yFAAyF;AACzF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAC9E;AAED,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC1E;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,EAAE,oBAI5C,CAAC;AAEF,uGAAuG;AACvG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEtE;AAED,kDAAkD;AAClD,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,kFAAkF;AAClF,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,SAAS,mBAAmB,EAAE,GAAG,IAAI,CAkB3F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,eAAe,CAAC,EACrD,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,GAClD,MAAM,GAAG,IAAI,CASf;AAED,iGAAiG;AACjG,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,mBAAmB,GAAG,SAAS,CAQjC;AAID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAMjG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS3D;
|
|
1
|
+
{"version":3,"file":"attachment-extractor.d.ts","sourceRoot":"","sources":["../src/attachment-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* **The kernel indexes attachment text; it does not parse file formats** (K-43). Every
|
|
5
5
|
* parser — text and HTML decoding, the zip reader and its inflate budget, DOCX/XLSX/PPTX,
|
|
6
|
-
* and later
|
|
6
|
+
* PDF, and later OCR — lives behind this seam in a host-side package
|
|
7
7
|
* (`@substrat-run/attachment-extractors`), which neither the kernel nor an adapter imports.
|
|
8
8
|
* Whoever constructs the host passes the extractors in; a host given none records every
|
|
9
9
|
* type `unsupported`, with that reason, which is a valid configuration rather than a broken
|
|
@@ -82,6 +82,26 @@ export function assertAttachmentTextBounds(bounds) {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* A host's `attachmentTextBounds` option, over the defaults: each given bound replaces the
|
|
87
|
+
* default, and each may only TIGHTEN it. The defaults are sized to the platform — the text
|
|
88
|
+
* cap to a Durable Object row, the input ceiling to a Worker's memory — so a looser bound is
|
|
89
|
+
* one no adapter can keep, and refusing it when the host is built is cheaper than learning it
|
|
90
|
+
* from a scope. A host under a CPU limit below the 30 s budget is the case for tightening.
|
|
91
|
+
*/
|
|
92
|
+
export function resolveAttachmentTextBounds(given = {}) {
|
|
93
|
+
// A key passed as `undefined` — an option forwarded from a caller that left it out — is
|
|
94
|
+
// absent, not a bound: spreading it would replace the default with nothing.
|
|
95
|
+
const set = Object.fromEntries(Object.entries(given).filter(([, v]) => v !== undefined));
|
|
96
|
+
const bounds = { ...DEFAULT_ATTACHMENT_TEXT_BOUNDS, ...set };
|
|
97
|
+
assertAttachmentTextBounds(bounds);
|
|
98
|
+
for (const key of ['maxInputBytes', 'maxTextBytes', 'timeoutMs']) {
|
|
99
|
+
if (bounds[key] > DEFAULT_ATTACHMENT_TEXT_BOUNDS[key]) {
|
|
100
|
+
throw new Error(`attachment text bound ${key} may only tighten the default ${DEFAULT_ATTACHMENT_TEXT_BOUNDS[key]}, not raise it to ${bounds[key]}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return bounds;
|
|
104
|
+
}
|
|
85
105
|
/**
|
|
86
106
|
* Refuse, when the host is built, an extractor list it could not honour: a missing or
|
|
87
107
|
* repeated name, an `accepts` or `extract` that is not a function, or a `maxInputBytes` that
|
|
@@ -173,7 +193,12 @@ export function normalizeExtractedText(text) {
|
|
|
173
193
|
* order of when they are due, so this one cannot run before a deadline that has already
|
|
174
194
|
* passed, whichever phase of the loop the extractor returned in. It runs once per extraction.
|
|
175
195
|
*/
|
|
176
|
-
const nextTurn = () => new Promise((resolve) => setTimeout(resolve, 0));
|
|
196
|
+
const nextTurn = (timers) => new Promise((resolve) => timers.setTimeout(resolve, 0));
|
|
197
|
+
/** The runtime's timers, called bare — workerd throws `Illegal invocation` on `obj.setTimeout(…)`. */
|
|
198
|
+
const RUNTIME_TIMERS = {
|
|
199
|
+
setTimeout: (fn, ms) => setTimeout(fn, ms),
|
|
200
|
+
clearTimeout: (handle) => clearTimeout(handle),
|
|
201
|
+
};
|
|
177
202
|
const TIMED_OUT = Symbol('timed out');
|
|
178
203
|
/** A recorded reason is short: an extractor's `failed` is cut, never trusted to be. */
|
|
179
204
|
const DETAIL_MAX = 500;
|
|
@@ -182,7 +207,7 @@ const DETAIL_MAX = 500;
|
|
|
182
207
|
* time budget, the throw, the shape and the output cap, all judged here, after it returns.
|
|
183
208
|
* See this file's header for what the budget can and cannot stop.
|
|
184
209
|
*/
|
|
185
|
-
export async function runAttachmentExtractor(extractor, input, bounds = DEFAULT_ATTACHMENT_TEXT_BOUNDS) {
|
|
210
|
+
export async function runAttachmentExtractor(extractor, input, bounds = DEFAULT_ATTACHMENT_TEXT_BOUNDS, timers = RUNTIME_TIMERS) {
|
|
186
211
|
const failed = (detail) => ({
|
|
187
212
|
status: 'failed',
|
|
188
213
|
extractor: extractor.name,
|
|
@@ -192,7 +217,7 @@ export async function runAttachmentExtractor(extractor, input, bounds = DEFAULT_
|
|
|
192
217
|
const controller = new AbortController();
|
|
193
218
|
let timedOut = false;
|
|
194
219
|
let onTimeout = () => { };
|
|
195
|
-
const timer = setTimeout(() => {
|
|
220
|
+
const timer = timers.setTimeout(() => {
|
|
196
221
|
timedOut = true;
|
|
197
222
|
controller.abort();
|
|
198
223
|
onTimeout(TIMED_OUT);
|
|
@@ -215,8 +240,8 @@ export async function runAttachmentExtractor(extractor, input, bounds = DEFAULT_
|
|
|
215
240
|
// A SYNCHRONOUS extractor returns before its timer can run, however long it took. Give the
|
|
216
241
|
// timer the turn it was owed: if the deadline passed meanwhile, the answer is discarded.
|
|
217
242
|
if (!timedOut)
|
|
218
|
-
await nextTurn();
|
|
219
|
-
clearTimeout(timer);
|
|
243
|
+
await nextTurn(timers);
|
|
244
|
+
timers.clearTimeout(timer);
|
|
220
245
|
if (timedOut || result === TIMED_OUT)
|
|
221
246
|
return timeout;
|
|
222
247
|
if (didThrow) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-extractor.js","sourceRoot":"","sources":["../src/attachment-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAQH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AAgE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAyB;IAClE,aAAa,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC/B,YAAY,EAAE,GAAG,GAAG,IAAI;IACxB,SAAS,EAAE,MAAM;CAClB,CAAC;AAEF,uGAAuG;AACvG,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChE,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,0BAA0B,CAAC,MAA4B;IACrE,KAAK,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,WAAW,CAAU,EAAE,CAAC;QAC1E,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,oCAAoC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAA0C;IACnF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CACb,yBAAyB,CAAC,CAAC,IAAI,4BAA4B,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI;gBACpF,iCAAiC,CACpC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,IAAI,uBAAuB,CAAC,CAAC;QAC9F,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,SAAqD,EACrD,MAAmD;IAEnD,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,OAAO,eAAe,IAAI,oBAAoB,MAAM,CAAC,aAAa,mBAAmB,CAAC;IACxF,CAAC;IACD,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC;IACzC,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;QACxD,OAAO,eAAe,IAAI,gCAAgC,QAAQ,mBAAmB,CAAC;IACxF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,yBAAyB,CACvC,UAA0C,EAC1C,WAAmB,EACnB,QAAgB;IAEhB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC;AAE/B;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChE,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,GAAG,IAAI,CAAC,KAAK,IAAI;QAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,IAAI;SACR,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;QACxB,iEAAiE;SAChE,OAAO,CAAC,wDAAwD,EAAE,EAAE,CAAC;SACrE,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"attachment-extractor.js","sourceRoot":"","sources":["../src/attachment-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,6 +89,26 @@ export declare function isAttachmentTextRun(run: {
|
|
|
89
89
|
module_id: string;
|
|
90
90
|
job: string;
|
|
91
91
|
}): boolean;
|
|
92
|
+
/** The backfill's job name: queues extraction for attachments that predate it. */
|
|
93
|
+
export declare const ATTACHMENT_TEXT_BACKFILL_JOB = "attachment-text-backfill";
|
|
94
|
+
/** The kernel's own jobs, each bound by the adapter to the scope it is driving. */
|
|
95
|
+
export interface KernelJobHandlers {
|
|
96
|
+
readonly [ATTACHMENT_TEXT_JOB]: JobHandler;
|
|
97
|
+
readonly [ATTACHMENT_TEXT_BACKFILL_JOB]: JobHandler;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The kernel's handler for a run, or undefined for a run that is not the kernel's — which the
|
|
101
|
+
* adapter's own registry answers. The one place a kernel job is dispatched, so a new one is
|
|
102
|
+
* a kernel change and an entry in each adapter's handler map, never a branch in its drive.
|
|
103
|
+
*/
|
|
104
|
+
export declare function kernelJobFor(run: {
|
|
105
|
+
module_id: string;
|
|
106
|
+
job: string;
|
|
107
|
+
}, handlers: KernelJobHandlers): {
|
|
108
|
+
handler: JobHandler;
|
|
109
|
+
} | undefined;
|
|
110
|
+
/** Attachments one backfill pass looks at — the bound on what a pass writes, too. */
|
|
111
|
+
export declare const ATTACHMENT_TEXT_BACKFILL_BATCH = 200;
|
|
92
112
|
/**
|
|
93
113
|
* Refuse a job registered under the kernel's own module id — every adapter's `registerJob`
|
|
94
114
|
* calls this first.
|
|
@@ -172,6 +192,50 @@ export declare function reconcileAttachmentText(sql: ScopedSql, mintId: () => st
|
|
|
172
192
|
removed: number;
|
|
173
193
|
queued: number;
|
|
174
194
|
};
|
|
195
|
+
/**
|
|
196
|
+
* Start the scope's backfill (#1575) — once in its life, and only once it holds attachments.
|
|
197
|
+
*
|
|
198
|
+
* An attachment uploaded before extraction existed has no text row, so nothing ever queued
|
|
199
|
+
* it and nothing would: it stayed unsearchable, and `readAttachmentText` answered null for
|
|
200
|
+
* it forever. The backfill finds those. It is a kernel job like extraction, so the work rides
|
|
201
|
+
* the job driver, off every request: this function only writes the run, and the driver's
|
|
202
|
+
* passes walk the attachments `ATTACHMENT_TEXT_BACKFILL_BATCH` at a time.
|
|
203
|
+
*
|
|
204
|
+
* **The run row is the marker.** Runs are retained, so a scope whose backfill ever started
|
|
205
|
+
* never starts another — done, failed or still running. Every upload since extraction
|
|
206
|
+
* existed writes its own text row, and a restore or a fork reconciles its own
|
|
207
|
+
* (`reconcileAttachmentText`), so one walk is all a scope ever needs. A scope with no
|
|
208
|
+
* attachments yet is not marked: an empty scope has nothing to walk, and the first upload
|
|
209
|
+
* after it is marked costs one walk over rows that all have text.
|
|
210
|
+
*
|
|
211
|
+
* Read before it writes, so the drive that calls it on every pass writes nothing once the
|
|
212
|
+
* scope is marked: two index probes. Returns whether it started the run.
|
|
213
|
+
*/
|
|
214
|
+
export declare function startAttachmentTextBackfill(sql: ScopedSql, runId: string, at: string): boolean;
|
|
215
|
+
/** What one backfill batch did. `last` is the cursor the next batch resumes after. */
|
|
216
|
+
export interface AttachmentTextBackfillBatch {
|
|
217
|
+
readonly scanned: number;
|
|
218
|
+
readonly queued: number;
|
|
219
|
+
readonly last: string | null;
|
|
220
|
+
/** True when the batch reached the end of the attachments. */
|
|
221
|
+
readonly done: boolean;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* One backfill batch, inside the caller's transaction: the next `batch` attachments after
|
|
225
|
+
* `after`, by id, and an extraction queued for each that has no text row. Bounded by what it
|
|
226
|
+
* LOOKS AT, not by what it queues, so a pass over attachments that all have text costs the
|
|
227
|
+
* same as one that queues every row. Idempotent: a batch replayed after a crash finds the
|
|
228
|
+
* rows it queued and queues nothing twice.
|
|
229
|
+
*/
|
|
230
|
+
export declare function queueAttachmentTextBackfill(sql: ScopedSql, after: string | null, mintId: () => string, at: string, batch?: number): AttachmentTextBackfillBatch;
|
|
231
|
+
/**
|
|
232
|
+
* The backfill job: one batch per pass, the cursor the last attachment id it looked at. The
|
|
233
|
+
* batch commits on its own and the cursor with the pass, so a pass that dies between the two
|
|
234
|
+
* replays a batch that queues nothing twice (`queueAttachmentTextBackfill`).
|
|
235
|
+
*/
|
|
236
|
+
export declare function attachmentTextBackfillJob(source: {
|
|
237
|
+
queueBatch(after: string | null): Promise<AttachmentTextBackfillBatch>;
|
|
238
|
+
}): JobHandler;
|
|
175
239
|
/**
|
|
176
240
|
* An attachment's extraction state, or null when none was ever recorded — an attachment
|
|
177
241
|
* uploaded before extraction existed, or one a fork carried without its text.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-text.d.ts","sourceRoot":"","sources":["../src/attachment-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,yFAAyF;AACzF,eAAO,MAAM,sBAAsB,EAA6B,QAAQ,CAAC;AAEzE,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AAErD,uDAAuD;AACvD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAEpF;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAOzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,6xEA4C/B,CAAC;AAEF,qCAAqC;AACrC,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE9F,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kDAAkD;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"attachment-text.d.ts","sourceRoot":"","sources":["../src/attachment-text.ts"],"names":[],"mappings":"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"}
|
package/dist/attachment-text.js
CHANGED
|
@@ -88,6 +88,20 @@ export const ATTACHMENT_TEXT_JOB = 'attachment-text';
|
|
|
88
88
|
export function isAttachmentTextRun(run) {
|
|
89
89
|
return run.module_id === ATTACHMENT_TEXT_MODULE && run.job === ATTACHMENT_TEXT_JOB;
|
|
90
90
|
}
|
|
91
|
+
/** The backfill's job name: queues extraction for attachments that predate it. */
|
|
92
|
+
export const ATTACHMENT_TEXT_BACKFILL_JOB = 'attachment-text-backfill';
|
|
93
|
+
/**
|
|
94
|
+
* The kernel's handler for a run, or undefined for a run that is not the kernel's — which the
|
|
95
|
+
* adapter's own registry answers. The one place a kernel job is dispatched, so a new one is
|
|
96
|
+
* a kernel change and an entry in each adapter's handler map, never a branch in its drive.
|
|
97
|
+
*/
|
|
98
|
+
export function kernelJobFor(run, handlers) {
|
|
99
|
+
if (run.module_id !== ATTACHMENT_TEXT_MODULE || !Object.hasOwn(handlers, run.job))
|
|
100
|
+
return undefined;
|
|
101
|
+
return { handler: handlers[run.job] };
|
|
102
|
+
}
|
|
103
|
+
/** Attachments one backfill pass looks at — the bound on what a pass writes, too. */
|
|
104
|
+
export const ATTACHMENT_TEXT_BACKFILL_BATCH = 200;
|
|
91
105
|
/**
|
|
92
106
|
* Refuse a job registered under the kernel's own module id — every adapter's `registerJob`
|
|
93
107
|
* calls this first.
|
|
@@ -178,11 +192,11 @@ export const ATTACHMENT_TEXT_DDL = `
|
|
|
178
192
|
*/
|
|
179
193
|
const RUN_PAYLOAD_KEY = 'attachmentId';
|
|
180
194
|
/**
|
|
181
|
-
* Start one
|
|
182
|
-
* coalescing rule (`startJobRun`), as one statement, so a re-queue joins
|
|
183
|
-
*
|
|
195
|
+
* Start one of the kernel's runs unless a LIVE one exists for its key — the driver's own
|
|
196
|
+
* coalescing rule (`startJobRun`), as one statement, so a re-queue joins a run in flight
|
|
197
|
+
* rather than racing it.
|
|
184
198
|
*/
|
|
185
|
-
function
|
|
199
|
+
function startKernelRun(sql, job, instance, payload, runId, at) {
|
|
186
200
|
sql.exec(`INSERT INTO _substrat_job_runs
|
|
187
201
|
(id, module_id, job, instance, payload, subject_id, status, cursor, counters, attempts,
|
|
188
202
|
last_error, started_at, updated_at, next_attempt_at, ended_at)
|
|
@@ -190,18 +204,11 @@ function startAttachmentTextRun(sql, attachmentId, runId, at) {
|
|
|
190
204
|
WHERE NOT EXISTS (
|
|
191
205
|
SELECT 1 FROM _substrat_job_runs
|
|
192
206
|
WHERE module_id = ? AND job = ? AND instance = ? AND status = 'running'
|
|
193
|
-
)`, [
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
JSON.stringify({ [RUN_PAYLOAD_KEY]: attachmentId }),
|
|
199
|
-
at,
|
|
200
|
-
at,
|
|
201
|
-
ATTACHMENT_TEXT_MODULE,
|
|
202
|
-
ATTACHMENT_TEXT_JOB,
|
|
203
|
-
attachmentId,
|
|
204
|
-
]);
|
|
207
|
+
)`, [runId, ATTACHMENT_TEXT_MODULE, job, instance, JSON.stringify(payload), at, at, ATTACHMENT_TEXT_MODULE, job, instance]);
|
|
208
|
+
}
|
|
209
|
+
/** Start one attachment's extraction run, coalesced with a live one. */
|
|
210
|
+
function startAttachmentTextRun(sql, attachmentId, runId, at) {
|
|
211
|
+
startKernelRun(sql, ATTACHMENT_TEXT_JOB, attachmentId, { [RUN_PAYLOAD_KEY]: attachmentId }, runId, at);
|
|
205
212
|
}
|
|
206
213
|
/**
|
|
207
214
|
* Queue one attachment's extraction: a `pending` row and a coalesced run, inside the
|
|
@@ -273,6 +280,70 @@ export function reconcileAttachmentText(sql, mintId, at) {
|
|
|
273
280
|
startAttachmentTextRun(sql, attachment_id, mintId(), at);
|
|
274
281
|
return { removed, queued: queued.length };
|
|
275
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Start the scope's backfill (#1575) — once in its life, and only once it holds attachments.
|
|
285
|
+
*
|
|
286
|
+
* An attachment uploaded before extraction existed has no text row, so nothing ever queued
|
|
287
|
+
* it and nothing would: it stayed unsearchable, and `readAttachmentText` answered null for
|
|
288
|
+
* it forever. The backfill finds those. It is a kernel job like extraction, so the work rides
|
|
289
|
+
* the job driver, off every request: this function only writes the run, and the driver's
|
|
290
|
+
* passes walk the attachments `ATTACHMENT_TEXT_BACKFILL_BATCH` at a time.
|
|
291
|
+
*
|
|
292
|
+
* **The run row is the marker.** Runs are retained, so a scope whose backfill ever started
|
|
293
|
+
* never starts another — done, failed or still running. Every upload since extraction
|
|
294
|
+
* existed writes its own text row, and a restore or a fork reconciles its own
|
|
295
|
+
* (`reconcileAttachmentText`), so one walk is all a scope ever needs. A scope with no
|
|
296
|
+
* attachments yet is not marked: an empty scope has nothing to walk, and the first upload
|
|
297
|
+
* after it is marked costs one walk over rows that all have text.
|
|
298
|
+
*
|
|
299
|
+
* Read before it writes, so the drive that calls it on every pass writes nothing once the
|
|
300
|
+
* scope is marked: two index probes. Returns whether it started the run.
|
|
301
|
+
*/
|
|
302
|
+
export function startAttachmentTextBackfill(sql, runId, at) {
|
|
303
|
+
const [row] = sql.query(`SELECT EXISTS (SELECT 1 FROM _substrat_attachments) AS has,
|
|
304
|
+
EXISTS (SELECT 1 FROM _substrat_job_runs WHERE module_id = ? AND job = ?) AS marked`, [ATTACHMENT_TEXT_MODULE, ATTACHMENT_TEXT_BACKFILL_JOB]);
|
|
305
|
+
if (!row || Number(row.has) !== 1 || Number(row.marked) === 1)
|
|
306
|
+
return false;
|
|
307
|
+
startKernelRun(sql, ATTACHMENT_TEXT_BACKFILL_JOB, 'scope', {}, runId, at);
|
|
308
|
+
return true;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* One backfill batch, inside the caller's transaction: the next `batch` attachments after
|
|
312
|
+
* `after`, by id, and an extraction queued for each that has no text row. Bounded by what it
|
|
313
|
+
* LOOKS AT, not by what it queues, so a pass over attachments that all have text costs the
|
|
314
|
+
* same as one that queues every row. Idempotent: a batch replayed after a crash finds the
|
|
315
|
+
* rows it queued and queues nothing twice.
|
|
316
|
+
*/
|
|
317
|
+
export function queueAttachmentTextBackfill(sql, after, mintId, at, batch = ATTACHMENT_TEXT_BACKFILL_BATCH) {
|
|
318
|
+
const rows = sql.query(`SELECT a.id, t.attachment_id IS NULL AS missing
|
|
319
|
+
FROM _substrat_attachments a
|
|
320
|
+
LEFT JOIN _substrat_search__attachment_text t ON t.attachment_id = a.id
|
|
321
|
+
WHERE a.id > ?
|
|
322
|
+
ORDER BY a.id
|
|
323
|
+
LIMIT ?`, [after ?? '', batch]);
|
|
324
|
+
let queued = 0;
|
|
325
|
+
for (const { id, missing } of rows) {
|
|
326
|
+
if (Number(missing) !== 1)
|
|
327
|
+
continue;
|
|
328
|
+
enqueueAttachmentText(sql, id, mintId(), at);
|
|
329
|
+
queued += 1;
|
|
330
|
+
}
|
|
331
|
+
return { scanned: rows.length, queued, last: rows.at(-1)?.id ?? after, done: rows.length < batch };
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* The backfill job: one batch per pass, the cursor the last attachment id it looked at. The
|
|
335
|
+
* batch commits on its own and the cursor with the pass, so a pass that dies between the two
|
|
336
|
+
* replays a batch that queues nothing twice (`queueAttachmentTextBackfill`).
|
|
337
|
+
*/
|
|
338
|
+
export function attachmentTextBackfillJob(source) {
|
|
339
|
+
return async (pass) => {
|
|
340
|
+
const after = typeof pass.cursor === 'string' ? pass.cursor : null;
|
|
341
|
+
const { scanned, queued, last, done } = await source.queueBatch(after);
|
|
342
|
+
pass.count('scanned', scanned);
|
|
343
|
+
pass.count('queued', queued);
|
|
344
|
+
return { cursor: last, done };
|
|
345
|
+
};
|
|
346
|
+
}
|
|
276
347
|
/**
|
|
277
348
|
* An attachment's extraction state, or null when none was ever recorded — an attachment
|
|
278
349
|
* uploaded before extraction existed, or one a fork carried without its text.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-text.js","sourceRoot":"","sources":["../src/attachment-text.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment-text.js","sourceRoot":"","sources":["../src/attachment-text.ts"],"names":[],"mappings":"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"}
|
package/dist/attribution.d.ts
CHANGED
|
@@ -1,16 +1,49 @@
|
|
|
1
1
|
import type { OnBehalfOf } from '@substrat-run/contracts';
|
|
2
2
|
import type { HostAdmin } from './scope-host.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* What an admin-log row written through a view says about why it was written: the person
|
|
5
|
+
* the actor acted for (#977), and the event whose effect the write is (K-22, `causedBy`).
|
|
6
|
+
* A key left out is inherited from the host the view was made over.
|
|
7
|
+
*/
|
|
8
|
+
export interface HostAttribution {
|
|
9
|
+
onBehalfOf?: OnBehalfOf;
|
|
10
|
+
causedBy?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The delivery a consumer's or an import's context runs for (#1237, #1901, #2055): the event
|
|
14
|
+
* whatever it emits was caused by, and the id its log lines join — a unit of async work with
|
|
15
|
+
* no call around it. Passed into the context, never kept on the scope: a field read across
|
|
16
|
+
* the handler's awaits is right only while nothing else in the scope can emit meanwhile.
|
|
17
|
+
* `ctx.log` alone reads the id; an event a consumer emits outside a call still records no
|
|
18
|
+
* invocation (#1525).
|
|
19
|
+
*/
|
|
20
|
+
export interface ConsumerDelivery {
|
|
21
|
+
causedBy: string;
|
|
22
|
+
invocationId: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A view of a host whose admin rows read `this.onBehalfOf` and `this.causedBy` (#977, #2055).
|
|
5
26
|
*
|
|
6
27
|
* The view is a Proxy over the host rather than a prototype child: reads of every
|
|
7
28
|
* field fall through to the host, and so do WRITES — a method that assigns
|
|
8
29
|
* `this.something` changes the host it was called on, exactly as it does without
|
|
9
|
-
* attribution. Only
|
|
10
|
-
* keeps two concurrent
|
|
30
|
+
* attribution. Only the attribution and `admin` answer from the view, which is what
|
|
31
|
+
* keeps two concurrent calls from seeing each other's person or each other's event.
|
|
32
|
+
* Never a field set on the host around an `await`: the host is shared, and anything
|
|
33
|
+
* else it serves while the await is suspended would be stamped with it (#2055).
|
|
11
34
|
*
|
|
12
35
|
* `buildAdmin` is the host's own, invoked with the view as `this`, so every closure
|
|
13
36
|
* it makes records through the view — as does every host method called on the view.
|
|
37
|
+
* It runs on the first read of the view's `admin`, not before: a view is made per
|
|
38
|
+
* executor delivery, and most never read it. A view of a view keeps what the inner one
|
|
39
|
+
* carries unless it names that key itself.
|
|
40
|
+
*/
|
|
41
|
+
export declare function attributedView<H extends {
|
|
42
|
+
admin: HostAdmin;
|
|
43
|
+
}>(host: H, attribution: HostAttribution, buildAdmin: (this: H) => HostAdmin): H;
|
|
44
|
+
/**
|
|
45
|
+
* `ScopeHost.attributed` for a host whose admin rows read `this.onBehalfOf` (#977) —
|
|
46
|
+
* `attributedView` with the person alone, kept for a host built against it.
|
|
14
47
|
*/
|
|
15
48
|
export declare function attributedHost<H extends {
|
|
16
49
|
admin: HostAdmin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD
|
|
1
|
+
{"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,EAC3D,IAAI,EAAE,CAAC,EACP,WAAW,EAAE,eAAe,EAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,GACjC,CAAC,CAWH;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,EAC3D,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,GACjC,CAAC,CAEH"}
|
package/dist/attribution.js
CHANGED
|
@@ -1,27 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* A view of a host whose admin rows read `this.onBehalfOf` and `this.causedBy` (#977, #2055).
|
|
3
3
|
*
|
|
4
4
|
* The view is a Proxy over the host rather than a prototype child: reads of every
|
|
5
5
|
* field fall through to the host, and so do WRITES — a method that assigns
|
|
6
6
|
* `this.something` changes the host it was called on, exactly as it does without
|
|
7
|
-
* attribution. Only
|
|
8
|
-
* keeps two concurrent
|
|
7
|
+
* attribution. Only the attribution and `admin` answer from the view, which is what
|
|
8
|
+
* keeps two concurrent calls from seeing each other's person or each other's event.
|
|
9
|
+
* Never a field set on the host around an `await`: the host is shared, and anything
|
|
10
|
+
* else it serves while the await is suspended would be stamped with it (#2055).
|
|
9
11
|
*
|
|
10
12
|
* `buildAdmin` is the host's own, invoked with the view as `this`, so every closure
|
|
11
13
|
* it makes records through the view — as does every host method called on the view.
|
|
14
|
+
* It runs on the first read of the view's `admin`, not before: a view is made per
|
|
15
|
+
* executor delivery, and most never read it. A view of a view keeps what the inner one
|
|
16
|
+
* carries unless it names that key itself.
|
|
12
17
|
*/
|
|
13
|
-
export function
|
|
18
|
+
export function attributedView(host, attribution, buildAdmin) {
|
|
14
19
|
let viewAdmin;
|
|
15
20
|
const view = new Proxy(host, {
|
|
16
21
|
get(target, prop) {
|
|
17
|
-
if (prop === 'onBehalfOf')
|
|
18
|
-
return onBehalfOf;
|
|
22
|
+
if (prop === 'onBehalfOf' && attribution.onBehalfOf !== undefined)
|
|
23
|
+
return attribution.onBehalfOf;
|
|
24
|
+
if (prop === 'causedBy' && attribution.causedBy !== undefined)
|
|
25
|
+
return attribution.causedBy;
|
|
19
26
|
if (prop === 'admin')
|
|
20
|
-
return viewAdmin;
|
|
27
|
+
return (viewAdmin ??= buildAdmin.call(view));
|
|
21
28
|
return Reflect.get(target, prop, target);
|
|
22
29
|
},
|
|
23
30
|
});
|
|
24
|
-
viewAdmin = buildAdmin.call(view);
|
|
25
31
|
return view;
|
|
26
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* `ScopeHost.attributed` for a host whose admin rows read `this.onBehalfOf` (#977) —
|
|
35
|
+
* `attributedView` with the person alone, kept for a host built against it.
|
|
36
|
+
*/
|
|
37
|
+
export function attributedHost(host, onBehalfOf, buildAdmin) {
|
|
38
|
+
return attributedView(host, { onBehalfOf }, buildAdmin);
|
|
39
|
+
}
|
|
27
40
|
//# sourceMappingURL=attribution.js.map
|