@serfab/cadre-core 0.8.1 → 0.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/README.md +2 -2
- package/dist/cadre-node.d.ts +101 -61
- package/dist/cadre-node.js +165 -124
- package/dist/cadre-node.js.map +1 -1
- package/dist/control-cohort.d.ts +15 -15
- package/dist/control-cohort.js +14 -14
- package/dist/control-cohort.js.map +1 -1
- package/dist/control-database.d.ts +51 -34
- package/dist/control-database.js +72 -56
- package/dist/control-database.js.map +1 -1
- package/dist/control-formation-recorder.d.ts +2 -2
- package/dist/control-formation-recorder.js +2 -2
- package/dist/control-schema.d.ts +1 -1
- package/dist/control-schema.js +57 -33
- package/dist/control-schema.js.map +1 -1
- package/dist/device-token.d.ts +1 -1
- package/dist/device-token.js +1 -1
- package/dist/{authority-key.d.ts → ed25519-key.d.ts} +11 -10
- package/dist/{authority-key.js → ed25519-key.js} +9 -10
- package/dist/ed25519-key.js.map +1 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/key-store.d.ts +1 -1
- package/dist/key-store.js +1 -1
- package/dist/peer-authorization.d.ts +28 -6
- package/dist/peer-authorization.js +33 -7
- package/dist/peer-authorization.js.map +1 -1
- package/dist/peer-record.d.ts +3 -3
- package/dist/peer-record.js +3 -3
- package/dist/push-node.d.ts +38 -0
- package/dist/push-node.js +48 -0
- package/dist/push-node.js.map +1 -0
- package/dist/push-notifier-apns.d.ts +10 -2
- package/dist/push-notifier-apns.js +14 -10
- package/dist/push-notifier-apns.js.map +1 -1
- package/dist/push-notifier-fcm.d.ts +7 -1
- package/dist/push-notifier-fcm.js +9 -10
- package/dist/push-notifier-fcm.js.map +1 -1
- package/dist/push-notifier.d.ts +16 -35
- package/dist/push-notifier.js +16 -44
- package/dist/push-notifier.js.map +1 -1
- package/dist/seed-bootstrap.d.ts +70 -51
- package/dist/seed-bootstrap.js +168 -106
- package/dist/seed-bootstrap.js.map +1 -1
- package/dist/seed-trust-policy.d.ts +11 -11
- package/dist/seed-trust-policy.js +11 -11
- package/dist/seed-trust-policy.js.map +1 -1
- package/dist/strand-database.d.ts +5 -5
- package/dist/strand-database.js +4 -4
- package/dist/strand-database.js.map +1 -1
- package/dist/strand-formation-protocol.d.ts +1 -1
- package/dist/strand-formation-protocol.js +1 -1
- package/dist/strand-instance-manager.d.ts +1 -1
- package/dist/strand-instance-manager.js +1 -1
- package/dist/strand-instance-manager.js.map +1 -1
- package/dist/strand-member-key.d.ts +6 -6
- package/dist/strand-member-key.js +6 -6
- package/dist/strand-member-key.js.map +1 -1
- package/dist/strand-member-registry.d.ts +7 -7
- package/dist/strand-member-registry.js +5 -5
- package/dist/strand-member-registry.js.map +1 -1
- package/dist/strand-membership-writer.d.ts +84 -84
- package/dist/strand-membership-writer.js +90 -90
- package/dist/strand-membership-writer.js.map +1 -1
- package/dist/types.d.ts +52 -32
- package/dist/types.js.map +1 -1
- package/package.json +7 -3
- package/src/cadre-node.ts +170 -126
- package/src/control-cohort.ts +17 -17
- package/src/control-database.ts +76 -59
- package/src/control-formation-recorder.ts +2 -2
- package/src/control-schema.ts +57 -33
- package/src/device-token.ts +1 -1
- package/src/{authority-key.ts → ed25519-key.ts} +12 -11
- package/src/index.ts +21 -19
- package/src/key-store.ts +1 -1
- package/src/peer-authorization.ts +35 -7
- package/src/peer-record.ts +3 -3
- package/src/push-node.ts +64 -0
- package/src/push-notifier-apns.ts +16 -12
- package/src/push-notifier-fcm.ts +9 -10
- package/src/push-notifier.ts +16 -57
- package/src/seed-bootstrap.ts +179 -115
- package/src/seed-trust-policy.ts +18 -18
- package/src/strand-database.ts +6 -6
- package/src/strand-formation-protocol.ts +1 -1
- package/src/strand-instance-manager.ts +2 -2
- package/src/strand-member-key.ts +7 -7
- package/src/strand-member-registry.ts +10 -10
- package/src/strand-membership-writer.ts +127 -127
- package/src/types.ts +52 -32
- package/dist/authority-key.js.map +0 -1
|
@@ -3,7 +3,14 @@ import type { Libp2p } from '@libp2p/interface';
|
|
|
3
3
|
import type { IRepo } from '@optimystic/db-core';
|
|
4
4
|
import type { StrandRow, PeerAddressRecord, DeviceTokenRecord } from './types.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Generate a unique stamp ID for transaction authorization.
|
|
7
|
+
* Format: 32 bytes base64url encoded
|
|
8
|
+
* - First 16 bytes: SHA-256 hash of peer ID (for distributed uniqueness)
|
|
9
|
+
* - Last 16 bytes: Random bytes (for collision resistance)
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateStampId(peerId: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Build the canonical authorization message that owner signatures are bound to.
|
|
7
14
|
*
|
|
8
15
|
* The message is a SINGLE framed SHA-256 digest over the ordered tuple of fields (the
|
|
9
16
|
* crypto plugin's injective multi-field encoding), in a fixed field order, with the
|
|
@@ -30,7 +37,7 @@ export declare function buildAuthorizationMessage(fields: string[]): Uint8Array;
|
|
|
30
37
|
* SQL-injection surface and hands callers (e.g. the integration harness's
|
|
31
38
|
* `waitForControlSync`) a typo-proof table argument.
|
|
32
39
|
*/
|
|
33
|
-
export type ControlTable = '
|
|
40
|
+
export type ControlTable = 'OwnerKey' | 'ValidationKey' | 'Strand' | 'CadrePeer' | 'DeviceToken' | 'FormationInvite' | 'FormationUsage';
|
|
34
41
|
export interface ControlDatabaseConfig {
|
|
35
42
|
/** Party ID for the control network */
|
|
36
43
|
partyId: string;
|
|
@@ -78,7 +85,7 @@ export declare class ControlDatabase {
|
|
|
78
85
|
* into the `from` clause: the names are not user input, but the check keeps the
|
|
79
86
|
* dynamic query off the injection surface and fails loudly on a typo instead of
|
|
80
87
|
* emitting a malformed statement. The count reflects only the rows this node's
|
|
81
|
-
* control DB has converged on — in the integration harness that is the
|
|
88
|
+
* control DB has converged on — in the integration harness that is the owner
|
|
82
89
|
* node (one ControlDatabase per party), i.e. the authoritative control-network
|
|
83
90
|
* view, not a per-drone convergence guarantee.
|
|
84
91
|
*/
|
|
@@ -88,32 +95,42 @@ export declare class ControlDatabase {
|
|
|
88
95
|
*/
|
|
89
96
|
getDatabase(): Database;
|
|
90
97
|
/**
|
|
91
|
-
* Check whether any
|
|
98
|
+
* Check whether any owner key exists in the control database.
|
|
92
99
|
* Used to decide whether a fresh-party genesis insert is required.
|
|
93
100
|
*/
|
|
94
|
-
|
|
101
|
+
hasOwnerKey(): Promise<boolean>;
|
|
95
102
|
/**
|
|
96
|
-
* Idempotent genesis: insert `key` as the founding
|
|
97
|
-
* the party has none yet. Returns true if it inserted, false if an
|
|
98
|
-
* key already existed (so a repeat `--
|
|
103
|
+
* Idempotent genesis: insert `key` as the founding owner key only when
|
|
104
|
+
* the party has none yet. Returns true if it inserted, false if an owner
|
|
105
|
+
* key already existed (so a repeat `--owner` start is a no-op).
|
|
99
106
|
*/
|
|
100
|
-
|
|
107
|
+
ensureOwnerKey(key: string): Promise<boolean>;
|
|
101
108
|
/**
|
|
102
|
-
* Collect every
|
|
109
|
+
* Collect every owner key (`CadreControl.OwnerKey.Key`) as a set.
|
|
103
110
|
*
|
|
104
111
|
* This is the steady-state trust anchor for seeds: a seed's signer key is
|
|
105
112
|
* trusted only if it is already enrolled here (see `SeedTrustPolicy`). It is
|
|
106
|
-
* also the
|
|
113
|
+
* also the owner-identity source for `queryPeers`, decoupling owner
|
|
107
114
|
* status from the libp2p transport peer ID.
|
|
108
115
|
*/
|
|
109
|
-
|
|
116
|
+
getOwnerKeys(): Promise<Set<string>>;
|
|
110
117
|
/**
|
|
111
118
|
* Enumerate the CadrePeer rows (cadre membership) for admin/membership reads.
|
|
112
119
|
*/
|
|
113
120
|
queryCadrePeers(): Promise<Array<{
|
|
114
121
|
peerId: string;
|
|
115
122
|
multiaddr: string | null;
|
|
123
|
+
stampId: string | null;
|
|
124
|
+
vouchOwner: string | null;
|
|
125
|
+
vouchSig: string | null;
|
|
116
126
|
}>>;
|
|
127
|
+
/**
|
|
128
|
+
* Read a single `CadrePeer` row's single-use `StampId` nonce (null when the row
|
|
129
|
+
* does not exist). Used by the owner delete / re-touch paths, which must bind
|
|
130
|
+
* their signature to the row's CURRENT nonce ({@link cadrePeerRemoveDigest} /
|
|
131
|
+
* {@link cadrePeerVoucherDigest}).
|
|
132
|
+
*/
|
|
133
|
+
queryCadrePeerStampId(peerId: string): Promise<string | null>;
|
|
117
134
|
/**
|
|
118
135
|
* Read a single peer's address record (the full `CadrePeer` row) by PeerId.
|
|
119
136
|
*
|
|
@@ -130,8 +147,8 @@ export declare class ControlDatabase {
|
|
|
130
147
|
*
|
|
131
148
|
* Authorization is carried entirely by the record: the `Sig` column (verified
|
|
132
149
|
* by the `AuthorizedUpdate` self-branch against the stored `PublicKey`) plus
|
|
133
|
-
* the strictly-increasing `UpdatedAt`. No
|
|
134
|
-
* is the refresh path for any member —
|
|
150
|
+
* the strictly-increasing `UpdatedAt`. No owner key is involved, so this
|
|
151
|
+
* is the refresh path for any member — owner or drone — once its row
|
|
135
152
|
* exists. `PublicKey` is intentionally not in the SET list (it is immutable on
|
|
136
153
|
* self-update and the constraint enforces `new.PublicKey = old.PublicKey`).
|
|
137
154
|
*/
|
|
@@ -151,7 +168,7 @@ export declare class ControlDatabase {
|
|
|
151
168
|
*
|
|
152
169
|
* Authorization is carried entirely by the record: the `Sig` column (verified by
|
|
153
170
|
* the `DeviceToken.AuthorizedUpdate` self-branch against the stored
|
|
154
|
-
* `CadrePeer.PublicKey`) plus the strictly-increasing `UpdatedAt`. No
|
|
171
|
+
* `CadrePeer.PublicKey`) plus the strictly-increasing `UpdatedAt`. No owner key
|
|
155
172
|
* is involved, so this is the refresh / rotation path for any member once both its
|
|
156
173
|
* `CadrePeer` row (for the PublicKey) and its `DeviceToken` row exist. `PeerId` is
|
|
157
174
|
* intentionally not in the SET list (immutable; the constraint enforces
|
|
@@ -159,48 +176,48 @@ export declare class ControlDatabase {
|
|
|
159
176
|
*/
|
|
160
177
|
updateSelfDeviceToken(record: DeviceTokenRecord): Promise<void>;
|
|
161
178
|
/**
|
|
162
|
-
* Insert the initial
|
|
179
|
+
* Insert the initial owner key (bootstrap - no existing owners required)
|
|
163
180
|
*/
|
|
164
|
-
|
|
181
|
+
insertOwnerKey(key: string): Promise<void>;
|
|
165
182
|
/**
|
|
166
|
-
* Insert a strand into the control database using an
|
|
183
|
+
* Insert a strand into the control database using an owner signature.
|
|
167
184
|
*
|
|
168
|
-
* The
|
|
185
|
+
* The owner signs the canonical row-bound authorization message (see
|
|
169
186
|
* {@link buildAuthorizationMessage}) — NOT a bare stamp — so the signature is bound to
|
|
170
187
|
* this strand's contents and cannot be transplanted onto an attacker-chosen row. The
|
|
171
188
|
* StampId is persisted as a unique column for single-use anti-replay.
|
|
172
189
|
*
|
|
173
190
|
* @param strandId - Unique identifier for the strand
|
|
174
191
|
* @param type - Strand type: 'o' for open, 'c' for closed
|
|
175
|
-
* @param
|
|
192
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
176
193
|
* @param signMessage - Function that ed25519-signs the raw message bytes (no pre-hash)
|
|
177
|
-
* with the
|
|
194
|
+
* with the owner's private key, returning a base64url signature
|
|
178
195
|
* @param memberPrivateKey - Optional private key for membership in closed strands
|
|
179
196
|
*/
|
|
180
|
-
insertStrand(strandId: string, type: 'o' | 'c',
|
|
197
|
+
insertStrand(strandId: string, type: 'o' | 'c', ownerKey: string, signMessage: (message: Uint8Array) => string, memberPrivateKey?: string): Promise<void>;
|
|
181
198
|
/**
|
|
182
|
-
* Insert a validation key into the control database using an
|
|
199
|
+
* Insert a validation key into the control database using an owner signature.
|
|
183
200
|
*
|
|
184
|
-
* Mirrors {@link insertStrand}: the
|
|
201
|
+
* Mirrors {@link insertStrand}: the owner signs the canonical row-bound
|
|
185
202
|
* authorization message over (Key, StampId), and the StampId is persisted as a unique
|
|
186
203
|
* column for single-use anti-replay. A `ValidationKey` authorizes verifying strand
|
|
187
204
|
* formation disclosures.
|
|
188
205
|
*
|
|
189
206
|
* @param key - The validation public key to enroll
|
|
190
|
-
* @param
|
|
207
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
191
208
|
* @param signMessage - Function that ed25519-signs the raw message bytes (no pre-hash)
|
|
192
|
-
* with the
|
|
209
|
+
* with the owner's private key, returning a base64url signature
|
|
193
210
|
*/
|
|
194
|
-
insertValidationKey(key: string,
|
|
211
|
+
insertValidationKey(key: string, ownerKey: string, signMessage: (message: Uint8Array) => string): Promise<void>;
|
|
195
212
|
/**
|
|
196
|
-
* Insert an
|
|
213
|
+
* Insert an owner-signed `FormationInvite` (open invitation token).
|
|
197
214
|
*
|
|
198
215
|
* The invite is the on-network record that later authorizes an
|
|
199
|
-
*
|
|
216
|
+
* owner-signature-FREE `Strand` creation: an invited cadre peer redeems it
|
|
200
217
|
* by inserting a matching `FormationUsage` row (see {@link redeemInvitation}),
|
|
201
218
|
* which satisfies the consent branch of `Strand.Authorized`.
|
|
202
219
|
*
|
|
203
|
-
* Like {@link insertStrand}/{@link insertValidationKey}, the
|
|
220
|
+
* Like {@link insertStrand}/{@link insertValidationKey}, the owner signs the
|
|
204
221
|
* canonical row-bound authorization message (see {@link buildAuthorizationMessage})
|
|
205
222
|
* over (Token, sAppId, ExpiresAt, TotalUses, ValidationUrl, StrandId, StampId) — NOT a
|
|
206
223
|
* bare stamp — so the signature is bound to this invite's contents and cannot be
|
|
@@ -225,13 +242,13 @@ export declare class ControlDatabase {
|
|
|
225
242
|
*
|
|
226
243
|
* @param token - Invitation token (the `FormationInvite` primary key)
|
|
227
244
|
* @param sAppId - The sApp a redeemed strand will use
|
|
228
|
-
* @param
|
|
245
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
229
246
|
* @param signMessage - ed25519-signs the raw message bytes (no pre-hash),
|
|
230
247
|
* returning a base64url signature — the same callback shape {@link insertStrand} uses
|
|
231
248
|
* @param options - Optional `expiresAtMs` (epoch ms), `totalUses`, `validationUrl`,
|
|
232
249
|
* `strandId` (bind to a pre-existing host strand for provision-then-record)
|
|
233
250
|
*/
|
|
234
|
-
insertFormationInvite(token: string, sAppId: string,
|
|
251
|
+
insertFormationInvite(token: string, sAppId: string, ownerKey: string, signMessage: (message: Uint8Array) => string, options?: {
|
|
235
252
|
expiresAtMs?: number;
|
|
236
253
|
totalUses?: number;
|
|
237
254
|
validationUrl?: string;
|
|
@@ -246,7 +263,7 @@ export declare class ControlDatabase {
|
|
|
246
263
|
* `FormationUsage.StrandExists` requires the `Strand` row. Both CHECKs contain
|
|
247
264
|
* subqueries, so Quereus auto-defers them to transaction commit — wrapping both
|
|
248
265
|
* inserts in a single explicit `begin … commit` lets both deferred CHECKs see
|
|
249
|
-
* both rows at commit. The strand is authorised WITHOUT an
|
|
266
|
+
* both rows at commit. The strand is authorised WITHOUT an owner signature
|
|
250
267
|
* (the `FormationUsage` branch of `Strand.Authorized`) but still gets a fresh,
|
|
251
268
|
* unique `StampId` column to satisfy the not-null/unique anti-replay column.
|
|
252
269
|
*
|
|
@@ -269,7 +286,7 @@ export declare class ControlDatabase {
|
|
|
269
286
|
/**
|
|
270
287
|
* Record a `FormationUsage` against an **already-existing** `Strand` (no strand
|
|
271
288
|
* insert). This is the redemption path when the strand was provisioned
|
|
272
|
-
* separately (e.g.
|
|
289
|
+
* separately (e.g. owner-signed) and the consent record is added after the
|
|
273
290
|
* fact: the single insert auto-commits, and the deferred `StrandExists` CHECK
|
|
274
291
|
* is satisfied by the pre-existing committed strand row. Returns the assigned
|
|
275
292
|
* `UseNumber`.
|
package/dist/control-database.js
CHANGED
|
@@ -14,7 +14,7 @@ const timing = debug('sereus:cadre:timing');
|
|
|
14
14
|
* - First 16 bytes: SHA-256 hash of peer ID (for distributed uniqueness)
|
|
15
15
|
* - Last 16 bytes: Random bytes (for collision resistance)
|
|
16
16
|
*/
|
|
17
|
-
function generateStampId(peerId) {
|
|
17
|
+
export function generateStampId(peerId) {
|
|
18
18
|
// Hash the peer ID and get first 16 bytes (128 bits). A purely local ID
|
|
19
19
|
// generator: never signed/verified against SQL, so the framed single-field
|
|
20
20
|
// digest is fine (the changed framing is not cross-checked anywhere).
|
|
@@ -44,7 +44,7 @@ function parseStoredDatetimeMs(value) {
|
|
|
44
44
|
return new Date(hasZone ? value : `${value}Z`).getTime();
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
* Build the canonical authorization message that
|
|
47
|
+
* Build the canonical authorization message that owner signatures are bound to.
|
|
48
48
|
*
|
|
49
49
|
* The message is a SINGLE framed SHA-256 digest over the ordered tuple of fields (the
|
|
50
50
|
* crypto plugin's injective multi-field encoding), in a fixed field order, with the
|
|
@@ -69,7 +69,7 @@ export function buildAuthorizationMessage(fields) {
|
|
|
69
69
|
}
|
|
70
70
|
/** Runtime guard mirroring {@link ControlTable} for the dynamic-`from` count. */
|
|
71
71
|
const CONTROL_TABLES = new Set([
|
|
72
|
-
'
|
|
72
|
+
'OwnerKey',
|
|
73
73
|
'ValidationKey',
|
|
74
74
|
'Strand',
|
|
75
75
|
'CadrePeer',
|
|
@@ -230,7 +230,7 @@ export class ControlDatabase {
|
|
|
230
230
|
* into the `from` clause: the names are not user input, but the check keeps the
|
|
231
231
|
* dynamic query off the injection surface and fails loudly on a typo instead of
|
|
232
232
|
* emitting a malformed statement. The count reflects only the rows this node's
|
|
233
|
-
* control DB has converged on — in the integration harness that is the
|
|
233
|
+
* control DB has converged on — in the integration harness that is the owner
|
|
234
234
|
* node (one ControlDatabase per party), i.e. the authoritative control-network
|
|
235
235
|
* view, not a per-drone convergence guarantee.
|
|
236
236
|
*/
|
|
@@ -252,42 +252,42 @@ export class ControlDatabase {
|
|
|
252
252
|
return this.db;
|
|
253
253
|
}
|
|
254
254
|
/**
|
|
255
|
-
* Check whether any
|
|
255
|
+
* Check whether any owner key exists in the control database.
|
|
256
256
|
* Used to decide whether a fresh-party genesis insert is required.
|
|
257
257
|
*/
|
|
258
|
-
async
|
|
258
|
+
async hasOwnerKey() {
|
|
259
259
|
this.ensureInitialized();
|
|
260
|
-
for await (const row of this.db.eval('select count(1) as Count from CadreControl.
|
|
260
|
+
for await (const row of this.db.eval('select count(1) as Count from CadreControl.OwnerKey')) {
|
|
261
261
|
return row.Count > 0;
|
|
262
262
|
}
|
|
263
263
|
return false;
|
|
264
264
|
}
|
|
265
265
|
/**
|
|
266
|
-
* Idempotent genesis: insert `key` as the founding
|
|
267
|
-
* the party has none yet. Returns true if it inserted, false if an
|
|
268
|
-
* key already existed (so a repeat `--
|
|
266
|
+
* Idempotent genesis: insert `key` as the founding owner key only when
|
|
267
|
+
* the party has none yet. Returns true if it inserted, false if an owner
|
|
268
|
+
* key already existed (so a repeat `--owner` start is a no-op).
|
|
269
269
|
*/
|
|
270
|
-
async
|
|
270
|
+
async ensureOwnerKey(key) {
|
|
271
271
|
this.ensureInitialized();
|
|
272
|
-
if (await this.
|
|
273
|
-
log('
|
|
272
|
+
if (await this.hasOwnerKey()) {
|
|
273
|
+
log('Owner key already present; skipping genesis insert');
|
|
274
274
|
return false;
|
|
275
275
|
}
|
|
276
|
-
await this.
|
|
276
|
+
await this.insertOwnerKey(key);
|
|
277
277
|
return true;
|
|
278
278
|
}
|
|
279
279
|
/**
|
|
280
|
-
* Collect every
|
|
280
|
+
* Collect every owner key (`CadreControl.OwnerKey.Key`) as a set.
|
|
281
281
|
*
|
|
282
282
|
* This is the steady-state trust anchor for seeds: a seed's signer key is
|
|
283
283
|
* trusted only if it is already enrolled here (see `SeedTrustPolicy`). It is
|
|
284
|
-
* also the
|
|
284
|
+
* also the owner-identity source for `queryPeers`, decoupling owner
|
|
285
285
|
* status from the libp2p transport peer ID.
|
|
286
286
|
*/
|
|
287
|
-
async
|
|
287
|
+
async getOwnerKeys() {
|
|
288
288
|
this.ensureInitialized();
|
|
289
289
|
const keys = new Set();
|
|
290
|
-
for await (const row of this.db.eval('select Key from CadreControl.
|
|
290
|
+
for await (const row of this.db.eval('select Key from CadreControl.OwnerKey')) {
|
|
291
291
|
keys.add(row.Key);
|
|
292
292
|
}
|
|
293
293
|
return keys;
|
|
@@ -298,14 +298,30 @@ export class ControlDatabase {
|
|
|
298
298
|
async queryCadrePeers() {
|
|
299
299
|
this.ensureInitialized();
|
|
300
300
|
const rows = [];
|
|
301
|
-
for await (const row of this.db.eval('select PeerId, Multiaddr from CadreControl.CadrePeer')) {
|
|
301
|
+
for await (const row of this.db.eval('select PeerId, Multiaddr, StampId, VouchOwner, VouchSig from CadreControl.CadrePeer')) {
|
|
302
302
|
rows.push({
|
|
303
303
|
peerId: row.PeerId,
|
|
304
304
|
multiaddr: row.Multiaddr ?? null,
|
|
305
|
+
stampId: row.StampId ?? null,
|
|
306
|
+
vouchOwner: row.VouchOwner ?? null,
|
|
307
|
+
vouchSig: row.VouchSig ?? null,
|
|
305
308
|
});
|
|
306
309
|
}
|
|
307
310
|
return rows;
|
|
308
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Read a single `CadrePeer` row's single-use `StampId` nonce (null when the row
|
|
314
|
+
* does not exist). Used by the owner delete / re-touch paths, which must bind
|
|
315
|
+
* their signature to the row's CURRENT nonce ({@link cadrePeerRemoveDigest} /
|
|
316
|
+
* {@link cadrePeerVoucherDigest}).
|
|
317
|
+
*/
|
|
318
|
+
async queryCadrePeerStampId(peerId) {
|
|
319
|
+
this.ensureInitialized();
|
|
320
|
+
for await (const row of this.db.eval('select StampId from CadreControl.CadrePeer where PeerId = ?', [peerId])) {
|
|
321
|
+
return row.StampId ?? null;
|
|
322
|
+
}
|
|
323
|
+
return null;
|
|
324
|
+
}
|
|
309
325
|
/**
|
|
310
326
|
* Read a single peer's address record (the full `CadrePeer` row) by PeerId.
|
|
311
327
|
*
|
|
@@ -335,8 +351,8 @@ export class ControlDatabase {
|
|
|
335
351
|
*
|
|
336
352
|
* Authorization is carried entirely by the record: the `Sig` column (verified
|
|
337
353
|
* by the `AuthorizedUpdate` self-branch against the stored `PublicKey`) plus
|
|
338
|
-
* the strictly-increasing `UpdatedAt`. No
|
|
339
|
-
* is the refresh path for any member —
|
|
354
|
+
* the strictly-increasing `UpdatedAt`. No owner key is involved, so this
|
|
355
|
+
* is the refresh path for any member — owner or drone — once its row
|
|
340
356
|
* exists. `PublicKey` is intentionally not in the SET list (it is immutable on
|
|
341
357
|
* self-update and the constraint enforces `new.PublicKey = old.PublicKey`).
|
|
342
358
|
*/
|
|
@@ -345,7 +361,7 @@ export class ControlDatabase {
|
|
|
345
361
|
const multiaddr = record.addrs.join(',');
|
|
346
362
|
await this.db.exec(`
|
|
347
363
|
update CadreControl.CadrePeer
|
|
348
|
-
with context
|
|
364
|
+
with context OwnerKey = null, Signature = ?
|
|
349
365
|
set Multiaddr = ?, UpdatedAt = ?, Sig = ?
|
|
350
366
|
where PeerId = ?
|
|
351
367
|
`, [record.sig, multiaddr, record.updatedAt, record.sig, record.peerId]);
|
|
@@ -378,7 +394,7 @@ export class ControlDatabase {
|
|
|
378
394
|
*
|
|
379
395
|
* Authorization is carried entirely by the record: the `Sig` column (verified by
|
|
380
396
|
* the `DeviceToken.AuthorizedUpdate` self-branch against the stored
|
|
381
|
-
* `CadrePeer.PublicKey`) plus the strictly-increasing `UpdatedAt`. No
|
|
397
|
+
* `CadrePeer.PublicKey`) plus the strictly-increasing `UpdatedAt`. No owner key
|
|
382
398
|
* is involved, so this is the refresh / rotation path for any member once both its
|
|
383
399
|
* `CadrePeer` row (for the PublicKey) and its `DeviceToken` row exist. `PeerId` is
|
|
384
400
|
* intentionally not in the SET list (immutable; the constraint enforces
|
|
@@ -388,46 +404,46 @@ export class ControlDatabase {
|
|
|
388
404
|
this.ensureInitialized();
|
|
389
405
|
await this.db.exec(`
|
|
390
406
|
update CadreControl.DeviceToken
|
|
391
|
-
with context
|
|
407
|
+
with context OwnerKey = null, Signature = ?
|
|
392
408
|
set Platform = ?, Token = ?, UpdatedAt = ?, Sig = ?
|
|
393
409
|
where PeerId = ?
|
|
394
410
|
`, [record.sig, record.platform, record.token, record.updatedAt, record.sig, record.peerId]);
|
|
395
411
|
log('Self device token updated: %s (platform=%s, updatedAt=%d)', record.peerId, record.platform, record.updatedAt);
|
|
396
412
|
}
|
|
397
413
|
/**
|
|
398
|
-
* Insert the initial
|
|
414
|
+
* Insert the initial owner key (bootstrap - no existing owners required)
|
|
399
415
|
*/
|
|
400
|
-
async
|
|
416
|
+
async insertOwnerKey(key) {
|
|
401
417
|
this.ensureInitialized();
|
|
402
|
-
log('Inserting
|
|
403
|
-
// Bootstrap is authorized by the schema's `(select count(1) from
|
|
418
|
+
log('Inserting owner key: %s', key);
|
|
419
|
+
// Bootstrap is authorized by the schema's `(select count(1) from OwnerKey) <= 1`
|
|
404
420
|
// branch, so no signature is needed. We still persist a fresh, unique StampId in the
|
|
405
421
|
// row's own column to satisfy the not-null/unique anti-replay constraint — the StampId
|
|
406
422
|
// is now a real column value, not the optimystic `StampId()` SQL function.
|
|
407
423
|
const stampId = generateStampId(this.config.libp2pNode.peerId.toString());
|
|
408
424
|
await this.db.exec(`
|
|
409
|
-
insert into CadreControl.
|
|
410
|
-
with context
|
|
425
|
+
insert into CadreControl.OwnerKey (Key, StampId)
|
|
426
|
+
with context OwnerKey = null, Signature = null
|
|
411
427
|
values (?, ?)
|
|
412
428
|
`, [key, stampId]);
|
|
413
|
-
log('
|
|
429
|
+
log('Owner key inserted');
|
|
414
430
|
}
|
|
415
431
|
/**
|
|
416
|
-
* Insert a strand into the control database using an
|
|
432
|
+
* Insert a strand into the control database using an owner signature.
|
|
417
433
|
*
|
|
418
|
-
* The
|
|
434
|
+
* The owner signs the canonical row-bound authorization message (see
|
|
419
435
|
* {@link buildAuthorizationMessage}) — NOT a bare stamp — so the signature is bound to
|
|
420
436
|
* this strand's contents and cannot be transplanted onto an attacker-chosen row. The
|
|
421
437
|
* StampId is persisted as a unique column for single-use anti-replay.
|
|
422
438
|
*
|
|
423
439
|
* @param strandId - Unique identifier for the strand
|
|
424
440
|
* @param type - Strand type: 'o' for open, 'c' for closed
|
|
425
|
-
* @param
|
|
441
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
426
442
|
* @param signMessage - Function that ed25519-signs the raw message bytes (no pre-hash)
|
|
427
|
-
* with the
|
|
443
|
+
* with the owner's private key, returning a base64url signature
|
|
428
444
|
* @param memberPrivateKey - Optional private key for membership in closed strands
|
|
429
445
|
*/
|
|
430
|
-
async insertStrand(strandId, type,
|
|
446
|
+
async insertStrand(strandId, type, ownerKey, signMessage, memberPrivateKey) {
|
|
431
447
|
this.ensureInitialized();
|
|
432
448
|
log('Inserting strand: %s (type: %s)', strandId, type);
|
|
433
449
|
// Generate a unique stamp ID using the peer ID for distributed uniqueness
|
|
@@ -440,25 +456,25 @@ export class ControlDatabase {
|
|
|
440
456
|
// StampId is a real, unique column (single-use anti-replay), no longer a context value.
|
|
441
457
|
await this.db.exec(`
|
|
442
458
|
insert into CadreControl.Strand (Id, Type, MemberPrivateKey, StampId)
|
|
443
|
-
with context
|
|
459
|
+
with context OwnerKey = ?, Signature = ?
|
|
444
460
|
values (?, ?, ?, ?)
|
|
445
|
-
`, [
|
|
461
|
+
`, [ownerKey, signature, strandId, type, memberPrivateKey ?? null, stampId]);
|
|
446
462
|
log('Strand inserted: %s', strandId);
|
|
447
463
|
}
|
|
448
464
|
/**
|
|
449
|
-
* Insert a validation key into the control database using an
|
|
465
|
+
* Insert a validation key into the control database using an owner signature.
|
|
450
466
|
*
|
|
451
|
-
* Mirrors {@link insertStrand}: the
|
|
467
|
+
* Mirrors {@link insertStrand}: the owner signs the canonical row-bound
|
|
452
468
|
* authorization message over (Key, StampId), and the StampId is persisted as a unique
|
|
453
469
|
* column for single-use anti-replay. A `ValidationKey` authorizes verifying strand
|
|
454
470
|
* formation disclosures.
|
|
455
471
|
*
|
|
456
472
|
* @param key - The validation public key to enroll
|
|
457
|
-
* @param
|
|
473
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
458
474
|
* @param signMessage - Function that ed25519-signs the raw message bytes (no pre-hash)
|
|
459
|
-
* with the
|
|
475
|
+
* with the owner's private key, returning a base64url signature
|
|
460
476
|
*/
|
|
461
|
-
async insertValidationKey(key,
|
|
477
|
+
async insertValidationKey(key, ownerKey, signMessage) {
|
|
462
478
|
this.ensureInitialized();
|
|
463
479
|
log('Inserting validation key: %s', key);
|
|
464
480
|
const peerId = this.config.libp2pNode.peerId.toString();
|
|
@@ -468,20 +484,20 @@ export class ControlDatabase {
|
|
|
468
484
|
const signature = signMessage(message);
|
|
469
485
|
await this.db.exec(`
|
|
470
486
|
insert into CadreControl.ValidationKey (Key, StampId)
|
|
471
|
-
with context
|
|
487
|
+
with context OwnerKey = ?, Signature = ?
|
|
472
488
|
values (?, ?)
|
|
473
|
-
`, [
|
|
489
|
+
`, [ownerKey, signature, key, stampId]);
|
|
474
490
|
log('Validation key inserted: %s', key);
|
|
475
491
|
}
|
|
476
492
|
/**
|
|
477
|
-
* Insert an
|
|
493
|
+
* Insert an owner-signed `FormationInvite` (open invitation token).
|
|
478
494
|
*
|
|
479
495
|
* The invite is the on-network record that later authorizes an
|
|
480
|
-
*
|
|
496
|
+
* owner-signature-FREE `Strand` creation: an invited cadre peer redeems it
|
|
481
497
|
* by inserting a matching `FormationUsage` row (see {@link redeemInvitation}),
|
|
482
498
|
* which satisfies the consent branch of `Strand.Authorized`.
|
|
483
499
|
*
|
|
484
|
-
* Like {@link insertStrand}/{@link insertValidationKey}, the
|
|
500
|
+
* Like {@link insertStrand}/{@link insertValidationKey}, the owner signs the
|
|
485
501
|
* canonical row-bound authorization message (see {@link buildAuthorizationMessage})
|
|
486
502
|
* over (Token, sAppId, ExpiresAt, TotalUses, ValidationUrl, StrandId, StampId) — NOT a
|
|
487
503
|
* bare stamp — so the signature is bound to this invite's contents and cannot be
|
|
@@ -506,13 +522,13 @@ export class ControlDatabase {
|
|
|
506
522
|
*
|
|
507
523
|
* @param token - Invitation token (the `FormationInvite` primary key)
|
|
508
524
|
* @param sAppId - The sApp a redeemed strand will use
|
|
509
|
-
* @param
|
|
525
|
+
* @param ownerKey - Public key of the authorizing owner
|
|
510
526
|
* @param signMessage - ed25519-signs the raw message bytes (no pre-hash),
|
|
511
527
|
* returning a base64url signature — the same callback shape {@link insertStrand} uses
|
|
512
528
|
* @param options - Optional `expiresAtMs` (epoch ms), `totalUses`, `validationUrl`,
|
|
513
529
|
* `strandId` (bind to a pre-existing host strand for provision-then-record)
|
|
514
530
|
*/
|
|
515
|
-
async insertFormationInvite(token, sAppId,
|
|
531
|
+
async insertFormationInvite(token, sAppId, ownerKey, signMessage, options = {}) {
|
|
516
532
|
this.ensureInitialized();
|
|
517
533
|
log('Inserting formation invite: %s', token);
|
|
518
534
|
const stampId = generateStampId(this.config.libp2pNode.peerId.toString());
|
|
@@ -540,10 +556,10 @@ export class ControlDatabase {
|
|
|
540
556
|
// unique column (single-use anti-replay), no longer a context value.
|
|
541
557
|
await this.db.exec(`
|
|
542
558
|
insert into CadreControl.FormationInvite (Token, sAppId, ExpiresAt, TotalUses, ValidationUrl, StrandId, StampId)
|
|
543
|
-
with context
|
|
559
|
+
with context OwnerKey = ?, Signature = ?
|
|
544
560
|
values (?, ?, ?, ?, ?, ?, ?)
|
|
545
561
|
`, [
|
|
546
|
-
|
|
562
|
+
ownerKey, signature,
|
|
547
563
|
token, sAppId,
|
|
548
564
|
expiresAtCanonical,
|
|
549
565
|
options.totalUses ?? null,
|
|
@@ -562,7 +578,7 @@ export class ControlDatabase {
|
|
|
562
578
|
* `FormationUsage.StrandExists` requires the `Strand` row. Both CHECKs contain
|
|
563
579
|
* subqueries, so Quereus auto-defers them to transaction commit — wrapping both
|
|
564
580
|
* inserts in a single explicit `begin … commit` lets both deferred CHECKs see
|
|
565
|
-
* both rows at commit. The strand is authorised WITHOUT an
|
|
581
|
+
* both rows at commit. The strand is authorised WITHOUT an owner signature
|
|
566
582
|
* (the `FormationUsage` branch of `Strand.Authorized`) but still gets a fresh,
|
|
567
583
|
* unique `StampId` column to satisfy the not-null/unique anti-replay column.
|
|
568
584
|
*
|
|
@@ -579,11 +595,11 @@ export class ControlDatabase {
|
|
|
579
595
|
const useNumber = await this.nextUseNumber(token);
|
|
580
596
|
await this.db.beginTransaction();
|
|
581
597
|
try {
|
|
582
|
-
// 1. Strand row — authorised by the FormationUsage branch (no
|
|
598
|
+
// 1. Strand row — authorised by the FormationUsage branch (no owner sig),
|
|
583
599
|
// still carrying a fresh unique StampId for the anti-replay column.
|
|
584
600
|
await this.db.exec(`
|
|
585
601
|
insert into CadreControl.Strand (Id, Type, MemberPrivateKey, StampId)
|
|
586
|
-
with context
|
|
602
|
+
with context OwnerKey = null, Signature = null
|
|
587
603
|
values (?, ?, ?, ?)
|
|
588
604
|
`, [strandId, type, memberPrivateKey ?? null, strandStampId]);
|
|
589
605
|
// 2. FormationUsage row — authorised by the matching FormationInvite.
|
|
@@ -610,7 +626,7 @@ export class ControlDatabase {
|
|
|
610
626
|
/**
|
|
611
627
|
* Record a `FormationUsage` against an **already-existing** `Strand` (no strand
|
|
612
628
|
* insert). This is the redemption path when the strand was provisioned
|
|
613
|
-
* separately (e.g.
|
|
629
|
+
* separately (e.g. owner-signed) and the consent record is added after the
|
|
614
630
|
* fact: the single insert auto-commits, and the deferred `StrandExists` CHECK
|
|
615
631
|
* is satisfied by the pre-existing committed strand row. Returns the assigned
|
|
616
632
|
* `UseNumber`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-database.js","sourceRoot":"","sources":["../src/control-database.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"control-database.js","sourceRoot":"","sources":["../src/control-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import type { OpenInvitation } from './types.js';
|
|
|
8
8
|
* usage questions, and writes the consent row that records a redemption. Two
|
|
9
9
|
* provisioning shapes are supported, keyed on whether the invite binds a host strand:
|
|
10
10
|
*
|
|
11
|
-
* - **Bound (provision-then-record):** the host strand already exists (
|
|
11
|
+
* - **Bound (provision-then-record):** the host strand already exists (owner-signed
|
|
12
12
|
* up front and named by the invite's `StrandId`), so {@link resolveStrand} reports it
|
|
13
13
|
* and {@link recordUsage} writes the consent row against that pre-existing strand
|
|
14
14
|
* (record-only) rather than inserting a new `Strand`.
|
|
@@ -42,7 +42,7 @@ export declare class ControlFormationUsageRecorder implements FormationUsageReco
|
|
|
42
42
|
* Record consent against an **already-existing** host strand (record-only): the
|
|
43
43
|
* single `FormationUsage` insert auto-commits and the deferred `StrandExists`
|
|
44
44
|
* CHECK is satisfied by the pre-existing strand. This is the provision-then-record
|
|
45
|
-
* commitment — the strand was minted
|
|
45
|
+
* commitment — the strand was minted owner-signed up front, so we do NOT
|
|
46
46
|
* re-insert it (which would double-insert the same PK). `initiatorKey` is carried
|
|
47
47
|
* as the usage `PeerId` (advisory). Use {@link ControlDatabase.redeemInvitation}
|
|
48
48
|
* for the consent-creates-strand path instead.
|