@substrat-run/kernel 0.162.0 → 0.164.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/attachment-bytes.d.ts +121 -0
- package/dist/attachment-bytes.d.ts.map +1 -0
- package/dist/attachment-bytes.js +94 -0
- package/dist/attachment-bytes.js.map +1 -0
- package/dist/attachment-sweep.d.ts +2 -1
- package/dist/attachment-sweep.d.ts.map +1 -1
- package/dist/attachment-sweep.js +1 -1
- package/dist/attachment-sweep.js.map +1 -1
- package/dist/attachment-text.d.ts +1 -1
- package/dist/attachment-text.d.ts.map +1 -1
- package/dist/attachment-text.js +1 -1
- package/dist/attachment-text.js.map +1 -1
- package/dist/billing-retention.js +1 -1
- package/dist/billing-retention.js.map +1 -1
- package/dist/connection-context.d.ts +69 -0
- package/dist/connection-context.d.ts.map +1 -0
- package/dist/connection-context.js +19 -0
- package/dist/connection-context.js.map +1 -0
- package/dist/connection-landings.d.ts +8 -0
- package/dist/connection-landings.d.ts.map +1 -1
- package/dist/connection-landings.js +5 -1
- package/dist/connection-landings.js.map +1 -1
- package/dist/connector-transport.d.ts +313 -0
- package/dist/connector-transport.d.ts.map +1 -0
- package/dist/connector-transport.js +66 -0
- package/dist/connector-transport.js.map +1 -0
- package/dist/deadline-fetch.d.ts +1 -1
- package/dist/deadline-fetch.d.ts.map +1 -1
- package/dist/findings.js +1 -1
- package/dist/findings.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/job-run.d.ts +2 -1
- package/dist/job-run.d.ts.map +1 -1
- package/dist/job-run.js +2 -1
- package/dist/job-run.js.map +1 -1
- package/dist/live-read.d.ts +258 -0
- package/dist/live-read.d.ts.map +1 -0
- package/dist/live-read.js +101 -0
- package/dist/live-read.js.map +1 -0
- package/dist/membership-executor.d.ts +2 -1
- package/dist/membership-executor.d.ts.map +1 -1
- package/dist/membership-executor.js.map +1 -1
- package/dist/meter-days.js +1 -1
- package/dist/meter-days.js.map +1 -1
- package/dist/migration-digest.d.ts +1 -1
- package/dist/migration-digest.d.ts.map +1 -1
- package/dist/migration-digest.js +1 -1
- package/dist/migration-digest.js.map +1 -1
- package/dist/platform-sweep.d.ts +22 -4
- package/dist/platform-sweep.d.ts.map +1 -1
- package/dist/platform-sweep.js +69 -26
- package/dist/platform-sweep.js.map +1 -1
- package/dist/promote-review.d.ts +42 -4
- package/dist/promote-review.d.ts.map +1 -1
- package/dist/promote-review.js +43 -15
- package/dist/promote-review.js.map +1 -1
- package/dist/request-rollup.js +1 -1
- package/dist/request-rollup.js.map +1 -1
- package/dist/reserved-roles.d.ts +12 -0
- package/dist/reserved-roles.d.ts.map +1 -1
- package/dist/reserved-roles.js +22 -3
- package/dist/reserved-roles.js.map +1 -1
- package/dist/retention.d.ts +106 -0
- package/dist/retention.d.ts.map +1 -0
- package/dist/retention.js +131 -0
- package/dist/retention.js.map +1 -0
- package/dist/scope-host.d.ts +23 -791
- package/dist/scope-host.d.ts.map +1 -1
- package/dist/scope-host.js +1 -385
- package/dist/scope-host.js.map +1 -1
- package/dist/storage-gauge.js +1 -1
- package/dist/storage-gauge.js.map +1 -1
- package/dist/upload-link.d.ts +1 -1
- package/dist/upload-link.d.ts.map +1 -1
- package/dist/upload-link.js +1 -1
- package/dist/upload-link.js.map +1 -1
- package/dist/wire-nonce.d.ts +80 -0
- package/dist/wire-nonce.d.ts.map +1 -0
- package/dist/wire-nonce.js +126 -0
- package/dist/wire-nonce.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { SwitchSql } from './system-switch.js';
|
|
2
|
+
/**
|
|
3
|
+
* The wire-signing nonce store (RFC wire-signing §4, Q4 as amended): where a scope records the
|
|
4
|
+
* nonce of each signed call it accepted that changes state, so the same envelope is accepted once.
|
|
5
|
+
*
|
|
6
|
+
* The verifier in the platform's entry claims a nonce here only after every other check of the
|
|
7
|
+
* envelope has passed, and only in the scope the verified envelope names, through the scope host's
|
|
8
|
+
* `claimWireNonceLocal`. Both adapters build these tables from this one definition and claim
|
|
9
|
+
* through `claimWireNonceIn`, so the self-hosted store and the hosted one answer alike.
|
|
10
|
+
*
|
|
11
|
+
* Kernel-written spine, never a module migration. **Store-local**: the tables describe calls this
|
|
12
|
+
* store accepted, not the scope's data, so a dump never carries them and no load takes them from
|
|
13
|
+
* one (`isWireNonceTable`), and a write to them advances no write revision a carry fences on
|
|
14
|
+
* (`isWireNonceWrite`). A load, restore, wipe or delete replaces the store, and the nonces recorded
|
|
15
|
+
* before it go with it, as a rewind drops those recorded after its bookmark, for the rest of their
|
|
16
|
+
* window. That window is short by design: an envelope lives at most two minutes.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The live nonces, one row each, and the count of them. `until_s` is the integer Unix second after
|
|
20
|
+
* which a nonce may be forgotten (the envelope's `exp` plus the skew), and departs from the spine's
|
|
21
|
+
* ISO-text rule on purpose: the envelope states its times in Unix seconds and every comparison
|
|
22
|
+
* here is numeric, so text would add a conversion at both ends and change nothing.
|
|
23
|
+
*
|
|
24
|
+
* The count is a row of its own so that the cap costs one row read, not a scan: a claim keeps it in
|
|
25
|
+
* step with the rows it inserts and purges, in the same transaction.
|
|
26
|
+
*/
|
|
27
|
+
export declare const WIRE_NONCE_DDL = "\n CREATE TABLE IF NOT EXISTS _substrat_wire_nonces (\n -- The envelope's nonce: 16 random bytes in canonical base64url, 22 characters.\n nonce TEXT PRIMARY KEY,\n -- Integer Unix seconds, not ISO text: the envelope's own unit, compared numerically.\n until_s INTEGER NOT NULL\n ) WITHOUT ROWID;\n CREATE INDEX IF NOT EXISTS _substrat_wire_nonces_until\n ON _substrat_wire_nonces (until_s);\n -- One row, slot 'live': how many rows _substrat_wire_nonces holds. Absent until the first claim.\n CREATE TABLE IF NOT EXISTS _substrat_wire_nonce_count (\n slot TEXT PRIMARY KEY,\n live INTEGER NOT NULL\n ) WITHOUT ROWID;\n";
|
|
28
|
+
/** The tables `WIRE_NONCE_DDL` builds: store-local, so no dump carries them. */
|
|
29
|
+
export declare const WIRE_NONCE_TABLE_NAMES: readonly ['_substrat_wire_nonces', '_substrat_wire_nonce_count'];
|
|
30
|
+
/** Whether a table is one of the nonce store's, which a dump leaves out. Case-insensitive, as SQLite names are. */
|
|
31
|
+
export declare const isWireNonceTable: (name: string) => boolean;
|
|
32
|
+
/**
|
|
33
|
+
* The most live nonces one scope holds. Past it a claim throws, which the entry answers as the
|
|
34
|
+
* store's failure (fail closed, and counted), never as acceptance.
|
|
35
|
+
*
|
|
36
|
+
* Sized from what one scope can be asked, not from a guess:
|
|
37
|
+
* - **How long a row lives.** A nonce is kept until `exp + 30` and can be claimed no earlier than
|
|
38
|
+
* `iat - 30`, and an envelope lives at most 120 s, so a row lives at most 120 + 30 + 30 = 180 s.
|
|
39
|
+
* - **The platform's peak.** The control plane's calls that spend a nonce in a scope are made one
|
|
40
|
+
* at a time per scope (each awaits the last), and the busy paths that move many calls (a restore's
|
|
41
|
+
* pages, the drain, an event import) name the scope alone, so they spend none here. A sequential
|
|
42
|
+
* loop at a 10 ms round trip makes at most 100 calls a second: 100 × 180 = 18 000 rows. Ten times
|
|
43
|
+
* that is 180 000.
|
|
44
|
+
* - **The object's own ceiling.** A claim is itself one request to the scope's object, which serves
|
|
45
|
+
* about 1 000 requests a second (`docs/master-plan.md`): 1 000 × 180 = 180 000 rows. No scope can
|
|
46
|
+
* reach the cap without first exceeding what its object can serve.
|
|
47
|
+
*
|
|
48
|
+
* At about 50 bytes a row, a full store is about 9 MB of a scope's 10 GB.
|
|
49
|
+
*/
|
|
50
|
+
export declare const WIRE_NONCE_CAP = 180000;
|
|
51
|
+
/**
|
|
52
|
+
* At most this many expired rows go per claim. A claim inserts at most one, so the purge outpaces
|
|
53
|
+
* the inserts, and a claim's write stays bounded however many rows expired at once.
|
|
54
|
+
*/
|
|
55
|
+
export declare const WIRE_NONCE_PURGE_BATCH = 64;
|
|
56
|
+
/**
|
|
57
|
+
* Whether a statement is one of the claim's own writes, whitespace aside. The scope DO lets these,
|
|
58
|
+
* and only these, through the bookkeeping path that advances no write revision: a nonce describes
|
|
59
|
+
* a call this store accepted, not the scope's data, and a carried copy is another deployment, whose
|
|
60
|
+
* audience check refuses an envelope meant for this one anyway.
|
|
61
|
+
*/
|
|
62
|
+
export declare const isWireNonceWrite: (sql: string) => boolean;
|
|
63
|
+
/** What a claim answers: the nonce was unspent (`true`), spent or too late (`false`), or the store is at its cap. */
|
|
64
|
+
export type WireNonceClaim = true | false | 'full';
|
|
65
|
+
/**
|
|
66
|
+
* Claim `nonce` until `until` (Unix seconds) in one scope's store, at `nowSeconds` by the store's
|
|
67
|
+
* own clock. Run it inside one transaction: it purges up to `WIRE_NONCE_PURGE_BATCH` expired rows,
|
|
68
|
+
* then answers `false` for a claim after `until` (the nonce may already be forgotten) or a nonce
|
|
69
|
+
* already held (at the cap too), `'full'` when the store holds `cap` live rows, and `true` once it
|
|
70
|
+
* has recorded the nonce. A claim the store's own clock places after `until` answers `false` like a
|
|
71
|
+
* replay; the verifier counts it as one, which only its last second can see. `'full'` is answered rather than thrown so that the purge before it still commits: the
|
|
72
|
+
* caller throws after the transaction, and a store that filled up drains as its rows expire.
|
|
73
|
+
*
|
|
74
|
+
* A nonce that is not 22 characters of base64url, or an `until` or a clock that is not a
|
|
75
|
+
* non-negative safe integer, is the caller's fault and throws before anything is written.
|
|
76
|
+
*/
|
|
77
|
+
export declare function claimWireNonceIn(sql: SwitchSql, nonce: string, until: number, nowSeconds: number, cap?: number): WireNonceClaim;
|
|
78
|
+
/** What a claim at the cap throws, after its purge committed: the entry answers it as the store's failure. */
|
|
79
|
+
export declare const WIRE_NONCE_FULL = "the wire nonce store holds as many live nonces as it may; a claim is refused until some expire";
|
|
80
|
+
//# sourceMappingURL=wire-nonce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-nonce.d.ts","sourceRoot":"","sources":["../src/wire-nonce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,0oBAc1B,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,YAAI,uBAAuB,EAAE,4BAA4B,CAAU,CAAC;AAIvG,mHAAmH;AACnH,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,OAA+C,CAAC;AAEhG;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,SAAU,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAQzC;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAS,MAAM,KAAG,OAAsD,CAAC;AAKtG,qHAAqH;AACrH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;AAEnD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAuB,GAC3B,cAAc,CAoBhB;AAED,8GAA8G;AAC9G,eAAO,MAAM,eAAe,mGAAmG,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The wire-signing nonce store (RFC wire-signing §4, Q4 as amended): where a scope records the
|
|
3
|
+
* nonce of each signed call it accepted that changes state, so the same envelope is accepted once.
|
|
4
|
+
*
|
|
5
|
+
* The verifier in the platform's entry claims a nonce here only after every other check of the
|
|
6
|
+
* envelope has passed, and only in the scope the verified envelope names, through the scope host's
|
|
7
|
+
* `claimWireNonceLocal`. Both adapters build these tables from this one definition and claim
|
|
8
|
+
* through `claimWireNonceIn`, so the self-hosted store and the hosted one answer alike.
|
|
9
|
+
*
|
|
10
|
+
* Kernel-written spine, never a module migration. **Store-local**: the tables describe calls this
|
|
11
|
+
* store accepted, not the scope's data, so a dump never carries them and no load takes them from
|
|
12
|
+
* one (`isWireNonceTable`), and a write to them advances no write revision a carry fences on
|
|
13
|
+
* (`isWireNonceWrite`). A load, restore, wipe or delete replaces the store, and the nonces recorded
|
|
14
|
+
* before it go with it, as a rewind drops those recorded after its bookmark, for the rest of their
|
|
15
|
+
* window. That window is short by design: an envelope lives at most two minutes.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The live nonces, one row each, and the count of them. `until_s` is the integer Unix second after
|
|
19
|
+
* which a nonce may be forgotten (the envelope's `exp` plus the skew), and departs from the spine's
|
|
20
|
+
* ISO-text rule on purpose: the envelope states its times in Unix seconds and every comparison
|
|
21
|
+
* here is numeric, so text would add a conversion at both ends and change nothing.
|
|
22
|
+
*
|
|
23
|
+
* The count is a row of its own so that the cap costs one row read, not a scan: a claim keeps it in
|
|
24
|
+
* step with the rows it inserts and purges, in the same transaction.
|
|
25
|
+
*/
|
|
26
|
+
export const WIRE_NONCE_DDL = `
|
|
27
|
+
CREATE TABLE IF NOT EXISTS _substrat_wire_nonces (
|
|
28
|
+
-- The envelope's nonce: 16 random bytes in canonical base64url, 22 characters.
|
|
29
|
+
nonce TEXT PRIMARY KEY,
|
|
30
|
+
-- Integer Unix seconds, not ISO text: the envelope's own unit, compared numerically.
|
|
31
|
+
until_s INTEGER NOT NULL
|
|
32
|
+
) WITHOUT ROWID;
|
|
33
|
+
CREATE INDEX IF NOT EXISTS _substrat_wire_nonces_until
|
|
34
|
+
ON _substrat_wire_nonces (until_s);
|
|
35
|
+
-- One row, slot 'live': how many rows _substrat_wire_nonces holds. Absent until the first claim.
|
|
36
|
+
CREATE TABLE IF NOT EXISTS _substrat_wire_nonce_count (
|
|
37
|
+
slot TEXT PRIMARY KEY,
|
|
38
|
+
live INTEGER NOT NULL
|
|
39
|
+
) WITHOUT ROWID;
|
|
40
|
+
`;
|
|
41
|
+
/** The tables `WIRE_NONCE_DDL` builds: store-local, so no dump carries them. */
|
|
42
|
+
export const WIRE_NONCE_TABLE_NAMES = ['_substrat_wire_nonces', '_substrat_wire_nonce_count'];
|
|
43
|
+
const NONCE_TABLES = new Set(WIRE_NONCE_TABLE_NAMES);
|
|
44
|
+
/** Whether a table is one of the nonce store's, which a dump leaves out. Case-insensitive, as SQLite names are. */
|
|
45
|
+
export const isWireNonceTable = (name) => NONCE_TABLES.has(name.toLowerCase());
|
|
46
|
+
/**
|
|
47
|
+
* The most live nonces one scope holds. Past it a claim throws, which the entry answers as the
|
|
48
|
+
* store's failure (fail closed, and counted), never as acceptance.
|
|
49
|
+
*
|
|
50
|
+
* Sized from what one scope can be asked, not from a guess:
|
|
51
|
+
* - **How long a row lives.** A nonce is kept until `exp + 30` and can be claimed no earlier than
|
|
52
|
+
* `iat - 30`, and an envelope lives at most 120 s, so a row lives at most 120 + 30 + 30 = 180 s.
|
|
53
|
+
* - **The platform's peak.** The control plane's calls that spend a nonce in a scope are made one
|
|
54
|
+
* at a time per scope (each awaits the last), and the busy paths that move many calls (a restore's
|
|
55
|
+
* pages, the drain, an event import) name the scope alone, so they spend none here. A sequential
|
|
56
|
+
* loop at a 10 ms round trip makes at most 100 calls a second: 100 × 180 = 18 000 rows. Ten times
|
|
57
|
+
* that is 180 000.
|
|
58
|
+
* - **The object's own ceiling.** A claim is itself one request to the scope's object, which serves
|
|
59
|
+
* about 1 000 requests a second (`docs/master-plan.md`): 1 000 × 180 = 180 000 rows. No scope can
|
|
60
|
+
* reach the cap without first exceeding what its object can serve.
|
|
61
|
+
*
|
|
62
|
+
* At about 50 bytes a row, a full store is about 9 MB of a scope's 10 GB.
|
|
63
|
+
*/
|
|
64
|
+
export const WIRE_NONCE_CAP = 180_000;
|
|
65
|
+
/**
|
|
66
|
+
* At most this many expired rows go per claim. A claim inserts at most one, so the purge outpaces
|
|
67
|
+
* the inserts, and a claim's write stays bounded however many rows expired at once.
|
|
68
|
+
*/
|
|
69
|
+
export const WIRE_NONCE_PURGE_BATCH = 64;
|
|
70
|
+
/** The statements a claim writes with, whitespace aside: the only writes `isWireNonceWrite` admits. */
|
|
71
|
+
const PURGE_SQL = `DELETE FROM _substrat_wire_nonces WHERE nonce IN (SELECT nonce FROM _substrat_wire_nonces WHERE until_s < ? ORDER BY until_s LIMIT ${WIRE_NONCE_PURGE_BATCH}) RETURNING nonce`;
|
|
72
|
+
const INSERT_SQL = `INSERT INTO _substrat_wire_nonces (nonce, until_s) VALUES (?, ?) ON CONFLICT (nonce) DO NOTHING RETURNING nonce`;
|
|
73
|
+
const COUNT_WRITE_SQL = `INSERT INTO _substrat_wire_nonce_count (slot, live) VALUES ('live', ?) ON CONFLICT (slot) DO UPDATE SET live = excluded.live`;
|
|
74
|
+
const WRITES = new Set([PURGE_SQL, INSERT_SQL, COUNT_WRITE_SQL]);
|
|
75
|
+
/**
|
|
76
|
+
* Whether a statement is one of the claim's own writes, whitespace aside. The scope DO lets these,
|
|
77
|
+
* and only these, through the bookkeeping path that advances no write revision: a nonce describes
|
|
78
|
+
* a call this store accepted, not the scope's data, and a carried copy is another deployment, whose
|
|
79
|
+
* audience check refuses an envelope meant for this one anyway.
|
|
80
|
+
*/
|
|
81
|
+
export const isWireNonceWrite = (sql) => WRITES.has(sql.trim().replace(/\s+/g, ' '));
|
|
82
|
+
/** 16 bytes in canonical base64url: 22 characters, the last one's unused trailing bits zero. */
|
|
83
|
+
const NONCE = /^[A-Za-z0-9_-]{21}[AQgw]$/;
|
|
84
|
+
/**
|
|
85
|
+
* Claim `nonce` until `until` (Unix seconds) in one scope's store, at `nowSeconds` by the store's
|
|
86
|
+
* own clock. Run it inside one transaction: it purges up to `WIRE_NONCE_PURGE_BATCH` expired rows,
|
|
87
|
+
* then answers `false` for a claim after `until` (the nonce may already be forgotten) or a nonce
|
|
88
|
+
* already held (at the cap too), `'full'` when the store holds `cap` live rows, and `true` once it
|
|
89
|
+
* has recorded the nonce. A claim the store's own clock places after `until` answers `false` like a
|
|
90
|
+
* replay; the verifier counts it as one, which only its last second can see. `'full'` is answered rather than thrown so that the purge before it still commits: the
|
|
91
|
+
* caller throws after the transaction, and a store that filled up drains as its rows expire.
|
|
92
|
+
*
|
|
93
|
+
* A nonce that is not 22 characters of base64url, or an `until` or a clock that is not a
|
|
94
|
+
* non-negative safe integer, is the caller's fault and throws before anything is written.
|
|
95
|
+
*/
|
|
96
|
+
export function claimWireNonceIn(sql, nonce, until, nowSeconds, cap = WIRE_NONCE_CAP) {
|
|
97
|
+
if (typeof nonce !== 'string' || !NONCE.test(nonce))
|
|
98
|
+
throw new TypeError('a wire nonce is 22 characters of canonical base64url');
|
|
99
|
+
for (const [name, value] of [['until', until], ['nowSeconds', nowSeconds]]) {
|
|
100
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
101
|
+
throw new TypeError(`${name} is a non-negative whole number of seconds`);
|
|
102
|
+
}
|
|
103
|
+
// No count row yet means no nonce yet: the row is written with the first one. Never below zero,
|
|
104
|
+
// so a count that ever fell behind its rows cannot lift the cap.
|
|
105
|
+
let live = Math.max(0, Number(sql.all(`SELECT live FROM _substrat_wire_nonce_count WHERE slot = 'live'`)[0]?.live ?? 0));
|
|
106
|
+
const before = live;
|
|
107
|
+
live = Math.max(0, live - sql.all(PURGE_SQL, nowSeconds).length);
|
|
108
|
+
let answer;
|
|
109
|
+
if (nowSeconds > until)
|
|
110
|
+
answer = false;
|
|
111
|
+
// At the cap a nonce already held is still a replay: the one extra read is paid only there.
|
|
112
|
+
else if (live >= cap)
|
|
113
|
+
answer = sql.all('SELECT 1 FROM _substrat_wire_nonces WHERE nonce = ?', nonce).length ? false : 'full';
|
|
114
|
+
else if (sql.all(INSERT_SQL, nonce, until).length === 1) {
|
|
115
|
+
live += 1;
|
|
116
|
+
answer = true;
|
|
117
|
+
}
|
|
118
|
+
else
|
|
119
|
+
answer = false;
|
|
120
|
+
if (live !== before)
|
|
121
|
+
sql.run(COUNT_WRITE_SQL, live);
|
|
122
|
+
return answer;
|
|
123
|
+
}
|
|
124
|
+
/** What a claim at the cap throws, after its purge committed: the entry answers it as the store's failure. */
|
|
125
|
+
export const WIRE_NONCE_FULL = 'the wire nonce store holds as many live nonces as it may; a claim is refused until some expire';
|
|
126
|
+
//# sourceMappingURL=wire-nonce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire-nonce.js","sourceRoot":"","sources":["../src/wire-nonce.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrat-run/kernel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.164.0",
|
|
4
4
|
"description": "Substrat kernel contracts and services — pure TypeScript, no platform imports (D-14)",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dist"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@substrat-run/contracts": "^0.
|
|
37
|
+
"@substrat-run/contracts": "^0.164.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/node": "^22.20.5",
|