@secondlayer/shared 11.8.0 → 11.9.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/src/archive/range-digest.d.ts +31 -0
- package/dist/src/archive/semantic-digest-builder.d.ts +31 -0
- package/dist/src/coverage/index.d.ts +31 -0
- package/dist/src/coverage/index.js +13 -1
- package/dist/src/coverage/index.js.map +3 -3
- package/dist/src/db/index.d.ts +36 -1
- package/dist/src/db/index.js +2 -1
- package/dist/src/db/index.js.map +3 -3
- package/dist/src/db/queries/chain-reorgs.d.ts +31 -0
- package/dist/src/db/queries/chain-reorgs.js +2 -1
- package/dist/src/db/queries/chain-reorgs.js.map +3 -3
- package/dist/src/db/queries/contracts.d.ts +31 -0
- package/dist/src/db/queries/instance.d.ts +31 -0
- package/dist/src/db/queries/integrity.d.ts +31 -0
- package/dist/src/db/queries/subgraph-gaps.d.ts +31 -0
- package/dist/src/db/queries/subgraph-operations.d.ts +31 -0
- package/dist/src/db/queries/subgraphs.d.ts +31 -0
- package/dist/src/db/queries/sync-scope.d.ts +31 -0
- package/dist/src/db/queries/webhooks.d.ts +31 -0
- package/dist/src/db/schema.d.ts +35 -1
- package/dist/src/errors.d.ts +3 -3
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index-http.js +2 -2
- package/dist/src/index-http.js.map +3 -3
- package/dist/src/index-internal-auth.d.ts +3 -6
- package/dist/src/index-internal-auth.js +2 -2
- package/dist/src/index-internal-auth.js.map +3 -3
- package/dist/src/index.d.ts +56 -5
- package/dist/src/index.js +60 -5
- package/dist/src/index.js.map +7 -7
- package/dist/src/node/local-client.d.ts +31 -0
- package/dist/src/schemas/index.d.ts +8 -1
- package/dist/src/schemas/index.js +46 -5
- package/dist/src/schemas/index.js.map +4 -4
- package/dist/src/schemas/subgraphs.d.ts +1 -1
- package/dist/src/schemas/subgraphs.js.map +1 -1
- package/dist/src/schemas/webhooks.d.ts +19 -1
- package/dist/src/schemas/webhooks.js +51 -6
- package/dist/src/schemas/webhooks.js.map +3 -3
- package/migrations/0137_webhook_outbox_last_error.ts +27 -0
- package/migrations/0138_usage_ledger.ts +46 -0
- package/migrations/0139_webhook_outbox_block_time.ts +28 -0
- package/package.json +1 -1
|
@@ -782,6 +782,7 @@ interface Database {
|
|
|
782
782
|
coverage_segments: CoverageSegmentsTable;
|
|
783
783
|
stage_failures: StageFailuresTable;
|
|
784
784
|
archive_fetches: ArchiveFetchesTable;
|
|
785
|
+
usage_ledger: UsageLedgerTable;
|
|
785
786
|
waitlists: WaitlistsTable;
|
|
786
787
|
waitlist_signups: WaitlistSignupsTable;
|
|
787
788
|
}
|
|
@@ -826,6 +827,27 @@ interface ArchiveFetchesTable {
|
|
|
826
827
|
via_allowance: Generated<boolean>;
|
|
827
828
|
charged_at: Generated<Date>;
|
|
828
829
|
}
|
|
830
|
+
/**
|
|
831
|
+
* One metered ledger for every billable unit (archive partitions, hosted
|
|
832
|
+
* Index/Streams rows, and future hosted-stack meters). Append-only, written
|
|
833
|
+
* only by `meter()`. `idempotency_key` is UNIQUE so a retried submission
|
|
834
|
+
* no-ops instead of double-charging. `debited` is false when the balance
|
|
835
|
+
* (or a spend cap) refused the charge — the row still exists so the gap is
|
|
836
|
+
* visible, never silently dropped. `usd_micros` is negative for a Stripe
|
|
837
|
+
* top-up (`unit: "topup"`).
|
|
838
|
+
*/
|
|
839
|
+
interface UsageLedgerTable {
|
|
840
|
+
id: Generated<string>;
|
|
841
|
+
account_id: string;
|
|
842
|
+
unit: string;
|
|
843
|
+
quantity: string | number | bigint;
|
|
844
|
+
usd_micros: string | number | bigint;
|
|
845
|
+
debited: Generated<boolean>;
|
|
846
|
+
source: string;
|
|
847
|
+
idempotency_key: string;
|
|
848
|
+
occurred_at: Generated<Date>;
|
|
849
|
+
recorded_at: Generated<Date>;
|
|
850
|
+
}
|
|
829
851
|
type WebhookStatus = "active" | "paused" | "error";
|
|
830
852
|
/** Polymorphic webhook mode: `subgraph` reacts to processed table rows;
|
|
831
853
|
* `chain` reacts to raw chain events matched directly off the Index/Streams
|
|
@@ -884,10 +906,19 @@ interface WebhookOutboxTable {
|
|
|
884
906
|
next_attempt_at: Generated<Date>;
|
|
885
907
|
status: ColumnType<OutboxStatus, OutboxStatus | undefined, OutboxStatus>;
|
|
886
908
|
is_replay: Generated<boolean>;
|
|
909
|
+
/** The chain block_time of the matched event/tx. Null for rows written
|
|
910
|
+
* before this column existed, and for the settlement scan path (not yet
|
|
911
|
+
* wired). Lets `delivered_at - block_time` measure end-to-end webhook
|
|
912
|
+
* latency without a join to SOURCE-plane `blocks`. */
|
|
913
|
+
block_time: Date | null;
|
|
887
914
|
delivered_at: Date | null;
|
|
888
915
|
failed_at: Date | null;
|
|
889
916
|
locked_by: string | null;
|
|
890
917
|
locked_until: Date | null;
|
|
918
|
+
/** Set when a reorg marks an in-flight row `dead` instead of retrying it
|
|
919
|
+
* into an orphaned fork. Null otherwise — delivery failures track their
|
|
920
|
+
* history on `webhooks.last_error`, not per-row. */
|
|
921
|
+
last_error: string | null;
|
|
891
922
|
created_at: Generated<Date>;
|
|
892
923
|
}
|
|
893
924
|
interface WebhookDeliveriesTable {
|
|
@@ -782,6 +782,7 @@ interface Database {
|
|
|
782
782
|
coverage_segments: CoverageSegmentsTable;
|
|
783
783
|
stage_failures: StageFailuresTable;
|
|
784
784
|
archive_fetches: ArchiveFetchesTable;
|
|
785
|
+
usage_ledger: UsageLedgerTable;
|
|
785
786
|
waitlists: WaitlistsTable;
|
|
786
787
|
waitlist_signups: WaitlistSignupsTable;
|
|
787
788
|
}
|
|
@@ -826,6 +827,27 @@ interface ArchiveFetchesTable {
|
|
|
826
827
|
via_allowance: Generated<boolean>;
|
|
827
828
|
charged_at: Generated<Date>;
|
|
828
829
|
}
|
|
830
|
+
/**
|
|
831
|
+
* One metered ledger for every billable unit (archive partitions, hosted
|
|
832
|
+
* Index/Streams rows, and future hosted-stack meters). Append-only, written
|
|
833
|
+
* only by `meter()`. `idempotency_key` is UNIQUE so a retried submission
|
|
834
|
+
* no-ops instead of double-charging. `debited` is false when the balance
|
|
835
|
+
* (or a spend cap) refused the charge — the row still exists so the gap is
|
|
836
|
+
* visible, never silently dropped. `usd_micros` is negative for a Stripe
|
|
837
|
+
* top-up (`unit: "topup"`).
|
|
838
|
+
*/
|
|
839
|
+
interface UsageLedgerTable {
|
|
840
|
+
id: Generated<string>;
|
|
841
|
+
account_id: string;
|
|
842
|
+
unit: string;
|
|
843
|
+
quantity: string | number | bigint;
|
|
844
|
+
usd_micros: string | number | bigint;
|
|
845
|
+
debited: Generated<boolean>;
|
|
846
|
+
source: string;
|
|
847
|
+
idempotency_key: string;
|
|
848
|
+
occurred_at: Generated<Date>;
|
|
849
|
+
recorded_at: Generated<Date>;
|
|
850
|
+
}
|
|
829
851
|
type WebhookStatus = "active" | "paused" | "error";
|
|
830
852
|
/** Polymorphic webhook mode: `subgraph` reacts to processed table rows;
|
|
831
853
|
* `chain` reacts to raw chain events matched directly off the Index/Streams
|
|
@@ -884,10 +906,19 @@ interface WebhookOutboxTable {
|
|
|
884
906
|
next_attempt_at: Generated<Date>;
|
|
885
907
|
status: ColumnType<OutboxStatus, OutboxStatus | undefined, OutboxStatus>;
|
|
886
908
|
is_replay: Generated<boolean>;
|
|
909
|
+
/** The chain block_time of the matched event/tx. Null for rows written
|
|
910
|
+
* before this column existed, and for the settlement scan path (not yet
|
|
911
|
+
* wired). Lets `delivered_at - block_time` measure end-to-end webhook
|
|
912
|
+
* latency without a join to SOURCE-plane `blocks`. */
|
|
913
|
+
block_time: Date | null;
|
|
887
914
|
delivered_at: Date | null;
|
|
888
915
|
failed_at: Date | null;
|
|
889
916
|
locked_by: string | null;
|
|
890
917
|
locked_until: Date | null;
|
|
918
|
+
/** Set when a reorg marks an in-flight row `dead` instead of retrying it
|
|
919
|
+
* into an orphaned fork. Null otherwise — delivery failures track their
|
|
920
|
+
* history on `webhooks.last_error`, not per-row. */
|
|
921
|
+
last_error: string | null;
|
|
891
922
|
created_at: Generated<Date>;
|
|
892
923
|
}
|
|
893
924
|
interface WebhookDeliveriesTable {
|
|
@@ -1099,6 +1099,7 @@ interface Database {
|
|
|
1099
1099
|
coverage_segments: CoverageSegmentsTable;
|
|
1100
1100
|
stage_failures: StageFailuresTable;
|
|
1101
1101
|
archive_fetches: ArchiveFetchesTable;
|
|
1102
|
+
usage_ledger: UsageLedgerTable;
|
|
1102
1103
|
waitlists: WaitlistsTable;
|
|
1103
1104
|
waitlist_signups: WaitlistSignupsTable;
|
|
1104
1105
|
}
|
|
@@ -1143,6 +1144,27 @@ interface ArchiveFetchesTable {
|
|
|
1143
1144
|
via_allowance: Generated<boolean>;
|
|
1144
1145
|
charged_at: Generated<Date>;
|
|
1145
1146
|
}
|
|
1147
|
+
/**
|
|
1148
|
+
* One metered ledger for every billable unit (archive partitions, hosted
|
|
1149
|
+
* Index/Streams rows, and future hosted-stack meters). Append-only, written
|
|
1150
|
+
* only by `meter()`. `idempotency_key` is UNIQUE so a retried submission
|
|
1151
|
+
* no-ops instead of double-charging. `debited` is false when the balance
|
|
1152
|
+
* (or a spend cap) refused the charge — the row still exists so the gap is
|
|
1153
|
+
* visible, never silently dropped. `usd_micros` is negative for a Stripe
|
|
1154
|
+
* top-up (`unit: "topup"`).
|
|
1155
|
+
*/
|
|
1156
|
+
interface UsageLedgerTable {
|
|
1157
|
+
id: Generated<string>;
|
|
1158
|
+
account_id: string;
|
|
1159
|
+
unit: string;
|
|
1160
|
+
quantity: string | number | bigint;
|
|
1161
|
+
usd_micros: string | number | bigint;
|
|
1162
|
+
debited: Generated<boolean>;
|
|
1163
|
+
source: string;
|
|
1164
|
+
idempotency_key: string;
|
|
1165
|
+
occurred_at: Generated<Date>;
|
|
1166
|
+
recorded_at: Generated<Date>;
|
|
1167
|
+
}
|
|
1146
1168
|
type WebhookStatus = "active" | "paused" | "error";
|
|
1147
1169
|
/** Polymorphic webhook mode: `subgraph` reacts to processed table rows;
|
|
1148
1170
|
* `chain` reacts to raw chain events matched directly off the Index/Streams
|
|
@@ -1201,10 +1223,19 @@ interface WebhookOutboxTable {
|
|
|
1201
1223
|
next_attempt_at: Generated<Date>;
|
|
1202
1224
|
status: ColumnType<OutboxStatus, OutboxStatus | undefined, OutboxStatus>;
|
|
1203
1225
|
is_replay: Generated<boolean>;
|
|
1226
|
+
/** The chain block_time of the matched event/tx. Null for rows written
|
|
1227
|
+
* before this column existed, and for the settlement scan path (not yet
|
|
1228
|
+
* wired). Lets `delivered_at - block_time` measure end-to-end webhook
|
|
1229
|
+
* latency without a join to SOURCE-plane `blocks`. */
|
|
1230
|
+
block_time: Date | null;
|
|
1204
1231
|
delivered_at: Date | null;
|
|
1205
1232
|
failed_at: Date | null;
|
|
1206
1233
|
locked_by: string | null;
|
|
1207
1234
|
locked_until: Date | null;
|
|
1235
|
+
/** Set when a reorg marks an in-flight row `dead` instead of retrying it
|
|
1236
|
+
* into an orphaned fork. Null otherwise — delivery failures track their
|
|
1237
|
+
* history on `webhooks.last_error`, not per-row. */
|
|
1238
|
+
last_error: string | null;
|
|
1208
1239
|
created_at: Generated<Date>;
|
|
1209
1240
|
}
|
|
1210
1241
|
interface WebhookDeliveriesTable {
|
|
@@ -134,6 +134,18 @@ function compareStreamsCursor(a, b) {
|
|
|
134
134
|
function isEmptyRangeCursor(cursor) {
|
|
135
135
|
return cursor.event_index === EMPTY_RANGE_EVENT_INDEX_SENTINEL;
|
|
136
136
|
}
|
|
137
|
+
function committedHeight(cursor) {
|
|
138
|
+
if (!cursor)
|
|
139
|
+
return null;
|
|
140
|
+
try {
|
|
141
|
+
const decoded = decodeStreamsCursor(cursor);
|
|
142
|
+
if (isEmptyRangeCursor(decoded))
|
|
143
|
+
return decoded.block_height;
|
|
144
|
+
return Math.max(0, decoded.block_height - 1);
|
|
145
|
+
} catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
137
149
|
function blockEndCursor(height) {
|
|
138
150
|
return {
|
|
139
151
|
block_height: height,
|
|
@@ -1453,5 +1465,5 @@ export {
|
|
|
1453
1465
|
versionsEqual
|
|
1454
1466
|
};
|
|
1455
1467
|
|
|
1456
|
-
//# debugId=
|
|
1468
|
+
//# debugId=6B6F94DD9F9ED6C564756E2164756E21
|
|
1457
1469
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"sources": ["../src/coverage/constraints.ts", "../src/streams-cursor.ts", "../src/coverage/evaluate.ts", "../src/coverage/runner.ts", "../src/coverage/decoder-clock.ts", "../src/coverage/adapter.ts", "../src/coverage/sealer.ts", "../src/coverage/effect-manifest.ts", "../src/coverage/subgraph-adapter.ts", "../src/coverage/sparse.ts", "../src/coverage/deep-verify.ts", "../src/coverage/queue.ts", "../src/coverage/repair.ts", "../src/coverage/verify-target.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Coverage-kernel constraints. SQL CHECKs in migration 0116 must stay\n * identical — property tests treat this file as the spec.\n */\n\nexport const STAGE_KINDS = [\"raw\", \"decode\", \"subgraph\", \"queue\"] as const;\nexport type StageKind = (typeof STAGE_KINDS)[number];\n\nexport const NATIVE_CLOCKS = [\"block\", \"cursor\", \"queue\"] as const;\nexport type NativeClock = (typeof NATIVE_CLOCKS)[number];\n\nexport const REPAIR_MODES = [\n\t\"range_safe\",\n\t\"full_reindex\",\n\t\"archive_replay\",\n\t\"none\",\n] as const;\nexport type RepairMode = (typeof REPAIR_MODES)[number];\n\nexport const RUN_STATUSES = [\n\t\"pending\",\n\t\"running\",\n\t\"complete\",\n\t\"syncing\",\n\t\"lagging\",\n\t\"gap\",\n\t\"stale\",\n\t\"failed\",\n\t\"unverified_import\",\n\t\"unanchored\",\n\t\"source_unavailable\",\n\t\"out_of_scope\",\n\t\"disabled\",\n\t\"halted\",\n] as const;\nexport type RunStatus = (typeof RUN_STATUSES)[number];\n\nexport const FAILURE_UNITS = [\"block\", \"range\", \"cursor\", \"queue\"] as const;\nexport type FailureUnit = (typeof FAILURE_UNITS)[number];\n\nexport const FAILURE_CLASSES = [\n\t\"omission\",\n\t\"version\",\n\t\"digest_mismatch\",\n\t\"crash\",\n\t\"reorg\",\n\t\"source_gap\",\n\t\"handler\",\n\t\"timeout\",\n\t\"unknown\",\n] as const;\nexport type FailureClass = (typeof FAILURE_CLASSES)[number];\n\nexport const RETRY_STATES = [\"open\", \"retrying\", \"halted\", \"resolved\"] as const;\nexport type RetryState = (typeof RETRY_STATES)[number];\n\n/** Default failure retention after `created_at`. */\nexport const FAILURE_RETENTION_DAYS = 30;\n\nexport type CoverageRange = {\n\tfrom_height: number;\n\tto_height: number;\n};\n\nexport type ReceiptRow = {\n\tblock_height: number;\n\tinput_count: number;\n\tfinalized: boolean;\n\tcompacted_at: Date | null;\n};\n\nexport type FailureRow = {\n\tfrom_height: number | null;\n\tto_height: number | null;\n\tretry_state: RetryState;\n\tretry_count: number;\n\tresolved_at: Date | null;\n\tcreated_at: Date;\n\tretain_until: Date;\n};\n\nfunction isMember<T extends string>(\n\tset: readonly T[],\n\tvalue: string,\n): value is T {\n\treturn (set as readonly string[]).includes(value);\n}\n\nexport function isStageKind(value: string): value is StageKind {\n\treturn isMember(STAGE_KINDS, value);\n}\n\nexport function isNativeClock(value: string): value is NativeClock {\n\treturn isMember(NATIVE_CLOCKS, value);\n}\n\nexport function isRepairMode(value: string): value is RepairMode {\n\treturn isMember(REPAIR_MODES, value);\n}\n\nexport function isRunStatus(value: string): value is RunStatus {\n\treturn isMember(RUN_STATUSES, value);\n}\n\nexport function isFailureUnit(value: string): value is FailureUnit {\n\treturn isMember(FAILURE_UNITS, value);\n}\n\nexport function isFailureClass(value: string): value is FailureClass {\n\treturn isMember(FAILURE_CLASSES, value);\n}\n\nexport function isRetryState(value: string): value is RetryState {\n\treturn isMember(RETRY_STATES, value);\n}\n\nexport function isNonNegativeInt(value: number): boolean {\n\treturn Number.isSafeInteger(value) && value >= 0;\n}\n\nexport function rangeIsOrdered(from: number, to: number): boolean {\n\treturn isNonNegativeInt(from) && isNonNegativeInt(to) && from <= to;\n}\n\n/** Compacted receipts must already be finalized. */\nexport function receiptRetentionHolds(row: ReceiptRow): boolean {\n\tif (!isNonNegativeInt(row.block_height)) return false;\n\tif (!isNonNegativeInt(row.input_count)) return false;\n\tif (row.compacted_at !== null && !row.finalized) return false;\n\treturn true;\n}\n\nexport function failureRangeHolds(row: FailureRow): boolean {\n\tif (row.from_height !== null && !isNonNegativeInt(row.from_height)) {\n\t\treturn false;\n\t}\n\tif (row.to_height !== null && !isNonNegativeInt(row.to_height)) {\n\t\treturn false;\n\t}\n\tif (\n\t\trow.from_height !== null &&\n\t\trow.to_height !== null &&\n\t\trow.from_height > row.to_height\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/** Resolved rows need `resolved_at`; open rows keep `retain_until` ≥ created. */\nexport function failureRetentionHolds(row: FailureRow): boolean {\n\tif (!isNonNegativeInt(row.retry_count)) return false;\n\tif (row.retain_until.getTime() < row.created_at.getTime()) return false;\n\tif (row.retry_state === \"resolved\") return row.resolved_at !== null;\n\treturn true;\n}\n\n/** Two closed ranges on the same stage must not overlap. */\nexport function segmentsOverlap(a: CoverageRange, b: CoverageRange): boolean {\n\treturn a.from_height <= b.to_height && b.from_height <= a.to_height;\n}\n\nexport function defaultRetainUntil(createdAt: Date): Date {\n\treturn new Date(\n\t\tcreatedAt.getTime() + FAILURE_RETENTION_DAYS * 24 * 60 * 60 * 1000,\n\t);\n}\n",
|
|
6
|
-
"/**\n * Canonical Streams cursor codec, shared by every product (Streams, Index,\n * Datasets, bulk). A cursor is `\"<block_height>:<event_index>\"` — an opaque,\n * monotonic resume token. One implementation so encode/decode and the\n * empty-range sentinel can never drift between products.\n *\n * NOTE: this codec IS the shared piece worth centralizing. A broader \"shared\n * canonical reader\" across the ~10 raw-event query sites (streams-events,\n * streams-bulk/query, l2/storage) was deliberately NOT built: those sites split\n * into distinct query patterns and share only the row_number ordering *pattern*,\n * not an identical reader. The reorg-archive design (migration 0084) keeps the\n * main tables canonical-only, so each reader's `WHERE canonical` filter already\n * needs no dedup logic. Forcing one mega-reader was the wrong abstraction; this\n * codec captures the only part that actually drifts.\n */\n\nexport type StreamsCursor = {\n\tblock_height: number;\n\tevent_index: number;\n};\n\n/**\n * Event index used to advance a cursor past a fully-filtered range instead of\n * returning null. A filter that eliminates every event in a scanned range would\n * otherwise pin the consumer at the previous cursor and spin forever. Must fit\n * in Postgres int4 (the `stream_event_index` column type) — int4 max is plenty,\n * real blocks have far fewer than ~2.1B events.\n */\nexport const EMPTY_RANGE_EVENT_INDEX_SENTINEL = 2_147_483_647;\n\nexport function encodeStreamsCursor(cursor: StreamsCursor): string {\n\treturn `${cursor.block_height}:${cursor.event_index}`;\n}\n\nexport function decodeStreamsCursor(cursor: string): StreamsCursor {\n\tconst match = /^(0|[1-9]\\d*):(0|[1-9]\\d*)$/.exec(cursor);\n\tif (!match) {\n\t\tthrow new Error(\"Invalid Streams cursor\");\n\t}\n\n\tconst decoded = {\n\t\tblock_height: Number(match[1]),\n\t\tevent_index: Number(match[2]),\n\t};\n\n\tif (\n\t\t!Number.isSafeInteger(decoded.block_height) ||\n\t\t!Number.isSafeInteger(decoded.event_index)\n\t) {\n\t\tthrow new Error(\"Invalid Streams cursor\");\n\t}\n\n\treturn decoded;\n}\n\nexport function compareStreamsCursor(\n\ta: StreamsCursor,\n\tb: StreamsCursor,\n): number {\n\tif (a.block_height !== b.block_height) {\n\t\treturn a.block_height < b.block_height ? -1 : 1;\n\t}\n\tif (a.event_index !== b.event_index) {\n\t\treturn a.event_index < b.event_index ? -1 : 1;\n\t}\n\treturn 0;\n}\n\nexport function isEmptyRangeCursor(cursor: StreamsCursor): boolean {\n\treturn cursor.event_index === EMPTY_RANGE_EVENT_INDEX_SENTINEL;\n}\n\n/** Exclusive end of every event that can live in `height`. */\nexport function blockEndCursor(height: number): StreamsCursor {\n\treturn {\n\t\tblock_height: height,\n\t\tevent_index: EMPTY_RANGE_EVENT_INDEX_SENTINEL,\n\t};\n}\n",
|
|
6
|
+
"/**\n * Canonical Streams cursor codec, shared by every product (Streams, Index,\n * Datasets, bulk). A cursor is `\"<block_height>:<event_index>\"` — an opaque,\n * monotonic resume token. One implementation so encode/decode and the\n * empty-range sentinel can never drift between products.\n *\n * NOTE: this codec IS the shared piece worth centralizing. A broader \"shared\n * canonical reader\" across the ~10 raw-event query sites (streams-events,\n * streams-bulk/query, l2/storage) was deliberately NOT built: those sites split\n * into distinct query patterns and share only the row_number ordering *pattern*,\n * not an identical reader. The reorg-archive design (migration 0084) keeps the\n * main tables canonical-only, so each reader's `WHERE canonical` filter already\n * needs no dedup logic. Forcing one mega-reader was the wrong abstraction; this\n * codec captures the only part that actually drifts.\n */\n\nexport type StreamsCursor = {\n\tblock_height: number;\n\tevent_index: number;\n};\n\n/**\n * Event index used to advance a cursor past a fully-filtered range instead of\n * returning null. A filter that eliminates every event in a scanned range would\n * otherwise pin the consumer at the previous cursor and spin forever. Must fit\n * in Postgres int4 (the `stream_event_index` column type) — int4 max is plenty,\n * real blocks have far fewer than ~2.1B events.\n */\nexport const EMPTY_RANGE_EVENT_INDEX_SENTINEL = 2_147_483_647;\n\nexport function encodeStreamsCursor(cursor: StreamsCursor): string {\n\treturn `${cursor.block_height}:${cursor.event_index}`;\n}\n\nexport function decodeStreamsCursor(cursor: string): StreamsCursor {\n\tconst match = /^(0|[1-9]\\d*):(0|[1-9]\\d*)$/.exec(cursor);\n\tif (!match) {\n\t\tthrow new Error(\"Invalid Streams cursor\");\n\t}\n\n\tconst decoded = {\n\t\tblock_height: Number(match[1]),\n\t\tevent_index: Number(match[2]),\n\t};\n\n\tif (\n\t\t!Number.isSafeInteger(decoded.block_height) ||\n\t\t!Number.isSafeInteger(decoded.event_index)\n\t) {\n\t\tthrow new Error(\"Invalid Streams cursor\");\n\t}\n\n\treturn decoded;\n}\n\nexport function compareStreamsCursor(\n\ta: StreamsCursor,\n\tb: StreamsCursor,\n): number {\n\tif (a.block_height !== b.block_height) {\n\t\treturn a.block_height < b.block_height ? -1 : 1;\n\t}\n\tif (a.event_index !== b.event_index) {\n\t\treturn a.event_index < b.event_index ? -1 : 1;\n\t}\n\treturn 0;\n}\n\nexport function isEmptyRangeCursor(cursor: StreamsCursor): boolean {\n\treturn cursor.event_index === EMPTY_RANGE_EVENT_INDEX_SENTINEL;\n}\n\n/**\n * Highest height a cursor has fully committed. Mid-block (`H:n`, n not the\n * empty-range sentinel) means the rest of H is still in flight — the\n * committed floor is H-1. Sentinel `H:2147483647` means H is done. One\n * implementation shared by every reader of a decoder/consumer checkpoint\n * (Subgraphs' `decoderBoundTip`, the Index `/public/status` route) so the\n * rule can never drift between them.\n */\nexport function committedHeight(\n\tcursor: string | null | undefined,\n): number | null {\n\tif (!cursor) return null;\n\ttry {\n\t\tconst decoded = decodeStreamsCursor(cursor);\n\t\tif (isEmptyRangeCursor(decoded)) return decoded.block_height;\n\t\treturn Math.max(0, decoded.block_height - 1);\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Exclusive end of every event that can live in `height`. */\nexport function blockEndCursor(height: number): StreamsCursor {\n\treturn {\n\t\tblock_height: height,\n\t\tevent_index: EMPTY_RANGE_EVENT_INDEX_SENTINEL,\n\t};\n}\n",
|
|
7
7
|
"/**\n * Coverage evaluator — one library for stage state.\n *\n * Pure. Callers assemble evidence; this file does not touch the database.\n * `complete` is coverage through the recorded target, not currency.\n * `caught_up` additionally requires a fresh source tip and coverage through\n * the finalized boundary. `complete_through` is never conflated with\n * `source_tip`.\n */\n\nimport { decodeStreamsCursor } from \"../streams-cursor.ts\";\nimport {\n\ttype CoverageRange,\n\ttype FailureClass,\n\ttype FailureUnit,\n\ttype NativeClock,\n\ttype RepairMode,\n\ttype RetryState,\n\ttype RunStatus,\n\ttype StageKind,\n\trangeIsOrdered,\n} from \"./constraints.ts\";\n\nexport const COVERAGE_REPORT_SCHEMA_VERSION = 1 as const;\n\nexport const COVERAGE_STATES = [\n\t\"complete\",\n\t\"syncing\",\n\t\"lagging\",\n\t\"gap\",\n\t\"stale\",\n\t\"failed\",\n\t\"unverified_import\",\n\t\"unanchored\",\n\t\"source_unavailable\",\n\t\"out_of_scope\",\n\t\"disabled\",\n] as const;\nexport type CoverageState = (typeof COVERAGE_STATES)[number];\n\nconst HARD_DEP_STATES = new Set<CoverageState>([\n\t\"disabled\",\n\t\"failed\",\n\t\"source_unavailable\",\n\t\"out_of_scope\",\n\t\"unverified_import\",\n\t\"unanchored\",\n\t\"gap\",\n]);\n\nconst DEFAULT_MAX_BLOCKS_BEHIND_FINALIZED = 256;\nconst DEFAULT_MAX_SOURCE_AGE_SECONDS = 300;\n\nexport type BootstrapSource = \"archive\" | \"genesis\" | \"import\";\n\nexport type SyncScope = {\n\tnetwork: string;\n\tstart_height: number;\n\ttarget_height: number | null;\n\tbootstrap: {\n\t\tsource: BootstrapSource;\n\t\tmanifest_digest: string | null;\n\t\tgenesis_hash: string | null;\n\t};\n};\n\nexport type StageDeclaration = {\n\tid: string;\n\tkind: StageKind;\n\tdepends_on: string | null;\n\tnative_clock: NativeClock;\n\tproducer_version: string;\n\trepair_mode: RepairMode;\n\tenabled: boolean;\n};\n\nexport type StageRunView = {\n\tstage_id: string;\n\tcode_hash: string;\n\tconfig_hash: string;\n\thandler_hash: string | null;\n\ttarget_height: number | null;\n\ttarget_cursor: string | null;\n\tstatus: RunStatus;\n\tcomplete_through: number | null;\n};\n\nexport type OpenFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n};\n\nexport type QueueCounters = {\n\taccepted: number;\n\tdecided: number;\n\tenqueued: number;\n\tdelivered: number;\n\tdead: number;\n\tfence_cursor: string | null;\n};\n\nexport type StageEvidence = {\n\tstage_id: string;\n\tranges: CoverageRange[];\n\topen_failures: OpenFailure[];\n\tcursor: string | null;\n\tqueue: QueueCounters | null;\n\tunanchored: boolean;\n\tunverified_import: boolean;\n\t/** False when this stage's native source (node, bitcoin RPC, …) is down. */\n\tsource_available: boolean;\n};\n\nexport type SourceClock = {\n\ttip_height: number | null;\n\tfinalized_height: number | null;\n\tobserved_at: string | null;\n};\n\nexport type EvaluatorOptions = {\n\tnow: Date;\n\tmaxBlocksBehindFinalized?: number;\n\tmaxSourceAgeSeconds?: number;\n};\n\nexport type EvaluatorInput = {\n\tscope: SyncScope;\n\tstages: StageDeclaration[];\n\truns: StageRunView[];\n\tevidence: StageEvidence[];\n\tsource: SourceClock;\n\toptions: EvaluatorOptions;\n};\n\nexport type StageCoverage = {\n\tstage_id: string;\n\tkind: StageKind;\n\tnative_clock: NativeClock;\n\tdepends_on: string | null;\n\tstate: CoverageState;\n\tdetail: string;\n\tcomplete_through: number | null;\n\tsource_tip: number | null;\n\tfinalized_height: number | null;\n\trecorded_target: number | null;\n\tdeclared_range: { from_height: number; to_height: number } | null;\n\tgaps: CoverageRange[];\n\tcaught_up: boolean;\n\tblocked_by: string | null;\n};\n\nexport type CoverageReport = {\n\tschema_version: typeof COVERAGE_REPORT_SCHEMA_VERSION;\n\tnetwork: string;\n\tgenerated_at: string;\n\tsource_tip: number | null;\n\tfinalized_height: number | null;\n\tstages: StageCoverage[];\n\tevaluation_order: string[];\n\tcycles: string[][];\n};\n\nexport function mergeRanges(ranges: readonly CoverageRange[]): CoverageRange[] {\n\tconst sorted = ranges\n\t\t.filter((r) => rangeIsOrdered(r.from_height, r.to_height))\n\t\t.map((r) => ({ from_height: r.from_height, to_height: r.to_height }))\n\t\t.sort((a, b) => a.from_height - b.from_height || a.to_height - b.to_height);\n\tconst out: CoverageRange[] = [];\n\tfor (const range of sorted) {\n\t\tconst last = out[out.length - 1];\n\t\tif (last && range.from_height <= last.to_height + 1) {\n\t\t\tlast.to_height = Math.max(last.to_height, range.to_height);\n\t\t} else {\n\t\t\tout.push(range);\n\t\t}\n\t}\n\treturn out;\n}\n\n/** Highest height reachable from `start` without a hole. */\nexport function contiguousThrough(\n\tranges: readonly CoverageRange[],\n\tstart: number,\n): number | null {\n\tconst merged = mergeRanges(ranges);\n\tlet through: number | null = null;\n\tlet need = start;\n\tfor (const range of merged) {\n\t\tif (range.to_height < need) continue;\n\t\tif (range.from_height > need) break;\n\t\tthrough = range.to_height;\n\t\tneed = range.to_height + 1;\n\t}\n\treturn through;\n}\n\nexport function findRangeGaps(\n\tranges: readonly CoverageRange[],\n\tfrom: number,\n\tto: number,\n): CoverageRange[] {\n\tif (to < from) return [];\n\tconst merged = mergeRanges(ranges);\n\tconst gaps: CoverageRange[] = [];\n\tlet cursor = from;\n\tfor (const range of merged) {\n\t\tif (range.to_height < from) continue;\n\t\tif (range.from_height > to) break;\n\t\tif (range.from_height > cursor) {\n\t\t\tgaps.push({\n\t\t\t\tfrom_height: cursor,\n\t\t\t\tto_height: Math.min(range.from_height - 1, to),\n\t\t\t});\n\t\t}\n\t\tcursor = Math.max(cursor, range.to_height + 1);\n\t\tif (cursor > to) break;\n\t}\n\tif (cursor <= to) {\n\t\tgaps.push({ from_height: cursor, to_height: to });\n\t}\n\treturn gaps;\n}\n\nexport function cursorHeight(cursor: string | null): number | null {\n\tif (!cursor) return null;\n\ttry {\n\t\treturn decodeStreamsCursor(cursor).block_height;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function topoSort(stages: readonly StageDeclaration[]): {\n\torder: string[];\n\tcycles: string[][];\n} {\n\tconst ids = new Set(stages.map((s) => s.id));\n\tconst incoming = new Map<string, number>();\n\tconst outgoing = new Map<string, string[]>();\n\tfor (const stage of stages) {\n\t\tincoming.set(stage.id, 0);\n\t\toutgoing.set(stage.id, []);\n\t}\n\tfor (const stage of stages) {\n\t\tif (!stage.depends_on || !ids.has(stage.depends_on)) continue;\n\t\toutgoing.get(stage.depends_on)?.push(stage.id);\n\t\tincoming.set(stage.id, (incoming.get(stage.id) ?? 0) + 1);\n\t}\n\tconst queue = [...incoming.entries()]\n\t\t.filter(([, n]) => n === 0)\n\t\t.map(([id]) => id)\n\t\t.sort();\n\tconst order: string[] = [];\n\twhile (queue.length > 0) {\n\t\tconst id = queue.shift();\n\t\tif (!id) break;\n\t\torder.push(id);\n\t\tfor (const next of outgoing.get(id) ?? []) {\n\t\t\tconst left = (incoming.get(next) ?? 1) - 1;\n\t\t\tincoming.set(next, left);\n\t\t\tif (left === 0) queue.push(next);\n\t\t\tqueue.sort();\n\t\t}\n\t}\n\tconst leftover = stages.map((s) => s.id).filter((id) => !order.includes(id));\n\treturn { order, cycles: leftover.length > 0 ? [leftover.sort()] : [] };\n}\n\nfunction lastByStage<T extends { stage_id: string }>(\n\trows: readonly T[],\n): Map<string, T> {\n\tconst map = new Map<string, T>();\n\tfor (const row of rows) map.set(row.stage_id, row);\n\treturn map;\n}\n\nfunction emptyEvidence(stageId: string): StageEvidence {\n\treturn {\n\t\tstage_id: stageId,\n\t\tranges: [],\n\t\topen_failures: [],\n\t\tcursor: null,\n\t\tqueue: null,\n\t\tunanchored: false,\n\t\tunverified_import: false,\n\t\tsource_available: true,\n\t};\n}\n\nfunction declaredEnd(args: {\n\trun: StageRunView | undefined;\n\tscope: SyncScope;\n\tsource: SourceClock;\n}): number | null {\n\treturn (\n\t\targs.run?.target_height ??\n\t\targs.scope.target_height ??\n\t\targs.source.finalized_height ??\n\t\targs.source.tip_height\n\t);\n}\n\nfunction clockRanges(\n\tstage: StageDeclaration,\n\tevidence: StageEvidence,\n): {\n\tranges: CoverageRange[];\n\tinvalidCursor: boolean;\n} {\n\tif (stage.native_clock === \"block\") {\n\t\treturn { ranges: evidence.ranges, invalidCursor: false };\n\t}\n\tconst cursor =\n\t\tstage.native_clock === \"cursor\"\n\t\t\t? evidence.cursor\n\t\t\t: (evidence.queue?.fence_cursor ?? null);\n\tif (!cursor) return { ranges: evidence.ranges, invalidCursor: false };\n\tconst height = cursorHeight(cursor);\n\tif (height === null) return { ranges: evidence.ranges, invalidCursor: true };\n\treturn {\n\t\tranges: mergeRanges([\n\t\t\t...evidence.ranges,\n\t\t\t{ from_height: 0, to_height: height },\n\t\t]),\n\t\tinvalidCursor: false,\n\t};\n}\n\nfunction queueCaught(queue: QueueCounters | null): boolean {\n\tif (!queue) return false;\n\treturn (\n\t\tqueue.accepted === queue.decided &&\n\t\tqueue.delivered + queue.dead === queue.accepted\n\t);\n}\n\nfunction sourceAgeSeconds(source: SourceClock, now: Date): number | null {\n\tif (!source.observed_at) return source.tip_height === null ? null : 0;\n\tconst observed = Date.parse(source.observed_at);\n\tif (Number.isNaN(observed)) return null;\n\treturn Math.max(0, Math.round((now.getTime() - observed) / 1000));\n}\n\nfunction evaluateOne(\n\tstage: StageDeclaration,\n\tinput: EvaluatorInput,\n\trun: StageRunView | undefined,\n\tevidence: StageEvidence,\n\tdep: StageCoverage | null,\n\tmissingDep: boolean,\n\tinCycle: boolean,\n): StageCoverage {\n\tconst sourceTip = input.source.tip_height;\n\tconst finalized = input.source.finalized_height;\n\tconst recordedTarget = run?.target_height ?? input.scope.target_height;\n\tconst maxBehind =\n\t\tinput.options.maxBlocksBehindFinalized ??\n\t\tDEFAULT_MAX_BLOCKS_BEHIND_FINALIZED;\n\tconst maxAge =\n\t\tinput.options.maxSourceAgeSeconds ?? DEFAULT_MAX_SOURCE_AGE_SECONDS;\n\tconst age = sourceAgeSeconds(input.source, input.options.now);\n\tconst sourceFresh =\n\t\tsourceTip !== null && finalized !== null && (age === null || age <= maxAge);\n\n\tconst base = {\n\t\tstage_id: stage.id,\n\t\tkind: stage.kind,\n\t\tnative_clock: stage.native_clock,\n\t\tdepends_on: stage.depends_on,\n\t\tsource_tip: sourceTip,\n\t\tfinalized_height: finalized,\n\t\trecorded_target: recordedTarget,\n\t};\n\n\tconst done = (\n\t\tstate: CoverageState,\n\t\tdetail: string,\n\t\textra: Partial<StageCoverage> = {},\n\t): StageCoverage => {\n\t\tconst completeThrough = extra.complete_through ?? null;\n\t\tconst caughtUp =\n\t\t\textra.caught_up ??\n\t\t\t(state !== \"disabled\" &&\n\t\t\t\tstate !== \"failed\" &&\n\t\t\t\tstate !== \"gap\" &&\n\t\t\t\tstate !== \"out_of_scope\" &&\n\t\t\t\tstate !== \"unverified_import\" &&\n\t\t\t\tstate !== \"unanchored\" &&\n\t\t\t\tstate !== \"source_unavailable\" &&\n\t\t\t\tcompleteThrough !== null &&\n\t\t\t\tfinalized !== null &&\n\t\t\t\tcompleteThrough >= finalized &&\n\t\t\t\tsourceFresh);\n\t\treturn {\n\t\t\t...base,\n\t\t\tstate,\n\t\t\tdetail,\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: extra.declared_range ?? null,\n\t\t\tgaps: extra.gaps ?? [],\n\t\t\tcaught_up: caughtUp,\n\t\t\tblocked_by: extra.blocked_by ?? null,\n\t\t};\n\t};\n\n\tif (!stage.enabled) {\n\t\treturn done(\"disabled\", \"stage is disabled\");\n\t}\n\tif (inCycle) {\n\t\treturn done(\"failed\", \"dependency cycle\");\n\t}\n\tif (missingDep) {\n\t\treturn done(\"failed\", `depends on unknown stage ${stage.depends_on}`);\n\t}\n\tif (dep && HARD_DEP_STATES.has(dep.state)) {\n\t\treturn done(dep.state, `blocked by ${dep.stage_id}: ${dep.detail}`, {\n\t\t\tcomplete_through: dep.complete_through,\n\t\t\tblocked_by: dep.stage_id,\n\t\t\tdeclared_range: dep.declared_range,\n\t\t\tgaps: dep.gaps,\n\t\t\tcaught_up: false,\n\t\t});\n\t}\n\n\tif (evidence.open_failures.length > 0 || run?.status === \"failed\") {\n\t\tconst first = evidence.open_failures[0];\n\t\treturn done(\n\t\t\t\"failed\",\n\t\t\tfirst\n\t\t\t\t? `open ${first.class} failure (${first.retry_state})`\n\t\t\t\t: \"run marked failed\",\n\t\t);\n\t}\n\tif (evidence.unverified_import || run?.status === \"unverified_import\") {\n\t\treturn done(\"unverified_import\", \"imported data has not been audited\");\n\t}\n\tif (evidence.unanchored || run?.status === \"unanchored\") {\n\t\treturn done(\n\t\t\t\"unanchored\",\n\t\t\t\"receipts are missing a block hash or node anchor\",\n\t\t);\n\t}\n\tif (!evidence.source_available) {\n\t\treturn done(\"source_unavailable\", \"native source is unavailable\");\n\t}\n\n\tconst { ranges, invalidCursor } = clockRanges(stage, evidence);\n\tif (invalidCursor) {\n\t\treturn done(\"failed\", \"native clock cursor is not a valid streams cursor\");\n\t}\n\n\tconst end = declaredEnd({ run, scope: input.scope, source: input.source });\n\tif (end !== null && end < input.scope.start_height) {\n\t\treturn done(\"out_of_scope\", \"recorded target is below the instance start\");\n\t}\n\n\tconst sourceSilent =\n\t\tsourceTip === null && finalized === null && recordedTarget === null;\n\tif (sourceSilent) {\n\t\treturn done(\n\t\t\t\"source_unavailable\",\n\t\t\t\"the chain source could not be reached, so the declared range is unknown\",\n\t\t);\n\t}\n\n\tif (end === null) {\n\t\treturn done(\n\t\t\t\"source_unavailable\",\n\t\t\t\"no recorded target and the source tip is unknown\",\n\t\t);\n\t}\n\n\tconst declaredRange = {\n\t\tfrom_height: input.scope.start_height,\n\t\tto_height: end,\n\t};\n\tlet completeThrough = contiguousThrough(ranges, input.scope.start_height);\n\tif (dep?.complete_through !== null && dep?.complete_through !== undefined) {\n\t\tif (completeThrough === null) {\n\t\t\t// stay null\n\t\t} else {\n\t\t\tcompleteThrough = Math.min(completeThrough, dep.complete_through);\n\t\t}\n\t} else if (dep && dep.complete_through === null) {\n\t\tcompleteThrough = null;\n\t}\n\n\tconst gaps = findRangeGaps(\n\t\tranges,\n\t\tdeclaredRange.from_height,\n\t\tdeclaredRange.to_height,\n\t);\n\tconst tiled =\n\t\tgaps.length === 0 &&\n\t\tcompleteThrough !== null &&\n\t\tcompleteThrough >= declaredRange.to_height;\n\t// A single suffix still ahead of the prefix is unfinished work, not a hole.\n\tconst trailingGap =\n\t\tgaps.length === 1 &&\n\t\tgaps[0].to_height === declaredRange.to_height &&\n\t\t(completeThrough === null\n\t\t\t? gaps[0].from_height === declaredRange.from_height\n\t\t\t: gaps[0].from_height === completeThrough + 1);\n\n\tconst queueIncomplete =\n\t\tstage.native_clock === \"queue\" && !queueCaught(evidence.queue);\n\n\tif (gaps.length > 0 && !trailingGap) {\n\t\tconst first = gaps[0];\n\t\treturn done(\"gap\", `missing ${first.from_height}–${first.to_height}`, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: declaredRange,\n\t\t\tgaps,\n\t\t\tcaught_up: false,\n\t\t});\n\t}\n\n\tif (queueIncomplete || !tiled) {\n\t\treturn done(\n\t\t\t\"syncing\",\n\t\t\t\"contiguous from start, not yet through the recorded target\",\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tconst sourceStale = age !== null && age > maxAge;\n\tconst behindFinalized =\n\t\tfinalized !== null && completeThrough !== null\n\t\t\t? Math.max(0, finalized - completeThrough)\n\t\t\t: null;\n\tconst behindTip =\n\t\tsourceTip !== null && completeThrough !== null\n\t\t\t? Math.max(0, sourceTip - completeThrough)\n\t\t\t: null;\n\t// A target below the current finalized height is a pin, not a live follow.\n\t// That instance is complete through what it asked for — not lagging.\n\tconst pinned =\n\t\trecordedTarget !== null && finalized !== null && recordedTarget < finalized;\n\n\tif (sourceStale) {\n\t\treturn done(\n\t\t\t\"stale\",\n\t\t\t`source observation is ${age}s old, beyond the ${maxAge}s freshness objective`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (behindFinalized !== null && behindFinalized > maxBehind) {\n\t\treturn done(\n\t\t\t\"stale\",\n\t\t\t`${behindFinalized} blocks behind the finalized height, beyond the ${maxBehind} threshold`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (!pinned && behindFinalized !== null && behindFinalized > 0) {\n\t\treturn done(\n\t\t\t\"lagging\",\n\t\t\t`${behindFinalized} blocks behind the finalized height`,\n\t\t\t{\n\t\t\t\tcomplete_through: completeThrough,\n\t\t\t\tdeclared_range: declaredRange,\n\t\t\t\tgaps,\n\t\t\t\tcaught_up: false,\n\t\t\t},\n\t\t);\n\t}\n\n\tif (!pinned && behindTip !== null && behindTip > 0) {\n\t\treturn done(\"lagging\", `${behindTip} blocks behind the chain tip`, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tdeclared_range: declaredRange,\n\t\t\tgaps,\n\t\t});\n\t}\n\n\treturn done(\"complete\", \"processed every unit through the recorded target\", {\n\t\tcomplete_through: completeThrough,\n\t\tdeclared_range: declaredRange,\n\t\tgaps,\n\t});\n}\n\nexport function evaluateCoverage(input: EvaluatorInput): CoverageReport {\n\tconst { order, cycles } = topoSort(input.stages);\n\tconst cyclic = new Set(cycles.flat());\n\tconst known = new Set(input.stages.map((s) => s.id));\n\tconst runs = lastByStage(input.runs);\n\tconst evidence = lastByStage(input.evidence);\n\tconst byId = new Map(input.stages.map((s) => [s.id, s]));\n\tconst evaluated = new Map<string, StageCoverage>();\n\n\tconst visit = (id: string): void => {\n\t\tconst stage = byId.get(id);\n\t\tif (!stage || evaluated.has(id)) return;\n\t\tconst depId = stage.depends_on;\n\t\tconst missingDep = Boolean(depId && !known.has(depId));\n\t\tconst dep = depId && !missingDep ? (evaluated.get(depId) ?? null) : null;\n\t\tevaluated.set(\n\t\t\tid,\n\t\t\tevaluateOne(\n\t\t\t\tstage,\n\t\t\t\tinput,\n\t\t\t\truns.get(id),\n\t\t\t\tevidence.get(id) ?? emptyEvidence(id),\n\t\t\t\tdep,\n\t\t\t\tmissingDep,\n\t\t\t\tcyclic.has(id),\n\t\t\t),\n\t\t);\n\t};\n\n\tfor (const id of order) visit(id);\n\tfor (const id of cyclic) visit(id);\n\n\tconst stages = [...evaluated.values()].sort((a, b) =>\n\t\ta.stage_id.localeCompare(b.stage_id),\n\t);\n\n\treturn {\n\t\tschema_version: COVERAGE_REPORT_SCHEMA_VERSION,\n\t\tnetwork: input.scope.network,\n\t\tgenerated_at: input.options.now.toISOString(),\n\t\tsource_tip: input.source.tip_height,\n\t\tfinalized_height: input.source.finalized_height,\n\t\tstages,\n\t\tevaluation_order: order,\n\t\tcycles,\n\t};\n}\n",
|
|
8
8
|
"/**\n * Stage runner state machine.\n *\n * Pure. Adapters (P4.5+) persist the returned state and effects.\n * Acknowledgements are ordered; a reorg invalidates overlapping receipts\n * before any replacement ack is accepted. A version change cannot continue\n * the current run — it seals or halts and asks for a new one.\n */\n\nimport type { FailureClass, FailureUnit, RetryState } from \"./constraints.ts\";\nimport type { CoverageRange } from \"./constraints.ts\";\n\nexport const RUNNER_STATUSES = [\n\t\"pending\",\n\t\"running\",\n\t\"complete\",\n\t\"failed\",\n\t\"halted\",\n] as const;\nexport type RunnerStatus = (typeof RUNNER_STATUSES)[number];\n\nexport const RUNNER_EVENT_TYPES = [\n\t\"start\",\n\t\"ack\",\n\t\"fail\",\n\t\"retry\",\n\t\"halt\",\n\t\"resume\",\n\t\"reorg\",\n\t\"version\",\n\t\"finish\",\n] as const;\nexport type RunnerEventType = (typeof RUNNER_EVENT_TYPES)[number];\n\nexport const DEFAULT_MAX_RETRIES = 3;\n\nexport type RunnerVersion = {\n\tcode_hash: string;\n\tconfig_hash: string;\n\thandler_hash: string | null;\n};\n\nexport type RunnerFailure = {\n\tunit_kind: FailureUnit;\n\tclass: FailureClass;\n\tretry_state: Exclude<RetryState, \"resolved\">;\n\tfrom_height: number | null;\n\tto_height: number | null;\n\terror: string | null;\n};\n\nexport type RunnerState = {\n\tstage_id: string;\n\tstatus: RunnerStatus;\n\tversion: RunnerVersion;\n\tstart_height: number;\n\ttarget_height: number | null;\n\tcomplete_through: number | null;\n\tlast_acked_hash: string | null;\n\tretry_count: number;\n\topen_failure: RunnerFailure | null;\n};\n\nexport type RunnerEvent =\n\t| { type: \"start\" }\n\t| {\n\t\t\ttype: \"ack\";\n\t\t\theight: number;\n\t\t\thash: string;\n\t\t\tinput_count: number;\n\t\t\tinput_digest: string;\n\t\t\teffect_digest: string;\n\t }\n\t| {\n\t\t\ttype: \"fail\";\n\t\t\tunit_kind: FailureUnit;\n\t\t\tclass: FailureClass;\n\t\t\tfrom_height: number | null;\n\t\t\tto_height: number | null;\n\t\t\terror: string | null;\n\t }\n\t| { type: \"retry\" }\n\t| { type: \"halt\" }\n\t| { type: \"resume\" }\n\t| { type: \"reorg\"; fork_point: number }\n\t| { type: \"version\"; version: RunnerVersion }\n\t| { type: \"finish\" };\n\nexport type RunnerEffect =\n\t| { type: \"invalidate_receipts\"; range: CoverageRange }\n\t| { type: \"spawn_run\"; version: RunnerVersion }\n\t| { type: \"open_failure\"; failure: RunnerFailure }\n\t| { type: \"resolve_failure\" };\n\nexport type RunnerResult =\n\t| { ok: true; state: RunnerState; effects: RunnerEffect[] }\n\t| { ok: false; reason: string; state: RunnerState };\n\nexport type TransitionRule = {\n\tfrom: RunnerStatus;\n\tevent: RunnerEventType;\n\tto: RunnerStatus | \"reject\";\n};\n\n/**\n * Structural transition table. Guards (order, retry budget, version\n * equality, reorg overlap) are applied on top in `applyRunnerEvent`.\n */\nexport const RUNNER_TRANSITION_TABLE: readonly TransitionRule[] = [\n\t{ from: \"pending\", event: \"start\", to: \"running\" },\n\t{ from: \"pending\", event: \"ack\", to: \"reject\" },\n\t{ from: \"pending\", event: \"fail\", to: \"reject\" },\n\t{ from: \"pending\", event: \"retry\", to: \"reject\" },\n\t{ from: \"pending\", event: \"halt\", to: \"reject\" },\n\t{ from: \"pending\", event: \"resume\", to: \"reject\" },\n\t{ from: \"pending\", event: \"reorg\", to: \"reject\" },\n\t{ from: \"pending\", event: \"version\", to: \"pending\" },\n\t{ from: \"pending\", event: \"finish\", to: \"reject\" },\n\n\t{ from: \"running\", event: \"start\", to: \"reject\" },\n\t{ from: \"running\", event: \"ack\", to: \"running\" },\n\t{ from: \"running\", event: \"fail\", to: \"failed\" },\n\t{ from: \"running\", event: \"retry\", to: \"reject\" },\n\t{ from: \"running\", event: \"halt\", to: \"halted\" },\n\t{ from: \"running\", event: \"resume\", to: \"running\" },\n\t{ from: \"running\", event: \"reorg\", to: \"running\" },\n\t{ from: \"running\", event: \"version\", to: \"halted\" },\n\t{ from: \"running\", event: \"finish\", to: \"complete\" },\n\n\t{ from: \"complete\", event: \"start\", to: \"reject\" },\n\t{ from: \"complete\", event: \"ack\", to: \"reject\" },\n\t{ from: \"complete\", event: \"fail\", to: \"reject\" },\n\t{ from: \"complete\", event: \"retry\", to: \"reject\" },\n\t{ from: \"complete\", event: \"halt\", to: \"reject\" },\n\t{ from: \"complete\", event: \"resume\", to: \"reject\" },\n\t{ from: \"complete\", event: \"reorg\", to: \"running\" },\n\t{ from: \"complete\", event: \"version\", to: \"complete\" },\n\t{ from: \"complete\", event: \"finish\", to: \"complete\" },\n\n\t{ from: \"failed\", event: \"start\", to: \"reject\" },\n\t{ from: \"failed\", event: \"ack\", to: \"reject\" },\n\t{ from: \"failed\", event: \"fail\", to: \"reject\" },\n\t{ from: \"failed\", event: \"retry\", to: \"running\" },\n\t{ from: \"failed\", event: \"halt\", to: \"halted\" },\n\t{ from: \"failed\", event: \"resume\", to: \"running\" },\n\t{ from: \"failed\", event: \"reorg\", to: \"failed\" },\n\t{ from: \"failed\", event: \"version\", to: \"halted\" },\n\t{ from: \"failed\", event: \"finish\", to: \"reject\" },\n\n\t{ from: \"halted\", event: \"start\", to: \"reject\" },\n\t{ from: \"halted\", event: \"ack\", to: \"reject\" },\n\t{ from: \"halted\", event: \"fail\", to: \"reject\" },\n\t{ from: \"halted\", event: \"retry\", to: \"running\" },\n\t{ from: \"halted\", event: \"halt\", to: \"halted\" },\n\t{ from: \"halted\", event: \"resume\", to: \"running\" },\n\t{ from: \"halted\", event: \"reorg\", to: \"halted\" },\n\t{ from: \"halted\", event: \"version\", to: \"halted\" },\n\t{ from: \"halted\", event: \"finish\", to: \"reject\" },\n];\n\nconst RULE_INDEX = new Map<string, TransitionRule>(\n\tRUNNER_TRANSITION_TABLE.map((rule) => [`${rule.from}:${rule.event}`, rule]),\n);\n\nexport function lookupTransition(\n\tfrom: RunnerStatus,\n\tevent: RunnerEventType,\n): TransitionRule {\n\tconst rule = RULE_INDEX.get(`${from}:${event}`);\n\tif (!rule) {\n\t\tthrow new Error(`missing transition ${from} + ${event}`);\n\t}\n\treturn rule;\n}\n\nexport function versionsEqual(a: RunnerVersion, b: RunnerVersion): boolean {\n\treturn (\n\t\ta.code_hash === b.code_hash &&\n\t\ta.config_hash === b.config_hash &&\n\t\ta.handler_hash === b.handler_hash\n\t);\n}\n\n/** Next height this run must acknowledge. */\nexport function expectedAckHeight(state: RunnerState): number {\n\treturn state.complete_through === null\n\t\t? state.start_height\n\t\t: state.complete_through + 1;\n}\n\nexport function createRunnerState(init: {\n\tstage_id: string;\n\tstart_height: number;\n\ttarget_height?: number | null;\n\tversion: RunnerVersion;\n}): RunnerState {\n\treturn {\n\t\tstage_id: init.stage_id,\n\t\tstatus: \"pending\",\n\t\tversion: init.version,\n\t\tstart_height: init.start_height,\n\t\ttarget_height: init.target_height ?? null,\n\t\tcomplete_through: null,\n\t\tlast_acked_hash: null,\n\t\tretry_count: 0,\n\t\topen_failure: null,\n\t};\n}\n\nfunction ok(state: RunnerState, effects: RunnerEffect[] = []): RunnerResult {\n\treturn { ok: true, state, effects };\n}\n\nfunction reject(state: RunnerState, reason: string): RunnerResult {\n\treturn { ok: false, reason, state };\n}\n\nfunction clone(state: RunnerState, patch: Partial<RunnerState>): RunnerState {\n\treturn { ...state, ...patch };\n}\n\nfunction rewind(\n\tstate: RunnerState,\n\tforkPoint: number,\n): { next: RunnerState; effects: RunnerEffect[] } {\n\tconst from = Math.max(forkPoint, state.start_height);\n\tconst through = state.complete_through;\n\tif (through === null || through < from) {\n\t\treturn { next: state, effects: [] };\n\t}\n\tconst completeThrough = from <= state.start_height ? null : from - 1;\n\treturn {\n\t\tnext: clone(state, {\n\t\t\tcomplete_through: completeThrough,\n\t\t\tlast_acked_hash: null,\n\t\t}),\n\t\teffects: [\n\t\t\t{\n\t\t\t\ttype: \"invalidate_receipts\",\n\t\t\t\trange: { from_height: from, to_height: through },\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction applyRetry(state: RunnerState, maxRetries: number): RunnerResult {\n\tif (state.retry_count >= maxRetries) {\n\t\tconst failure = state.open_failure\n\t\t\t? { ...state.open_failure, retry_state: \"halted\" as const }\n\t\t\t: null;\n\t\treturn ok(clone(state, { status: \"halted\", open_failure: failure }));\n\t}\n\tconst failure = state.open_failure\n\t\t? { ...state.open_failure, retry_state: \"retrying\" as const }\n\t\t: null;\n\treturn ok(\n\t\tclone(state, {\n\t\t\tstatus: \"running\",\n\t\t\tretry_count: state.retry_count + 1,\n\t\t\topen_failure: failure,\n\t\t}),\n\t);\n}\n\nexport function applyRunnerEvent(\n\tstate: RunnerState,\n\tevent: RunnerEvent,\n\topts?: { maxRetries?: number },\n): RunnerResult {\n\tconst maxRetries = opts?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\tconst rule = lookupTransition(state.status, event.type);\n\tif (rule.to === \"reject\") {\n\t\treturn reject(state, `${state.status} cannot ${event.type}`);\n\t}\n\tconst nextStatus = rule.to;\n\n\tswitch (event.type) {\n\t\tcase \"start\":\n\t\t\treturn ok(clone(state, { status: \"running\" }));\n\n\t\tcase \"ack\": {\n\t\t\tif (event.height === state.complete_through) {\n\t\t\t\tif (event.hash === state.last_acked_hash) return ok(state);\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`ack at ${event.height} has a different hash; reorg first`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst expected = expectedAckHeight(state);\n\t\t\tif (event.height !== expected) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`ack at ${event.height} skips ${expected}; acknowledgements must be ordered`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst effects: RunnerEffect[] = [];\n\t\t\tconst failure = state.open_failure;\n\t\t\tconst coversFailure =\n\t\t\t\tfailure &&\n\t\t\t\tfailure.from_height !== null &&\n\t\t\t\tevent.height >= failure.from_height &&\n\t\t\t\t(failure.to_height === null || event.height <= failure.to_height);\n\t\t\tif (coversFailure) effects.push({ type: \"resolve_failure\" });\n\t\t\treturn ok(\n\t\t\t\tclone(state, {\n\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\tcomplete_through: event.height,\n\t\t\t\t\tlast_acked_hash: event.hash,\n\t\t\t\t\topen_failure: coversFailure ? null : failure,\n\t\t\t\t}),\n\t\t\t\teffects,\n\t\t\t);\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\tconst failure: RunnerFailure = {\n\t\t\t\tunit_kind: event.unit_kind,\n\t\t\t\tclass: event.class,\n\t\t\t\tretry_state: \"open\",\n\t\t\t\tfrom_height: event.from_height,\n\t\t\t\tto_height: event.to_height,\n\t\t\t\terror: event.error,\n\t\t\t};\n\t\t\treturn ok(clone(state, { status: \"failed\", open_failure: failure }), [\n\t\t\t\t{ type: \"open_failure\", failure },\n\t\t\t]);\n\t\t}\n\n\t\tcase \"retry\":\n\t\t\treturn applyRetry(state, maxRetries);\n\n\t\tcase \"halt\": {\n\t\t\tconst failure = state.open_failure\n\t\t\t\t? { ...state.open_failure, retry_state: \"halted\" as const }\n\t\t\t\t: state.open_failure;\n\t\t\treturn ok(clone(state, { status: \"halted\", open_failure: failure }));\n\t\t}\n\n\t\tcase \"resume\":\n\t\t\tif (state.status === \"running\") return ok(state);\n\t\t\tif (state.open_failure) return applyRetry(state, maxRetries);\n\t\t\treturn ok(clone(state, { status: \"running\" }));\n\n\t\tcase \"reorg\": {\n\t\t\tif (event.fork_point < state.start_height) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`reorg fork ${event.fork_point} is below start ${state.start_height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst { next, effects } = rewind(state, event.fork_point);\n\t\t\tif (effects.length === 0) return ok(state);\n\t\t\treturn ok(clone(next, { status: nextStatus }), effects);\n\t\t}\n\n\t\tcase \"version\": {\n\t\t\tif (versionsEqual(state.version, event.version)) return ok(state);\n\t\t\tif (state.status === \"pending\") {\n\t\t\t\treturn ok(clone(state, { version: event.version }));\n\t\t\t}\n\t\t\tconst sealed: RunnerStatus =\n\t\t\t\tstate.status === \"complete\" ? \"complete\" : \"halted\";\n\t\t\treturn ok(clone(state, { status: sealed }), [\n\t\t\t\t{ type: \"spawn_run\", version: event.version },\n\t\t\t]);\n\t\t}\n\n\t\tcase \"finish\": {\n\t\t\tif (state.status === \"complete\") return ok(state);\n\t\t\tif (state.target_height === null) {\n\t\t\t\treturn reject(state, \"cannot finish a follow-the-chain run\");\n\t\t\t}\n\t\t\tif (\n\t\t\t\tstate.complete_through === null ||\n\t\t\t\tstate.complete_through < state.target_height\n\t\t\t) {\n\t\t\t\treturn reject(\n\t\t\t\t\tstate,\n\t\t\t\t\t`cannot finish: complete_through ${state.complete_through} is short of target ${state.target_height}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn ok(clone(state, { status: \"complete\" }));\n\t\t}\n\t}\n}\n",
|
|
9
9
|
"/**\n * Decoder clock — pair Streams cursor order with per-block receipts.\n *\n * A filtered firehose can jump from `100:5` to `105:0` and never mention\n * 101–104. Coverage still needs a receipt for every canonical height,\n * including no-match blocks. This library is that seam: cursors stay\n * monotonic, receipts stay one-per-height, empty blocks still ack.\n *\n * Only fully closed blocks in `(from_cursor, to_cursor]` emit receipts.\n * Mid-block resumes wait until the cursor is past the block.\n */\n\nimport { createHash } from \"node:crypto\";\nimport {\n\ttype StreamsCursor,\n\tblockEndCursor,\n\tcompareStreamsCursor,\n\tdecodeStreamsCursor,\n\tencodeStreamsCursor,\n\tisEmptyRangeCursor,\n} from \"../streams-cursor.ts\";\n\nexport type CanonicalBlock = {\n\theight: number;\n\thash: string;\n};\n\nexport type DecoderClockEvent = {\n\tcursor: string;\n\tblock_hash: string;\n\tmatched: boolean;\n};\n\nexport type DecoderClockInput = {\n\tstart_height: number;\n\t/** Exclusive. Null = before `start_height`. */\n\tfrom_cursor: string | null;\n\t/** Exclusive high-water after this batch. */\n\tto_cursor: string;\n\tblocks: readonly CanonicalBlock[];\n\tevents: readonly DecoderClockEvent[];\n};\n\nexport type DecoderClockReceipt = {\n\theight: number;\n\thash: string;\n\tinput_count: number;\n\tinput_cursors: string[];\n\tinput_digest: string;\n\tthrough_cursor: string;\n\tno_match: boolean;\n};\n\nexport type DecoderClockResult =\n\t| { ok: true; receipts: DecoderClockReceipt[]; through_cursor: string }\n\t| { ok: false; reason: string; receipts: DecoderClockReceipt[] };\n\nexport function inputDigest(cursors: readonly string[]): string {\n\tif (cursors.length === 0) {\n\t\treturn createHash(\"sha256\").update(\"no-match\\n\").digest(\"hex\");\n\t}\n\tconst hash = createHash(\"sha256\");\n\tfor (const cursor of cursors) hash.update(`${cursor}\\n`);\n\treturn hash.digest(\"hex\");\n}\n\nexport function cursorIsAfterBlock(\n\tcursor: StreamsCursor,\n\theight: number,\n): boolean {\n\treturn compareStreamsCursor(cursor, blockEndCursor(height)) >= 0;\n}\n\n/** True when `from` is strictly before the first event that can live in `height`. */\nexport function cursorIsBeforeBlock(\n\tcursor: StreamsCursor,\n\theight: number,\n): boolean {\n\treturn cursor.block_height < height;\n}\n\nfunction parseCursor(\n\tvalue: string,\n\tlabel: string,\n): { ok: true; cursor: StreamsCursor } | { ok: false; reason: string } {\n\ttry {\n\t\treturn { ok: true, cursor: decodeStreamsCursor(value) };\n\t} catch {\n\t\treturn { ok: false, reason: `${label} is not a valid streams cursor` };\n\t}\n}\n\nexport function planDecoderReceipts(\n\tinput: DecoderClockInput,\n): DecoderClockResult {\n\tconst to = parseCursor(input.to_cursor, \"to_cursor\");\n\tif (!to.ok) return { ok: false, reason: to.reason, receipts: [] };\n\n\tlet from: StreamsCursor | null = null;\n\tif (input.from_cursor !== null) {\n\t\tconst parsed = parseCursor(input.from_cursor, \"from_cursor\");\n\t\tif (!parsed.ok) return { ok: false, reason: parsed.reason, receipts: [] };\n\t\tfrom = parsed.cursor;\n\t\tif (compareStreamsCursor(from, to.cursor) >= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: \"to_cursor must be after from_cursor\",\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t}\n\n\t// A mid-block from_cursor (100:2) or a closed one (100:SENTINEL) both\n\t// mean the next fully-visible block is 101. Receipts are whole blocks.\n\tconst startFull = from === null ? input.start_height : from.block_height + 1;\n\tconst lastFull = isEmptyRangeCursor(to.cursor)\n\t\t? to.cursor.block_height\n\t\t: to.cursor.block_height - 1;\n\n\tif (lastFull < startFull) {\n\t\treturn { ok: true, receipts: [], through_cursor: input.to_cursor };\n\t}\n\n\tif (startFull < input.start_height) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: `window starts at ${startFull}, below start_height ${input.start_height}`,\n\t\t\treceipts: [],\n\t\t};\n\t}\n\n\tconst byHeight = new Map<number, CanonicalBlock>();\n\tlet prevHeight: number | null = null;\n\tfor (const block of input.blocks) {\n\t\tif (prevHeight !== null && block.height !== prevHeight + 1) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `blocks are not contiguous (${prevHeight} → ${block.height})`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (byHeight.has(block.height)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `duplicate canonical height ${block.height}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tbyHeight.set(block.height, block);\n\t\tprevHeight = block.height;\n\t}\n\n\tfor (let height = startFull; height <= lastFull; height++) {\n\t\tif (!byHeight.has(height)) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `missing canonical block ${height}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t}\n\n\tconst decoded: {\n\t\tcursor: StreamsCursor;\n\t\tencoded: string;\n\t\tblock_hash: string;\n\t\tmatched: boolean;\n\t}[] = [];\n\tlet previous: StreamsCursor | null = from;\n\tfor (const event of input.events) {\n\t\tconst parsed = parseCursor(event.cursor, \"event.cursor\");\n\t\tif (!parsed.ok) return { ok: false, reason: parsed.reason, receipts: [] };\n\t\tif (previous && compareStreamsCursor(parsed.cursor, previous) <= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not after ${encodeStreamsCursor(previous)}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (compareStreamsCursor(parsed.cursor, to.cursor) >= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not before to_cursor`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (from && compareStreamsCursor(parsed.cursor, from) <= 0) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event cursor ${event.cursor} is not after from_cursor`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tconst block = byHeight.get(parsed.cursor.block_height);\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event ${event.cursor} has no canonical block`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tif (block.hash !== event.block_hash) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `event ${event.cursor} hash ${event.block_hash} does not match canonical ${block.hash}`,\n\t\t\t\treceipts: [],\n\t\t\t};\n\t\t}\n\t\tdecoded.push({\n\t\t\tcursor: parsed.cursor,\n\t\t\tencoded: event.cursor,\n\t\t\tblock_hash: event.block_hash,\n\t\t\tmatched: event.matched,\n\t\t});\n\t\tprevious = parsed.cursor;\n\t}\n\n\tconst receipts: DecoderClockReceipt[] = [];\n\tfor (let height = startFull; height <= lastFull; height++) {\n\t\tconst block = byHeight.get(height);\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\treason: `missing canonical block ${height}`,\n\t\t\t\treceipts,\n\t\t\t};\n\t\t}\n\t\tconst inBlock = decoded.filter((e) => e.cursor.block_height === height);\n\t\tconst matched = inBlock.filter((e) => e.matched);\n\t\tconst last = inBlock[inBlock.length - 1];\n\t\tconst through = last\n\t\t\t? last.encoded\n\t\t\t: encodeStreamsCursor(blockEndCursor(height));\n\t\treceipts.push({\n\t\t\theight,\n\t\t\thash: block.hash,\n\t\t\tinput_count: matched.length,\n\t\t\tinput_cursors: matched.map((e) => e.encoded),\n\t\t\tinput_digest: inputDigest(matched.map((e) => e.encoded)),\n\t\t\tthrough_cursor: through,\n\t\t\tno_match: matched.length === 0,\n\t\t});\n\t}\n\n\treturn { ok: true, receipts, through_cursor: input.to_cursor };\n}\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"/**\n * Repair SAFETY GATE — decides whether a proposed repair is allowed to run.\n * Only registered safe modes pass; unsafe ranges and mode/defect mismatches are\n * refused.\n *\n * This file plans and refuses. It does not repair. The executor that actually\n * writes is `secondlayer repair --apply` (packages/cli/src/commands/repair.ts),\n * which rewrites blocks from a signed archive inside a transaction.\n *\n * There used to be an `applyRepair` here that returned `{applied: true}`\n * without touching anything. It was removed in 2026-08 rather than\n * implemented: a second executor would have been a fake one, and drills that\n * \"recovered\" through it would have proven nothing.\n */\n\nimport type { RepairMode } from \"./constraints.ts\";\nimport type { CoverageRange } from \"./constraints.ts\";\n\nexport const SAFE_REPAIR_MODES: readonly RepairMode[] = [\n\t\"range_safe\",\n\t\"full_reindex\",\n\t\"archive_replay\",\n];\n\nexport type RepairDefect =\n\t| \"gap\"\n\t| \"digest_mismatch\"\n\t| \"omission\"\n\t| \"version\"\n\t| \"reorg\"\n\t| \"source_gap\";\n\nexport type RepairPlan = {\n\tstage_id: string;\n\trange: CoverageRange;\n\tmode: RepairMode;\n\tdefect: RepairDefect;\n\tsafe: boolean;\n\treason: string;\n};\n\nexport function planRepair(input: {\n\tstage_id: string;\n\trange: CoverageRange;\n\tmode: RepairMode;\n\tdefect: RepairDefect;\n\trange_safe_proven?: boolean;\n}): RepairPlan {\n\tif (input.range.from_height > input.range.to_height) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"inverted range\",\n\t\t};\n\t}\n\tif (!(SAFE_REPAIR_MODES as readonly string[]).includes(input.mode)) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: `mode ${input.mode} is not registered`,\n\t\t};\n\t}\n\tif (input.mode === \"range_safe\" && !input.range_safe_proven) {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"range_safe requires a proven range\",\n\t\t};\n\t}\n\tif (input.defect === \"source_gap\" && input.mode !== \"archive_replay\") {\n\t\treturn {\n\t\t\t...input,\n\t\t\tsafe: false,\n\t\t\treason: \"raw/source gaps require archive_replay\",\n\t\t};\n\t}\n\treturn {\n\t\t...input,\n\t\tsafe: true,\n\t\treason: `dry-run ${input.mode} for ${input.defect}`,\n\t};\n}\n",
|
|
18
18
|
"/**\n * Unified verify targets — library used by CLI (and REST later).\n * Exit codes match `sl verify`: 0 clean, 1 diverged, 2 unanchored.\n */\n\nexport const VERIFY_EXIT = {\n\tCLEAN: 0,\n\tDIVERGED: 1,\n\tUNANCHORED: 2,\n} as const;\nexport type VerifyExit = (typeof VERIFY_EXIT)[keyof typeof VERIFY_EXIT];\n\nexport type VerifyTarget =\n\t| { kind: \"all\" }\n\t| { kind: \"raw\" }\n\t| { kind: \"decode\"; name: string }\n\t| { kind: \"subgraph\"; name: string };\n\nexport type VerifyMode = \"quick\" | \"deep\" | \"anchor\";\n\nexport function parseVerifyTarget(value: string | undefined): VerifyTarget {\n\tconst raw = (value ?? \"raw\").trim();\n\tif (raw === \"all\") return { kind: \"all\" };\n\tif (raw === \"raw\" || raw === \"\") return { kind: \"raw\" };\n\tif (raw.startsWith(\"decode:\")) {\n\t\tconst name = raw.slice(\"decode:\".length).trim();\n\t\tif (!name) throw new Error(\"decode: target needs a decoder name\");\n\t\treturn { kind: \"decode\", name };\n\t}\n\tif (raw.startsWith(\"subgraph:\")) {\n\t\tconst name = raw.slice(\"subgraph:\".length).trim();\n\t\tif (!name) throw new Error(\"subgraph: target needs a subgraph name\");\n\t\treturn { kind: \"subgraph\", name };\n\t}\n\tthrow new Error(\n\t\t`verify target must be all | raw | decode:<name> | subgraph:<name> (got ${value})`,\n\t);\n}\n\nconst RAW_DATASETS = new Set([\"blocks\", \"transactions\", \"events\"]);\n\n/** Whether an archive/coverage dataset belongs to this verify target. */\nexport function datasetMatchesTarget(\n\tdataset: string,\n\ttarget: VerifyTarget,\n): boolean {\n\tif (target.kind === \"all\") return true;\n\tconst name = dataset.toLowerCase();\n\tif (target.kind === \"raw\") return RAW_DATASETS.has(name);\n\tif (target.kind === \"decode\") {\n\t\treturn (\n\t\t\tname === target.name.toLowerCase() ||\n\t\t\tname === `decode:${target.name.toLowerCase()}` ||\n\t\t\tname.endsWith(`_${target.name.toLowerCase()}`)\n\t\t);\n\t}\n\treturn (\n\t\tname === target.name.toLowerCase() ||\n\t\tname === `subgraph:${target.name.toLowerCase()}` ||\n\t\tname.startsWith(`${target.name.toLowerCase()}_`)\n\t);\n}\n\nexport type VerifyReport = {\n\ttarget: VerifyTarget;\n\tmode: VerifyMode;\n\texit: VerifyExit;\n\tstatus: \"clean\" | \"diverged\" | \"unanchored\";\n\tdetail: string;\n};\n\nexport function reportVerify(opts: {\n\ttarget: VerifyTarget;\n\tmode?: VerifyMode;\n\tanchored?: boolean;\n\tdiverged?: boolean;\n\tdetail?: string;\n}): VerifyReport {\n\tconst mode = opts.mode ?? \"quick\";\n\tif (opts.anchored === false) {\n\t\treturn {\n\t\t\ttarget: opts.target,\n\t\t\tmode,\n\t\t\texit: VERIFY_EXIT.UNANCHORED,\n\t\t\tstatus: \"unanchored\",\n\t\t\tdetail: opts.detail ?? \"reference unavailable or unverifiable\",\n\t\t};\n\t}\n\tif (opts.diverged) {\n\t\treturn {\n\t\t\ttarget: opts.target,\n\t\t\tmode,\n\t\t\texit: VERIFY_EXIT.DIVERGED,\n\t\t\tstatus: \"diverged\",\n\t\t\tdetail: opts.detail ?? \"coverage or archive diverged\",\n\t\t};\n\t}\n\tconst label =\n\t\topts.target.kind === \"decode\"\n\t\t\t? `decode:${opts.target.name}`\n\t\t\t: opts.target.kind === \"subgraph\"\n\t\t\t\t? `subgraph:${opts.target.name}`\n\t\t\t\t: opts.target.kind;\n\treturn {\n\t\ttarget: opts.target,\n\t\tmode,\n\t\texit: VERIFY_EXIT.CLEAN,\n\t\tstatus: \"clean\",\n\t\tdetail: opts.detail ?? `${label} ${mode} is clean`,\n\t};\n}\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "6B6F94DD9F9ED6C564756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|
package/dist/src/db/index.d.ts
CHANGED
|
@@ -783,6 +783,7 @@ interface Database {
|
|
|
783
783
|
coverage_segments: CoverageSegmentsTable;
|
|
784
784
|
stage_failures: StageFailuresTable;
|
|
785
785
|
archive_fetches: ArchiveFetchesTable;
|
|
786
|
+
usage_ledger: UsageLedgerTable;
|
|
786
787
|
waitlists: WaitlistsTable;
|
|
787
788
|
waitlist_signups: WaitlistSignupsTable;
|
|
788
789
|
}
|
|
@@ -836,6 +837,30 @@ interface ArchiveFetchesTable {
|
|
|
836
837
|
type ArchiveFetch = Selectable<ArchiveFetchesTable>;
|
|
837
838
|
type InsertArchiveFetch = Insertable<ArchiveFetchesTable>;
|
|
838
839
|
type UpdateArchiveFetch = Updateable<ArchiveFetchesTable>;
|
|
840
|
+
/**
|
|
841
|
+
* One metered ledger for every billable unit (archive partitions, hosted
|
|
842
|
+
* Index/Streams rows, and future hosted-stack meters). Append-only, written
|
|
843
|
+
* only by `meter()`. `idempotency_key` is UNIQUE so a retried submission
|
|
844
|
+
* no-ops instead of double-charging. `debited` is false when the balance
|
|
845
|
+
* (or a spend cap) refused the charge — the row still exists so the gap is
|
|
846
|
+
* visible, never silently dropped. `usd_micros` is negative for a Stripe
|
|
847
|
+
* top-up (`unit: "topup"`).
|
|
848
|
+
*/
|
|
849
|
+
interface UsageLedgerTable {
|
|
850
|
+
id: Generated<string>;
|
|
851
|
+
account_id: string;
|
|
852
|
+
unit: string;
|
|
853
|
+
quantity: string | number | bigint;
|
|
854
|
+
usd_micros: string | number | bigint;
|
|
855
|
+
debited: Generated<boolean>;
|
|
856
|
+
source: string;
|
|
857
|
+
idempotency_key: string;
|
|
858
|
+
occurred_at: Generated<Date>;
|
|
859
|
+
recorded_at: Generated<Date>;
|
|
860
|
+
}
|
|
861
|
+
type UsageLedgerRow = Selectable<UsageLedgerTable>;
|
|
862
|
+
type InsertUsageLedgerRow = Insertable<UsageLedgerTable>;
|
|
863
|
+
type UpdateUsageLedgerRow = Updateable<UsageLedgerTable>;
|
|
839
864
|
type Block = Selectable<BlocksTable>;
|
|
840
865
|
type InsertBlock = Insertable<BlocksTable>;
|
|
841
866
|
type UpdateBlock = Updateable<BlocksTable>;
|
|
@@ -936,10 +961,19 @@ interface WebhookOutboxTable {
|
|
|
936
961
|
next_attempt_at: Generated<Date>;
|
|
937
962
|
status: ColumnType<OutboxStatus, OutboxStatus | undefined, OutboxStatus>;
|
|
938
963
|
is_replay: Generated<boolean>;
|
|
964
|
+
/** The chain block_time of the matched event/tx. Null for rows written
|
|
965
|
+
* before this column existed, and for the settlement scan path (not yet
|
|
966
|
+
* wired). Lets `delivered_at - block_time` measure end-to-end webhook
|
|
967
|
+
* latency without a join to SOURCE-plane `blocks`. */
|
|
968
|
+
block_time: Date | null;
|
|
939
969
|
delivered_at: Date | null;
|
|
940
970
|
failed_at: Date | null;
|
|
941
971
|
locked_by: string | null;
|
|
942
972
|
locked_until: Date | null;
|
|
973
|
+
/** Set when a reorg marks an in-flight row `dead` instead of retrying it
|
|
974
|
+
* into an orphaned fork. Null otherwise — delivery failures track their
|
|
975
|
+
* history on `webhooks.last_error`, not per-row. */
|
|
976
|
+
last_error: string | null;
|
|
943
977
|
created_at: Generated<Date>;
|
|
944
978
|
}
|
|
945
979
|
type WebhookOutbox = Selectable<WebhookOutboxTable>;
|
|
@@ -1950,6 +1984,7 @@ declare const TABLE_TO_DB: {
|
|
|
1950
1984
|
subgraph_processing_stats: string
|
|
1951
1985
|
account_credits: string
|
|
1952
1986
|
archive_fetches: string
|
|
1987
|
+
usage_ledger: string
|
|
1953
1988
|
waitlists: string
|
|
1954
1989
|
waitlist_signups: string
|
|
1955
1990
|
service_heartbeats: string
|
|
@@ -2023,4 +2058,4 @@ declare function getRawClient(role?: "source" | "target"): ReturnType<typeof pos
|
|
|
2023
2058
|
declare function getRawClientFor(url: string): ReturnType<typeof postgres>;
|
|
2024
2059
|
/** Close all DB connection pools. Call in CLI commands to allow process exit. */
|
|
2025
2060
|
declare function closeDb(): Promise<void>;
|
|
2026
|
-
export { Account, AccountCredits, AccountCreditsTable, AccountSpendCap, AccountSpendCapsTable, AccountsTable, ApiKey, ApiKeysTable, ArchiveFetch, ArchiveFetchesTable, Block, BlocksTable, BnsMarketplaceAction, BnsMarketplaceEventsTable, BnsNameEventTopic, BnsNameEventsTable, BnsNamesTable, BnsNamespaceEventStatus, BnsNamespaceEventsTable, BnsNamespacesTable, BurnBlockRewardSlotsTable, BurnBlockRewardsTable, ChainReadCacheTable, ChainReorgsTable, Contract, ContractsTable, CoverageSegmentsTable, Database, DbPlane, DbReadRow, DbSplitStatus, DeadLetterEventsTable, DecodedEventsTable, DecoderCheckpointsTable, Event, EventsArchiveTable, EventsTable, FailureClass, FailureUnit, IndexColumn, IndexColumnType, IndexPrimaryKey, IndexProgress, IndexProgressTable, InsertAccount, InsertAccountCredits, InsertAccountSpendCap, InsertApiKey, InsertArchiveFetch, InsertBlock, InsertContract, InsertEvent, InsertIndexProgress, InsertMagicLink, InsertMempoolTransaction, InsertSession, InsertSubgraph, InsertSubgraphGap, InsertSubgraphHealthSnapshot, InsertSubgraphOperation, InsertTransaction, InsertVmEvent, InsertWaitlistSignup, InsertWebhook, InsertWebhookDelivery, InsertWebhookOutbox, InstancesTable, MagicLink, MagicLinksTable, MempoolTransaction, MempoolTransactionsTable, MigrationRole, NativeClock, NumericAsText, ObserverJournalStatus, ObserverJournalTable, OutboxStatus, PendingForkBlocksTable, Pox4CallsTable, Pox4FunctionName, Pox5EventTopic, Pox5EventsTable, ProcessedStripeEventsTable, RepairMode, RetryState, RunStatus, SOURCE_READ_COLUMNS, SOURCE_READ_PKS, SOURCE_READ_TYPES, SbtcEventTopic, SbtcEventsTable, SbtcSettlementsTable, SbtcTokenEventType, SbtcTokenEventsTable, ServiceHeartbeatsTable, Session, SessionsTable, StageBlockReceiptsTable, StageFailuresTable, StageKind, StageRegistryTable, StageRunsTable, Subgraph, SubgraphGap, SubgraphGapsTable, SubgraphHealthSnapshot, SubgraphHealthSnapshotsTable, SubgraphOperation, SubgraphOperationKind, SubgraphOperationStatus, SubgraphOperationsTable, SubgraphProcessingStatsTable, SubgraphViolationsTable, SubgraphsTable, SyncScopesTable, TABLE_TO_DB, Transaction, TransactionsArchiveTable, TransactionsTable, TriggerEvaluatorState, TriggerEvaluatorStateTable, UpdateAccountCredits, UpdateAccountSpendCap, UpdateApiKey, UpdateArchiveFetch, UpdateBlock, UpdateContract, UpdateEvent, UpdateIndexProgress, UpdateSubgraph, UpdateSubgraphOperation, UpdateTransaction, UpdateVmEvent, UpdateWebhook, UpdateWebhookOutbox, VmEvent, VmEventsArchiveTable, VmEventsTable, Waitlist, WaitlistSignup, WaitlistSignupsTable, WaitlistsTable, Webhook, WebhookDeliveriesTable, WebhookDelivery, WebhookFormat, WebhookKind, WebhookOutbox, WebhookOutboxTable, WebhookRuntime, WebhookStatus, WebhooksTable, applicationDatabaseUrl, assertDbSplit, closeDb, getDb, getDbSplitStatus, getMigrationRole, getRawClient, getRawClientFor, getSourceDb, getTargetDb, jsonb, onChainPlane, onControlPlane, parseJsonb, setMigrationRole, sql };
|
|
2061
|
+
export { Account, AccountCredits, AccountCreditsTable, AccountSpendCap, AccountSpendCapsTable, AccountsTable, ApiKey, ApiKeysTable, ArchiveFetch, ArchiveFetchesTable, Block, BlocksTable, BnsMarketplaceAction, BnsMarketplaceEventsTable, BnsNameEventTopic, BnsNameEventsTable, BnsNamesTable, BnsNamespaceEventStatus, BnsNamespaceEventsTable, BnsNamespacesTable, BurnBlockRewardSlotsTable, BurnBlockRewardsTable, ChainReadCacheTable, ChainReorgsTable, Contract, ContractsTable, CoverageSegmentsTable, Database, DbPlane, DbReadRow, DbSplitStatus, DeadLetterEventsTable, DecodedEventsTable, DecoderCheckpointsTable, Event, EventsArchiveTable, EventsTable, FailureClass, FailureUnit, IndexColumn, IndexColumnType, IndexPrimaryKey, IndexProgress, IndexProgressTable, InsertAccount, InsertAccountCredits, InsertAccountSpendCap, InsertApiKey, InsertArchiveFetch, InsertBlock, InsertContract, InsertEvent, InsertIndexProgress, InsertMagicLink, InsertMempoolTransaction, InsertSession, InsertSubgraph, InsertSubgraphGap, InsertSubgraphHealthSnapshot, InsertSubgraphOperation, InsertTransaction, InsertUsageLedgerRow, InsertVmEvent, InsertWaitlistSignup, InsertWebhook, InsertWebhookDelivery, InsertWebhookOutbox, InstancesTable, MagicLink, MagicLinksTable, MempoolTransaction, MempoolTransactionsTable, MigrationRole, NativeClock, NumericAsText, ObserverJournalStatus, ObserverJournalTable, OutboxStatus, PendingForkBlocksTable, Pox4CallsTable, Pox4FunctionName, Pox5EventTopic, Pox5EventsTable, ProcessedStripeEventsTable, RepairMode, RetryState, RunStatus, SOURCE_READ_COLUMNS, SOURCE_READ_PKS, SOURCE_READ_TYPES, SbtcEventTopic, SbtcEventsTable, SbtcSettlementsTable, SbtcTokenEventType, SbtcTokenEventsTable, ServiceHeartbeatsTable, Session, SessionsTable, StageBlockReceiptsTable, StageFailuresTable, StageKind, StageRegistryTable, StageRunsTable, Subgraph, SubgraphGap, SubgraphGapsTable, SubgraphHealthSnapshot, SubgraphHealthSnapshotsTable, SubgraphOperation, SubgraphOperationKind, SubgraphOperationStatus, SubgraphOperationsTable, SubgraphProcessingStatsTable, SubgraphViolationsTable, SubgraphsTable, SyncScopesTable, TABLE_TO_DB, Transaction, TransactionsArchiveTable, TransactionsTable, TriggerEvaluatorState, TriggerEvaluatorStateTable, UpdateAccountCredits, UpdateAccountSpendCap, UpdateApiKey, UpdateArchiveFetch, UpdateBlock, UpdateContract, UpdateEvent, UpdateIndexProgress, UpdateSubgraph, UpdateSubgraphOperation, UpdateTransaction, UpdateUsageLedgerRow, UpdateVmEvent, UpdateWebhook, UpdateWebhookOutbox, UsageLedgerRow, UsageLedgerTable, VmEvent, VmEventsArchiveTable, VmEventsTable, Waitlist, WaitlistSignup, WaitlistSignupsTable, WaitlistsTable, Webhook, WebhookDeliveriesTable, WebhookDelivery, WebhookFormat, WebhookKind, WebhookOutbox, WebhookOutboxTable, WebhookRuntime, WebhookStatus, WebhooksTable, applicationDatabaseUrl, assertDbSplit, closeDb, getDb, getDbSplitStatus, getMigrationRole, getRawClient, getRawClientFor, getSourceDb, getTargetDb, jsonb, onChainPlane, onControlPlane, parseJsonb, setMigrationRole, sql };
|
package/dist/src/db/index.js
CHANGED
|
@@ -773,6 +773,7 @@ var TABLE_TO_DB = {
|
|
|
773
773
|
subgraph_processing_stats: "target",
|
|
774
774
|
account_credits: "target",
|
|
775
775
|
archive_fetches: "target",
|
|
776
|
+
usage_ledger: "target",
|
|
776
777
|
waitlists: "target",
|
|
777
778
|
waitlist_signups: "target",
|
|
778
779
|
service_heartbeats: "both"
|
|
@@ -977,5 +978,5 @@ export {
|
|
|
977
978
|
sql2 as sql
|
|
978
979
|
};
|
|
979
980
|
|
|
980
|
-
//# debugId=
|
|
981
|
+
//# debugId=47CB5F5A1643B5DD64756E2164756E21
|
|
981
982
|
//# sourceMappingURL=index.js.map
|