@serfab/cadre-core 0.0.2

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.
Files changed (54) hide show
  1. package/README.md +252 -0
  2. package/dist/arachnode-stub.d.ts +60 -0
  3. package/dist/arachnode-stub.js +120 -0
  4. package/dist/arachnode-stub.js.map +1 -0
  5. package/dist/cadre-node.d.ts +252 -0
  6. package/dist/cadre-node.js +753 -0
  7. package/dist/cadre-node.js.map +1 -0
  8. package/dist/control-database.d.ts +62 -0
  9. package/dist/control-database.js +295 -0
  10. package/dist/control-database.js.map +1 -0
  11. package/dist/enrollment.d.ts +76 -0
  12. package/dist/enrollment.js +126 -0
  13. package/dist/enrollment.js.map +1 -0
  14. package/dist/hibernation-manager.d.ts +68 -0
  15. package/dist/hibernation-manager.js +212 -0
  16. package/dist/hibernation-manager.js.map +1 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.js +24 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/seed-bootstrap.d.ts +164 -0
  21. package/dist/seed-bootstrap.js +554 -0
  22. package/dist/seed-bootstrap.js.map +1 -0
  23. package/dist/strand-database.d.ts +39 -0
  24. package/dist/strand-database.js +108 -0
  25. package/dist/strand-database.js.map +1 -0
  26. package/dist/strand-formation-manager.d.ts +87 -0
  27. package/dist/strand-formation-manager.js +168 -0
  28. package/dist/strand-formation-manager.js.map +1 -0
  29. package/dist/strand-instance-manager.d.ts +60 -0
  30. package/dist/strand-instance-manager.js +209 -0
  31. package/dist/strand-instance-manager.js.map +1 -0
  32. package/dist/strand-solicitation.d.ts +145 -0
  33. package/dist/strand-solicitation.js +180 -0
  34. package/dist/strand-solicitation.js.map +1 -0
  35. package/dist/strand-watcher.d.ts +70 -0
  36. package/dist/strand-watcher.js +136 -0
  37. package/dist/strand-watcher.js.map +1 -0
  38. package/dist/types.d.ts +484 -0
  39. package/dist/types.js +26 -0
  40. package/dist/types.js.map +1 -0
  41. package/package.json +67 -0
  42. package/src/arachnode-stub.ts +160 -0
  43. package/src/cadre-node.ts +923 -0
  44. package/src/control-database.ts +376 -0
  45. package/src/enrollment.ts +199 -0
  46. package/src/hibernation-manager.ts +268 -0
  47. package/src/index.ts +71 -0
  48. package/src/seed-bootstrap.ts +753 -0
  49. package/src/strand-database.ts +168 -0
  50. package/src/strand-formation-manager.ts +277 -0
  51. package/src/strand-instance-manager.ts +281 -0
  52. package/src/strand-solicitation.ts +318 -0
  53. package/src/strand-watcher.ts +197 -0
  54. package/src/types.ts +553 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cadre-node.js","sourceRoot":"","sources":["../src/cadre-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { Database } from '@quereus/quereus';
2
+ import type { Libp2p } from '@libp2p/interface';
3
+ import type { IRepo } from '@optimystic/db-core';
4
+ import type { StrandRow } from './types.js';
5
+ export interface ControlDatabaseConfig {
6
+ /** Party ID for the control network */
7
+ partyId: string;
8
+ /**
9
+ * Optional path to the control schema file.
10
+ * If not provided, uses the embedded schema for cross-platform compatibility.
11
+ * Only use this if you need to override the default schema (e.g., for testing).
12
+ */
13
+ schemaPath?: string;
14
+ /** Libp2p node for the control network (injected) */
15
+ libp2pNode: Libp2p;
16
+ /** Coordinated repo from the libp2p node */
17
+ coordinatedRepo: IRepo;
18
+ }
19
+ /**
20
+ * ControlDatabase manages the CadreControl schema using Quereus with Optimystic backend.
21
+ * It provides typed query methods for accessing control network data.
22
+ */
23
+ export declare class ControlDatabase {
24
+ private db;
25
+ private collectionFactory;
26
+ private readonly config;
27
+ private initialized;
28
+ constructor(config: ControlDatabaseConfig);
29
+ /**
30
+ * Initialize the database - load schema and register plugins
31
+ */
32
+ initialize(): Promise<void>;
33
+ private loadSchema;
34
+ /**
35
+ * Query all strands from the control database
36
+ */
37
+ queryStrands(): Promise<StrandRow[]>;
38
+ /**
39
+ * Get the underlying database for advanced queries
40
+ */
41
+ getDatabase(): Database;
42
+ /**
43
+ * Insert the initial authority key (bootstrap - no existing authorities required)
44
+ */
45
+ insertAuthorityKey(key: string): Promise<void>;
46
+ /**
47
+ * Insert a strand into the control database using authority signature.
48
+ * This starts a transaction, gets the StampId, signs it, and inserts the strand.
49
+ *
50
+ * @param strandId - Unique identifier for the strand
51
+ * @param type - Strand type: 'o' for open, 'c' for closed
52
+ * @param authorityKey - Public key of the authorizing authority
53
+ * @param signStampId - Function to sign the stamp ID with the authority's private key
54
+ * @param memberPrivateKey - Optional private key for membership in closed strands
55
+ */
56
+ insertStrand(strandId: string, type: 'o' | 'c', authorityKey: string, signStampId: (stampId: string) => string, memberPrivateKey?: string): Promise<void>;
57
+ /**
58
+ * Close the database and cleanup resources
59
+ */
60
+ close(): Promise<void>;
61
+ private ensureInitialized;
62
+ }
@@ -0,0 +1,295 @@
1
+ import debug from 'debug';
2
+ import { toString as uint8ArrayToString } from 'uint8arrays';
3
+ import { Database, registerPlugin } from '@quereus/quereus';
4
+ import cryptoPlugin from '@optimystic/quereus-plugin-crypto/plugin';
5
+ import optimysticPlugin from '@optimystic/quereus-plugin-optimystic/plugin';
6
+ import { digest, randomBytes } from '@optimystic/quereus-plugin-crypto';
7
+ const log = debug('sereus:cadre:control-db');
8
+ /**
9
+ * Embedded control schema for cross-platform compatibility.
10
+ * This schema is embedded directly in the code to work in React Native and other
11
+ * environments where file system access is not available.
12
+ */
13
+ const CONTROL_SCHEMA = `-- This manages a Sereus party's cadre, or set of nodes, and their participation in strands (networks)
14
+ declare schema CadreControl {
15
+ -- A key that can authorize various control changes
16
+ table AuthorityKey (
17
+ Key text primary key,
18
+ constraint Authorized check (
19
+ -- Bootstrap: first authority key needs no existing authorization
20
+ (select count(1) from AuthorityKey) <= 1
21
+
22
+ -- Old authority can authorize by signature and transaction stamp id (not repeatable)
23
+ or (old.Key is not null and old.Key = context.AuthorityKey and verify(digest(context.StampId, 'sha256', 'utf8'), context.Signature, old.Key, 'ed25519'))
24
+
25
+ -- or other authorities can authorize by signature and transaction stamp id (not repeatable)
26
+ or exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(context.StampId, 'sha256', 'utf8'), context.Signature, A.Key, 'ed25519'))
27
+ )
28
+ ) with context (AuthorityKey text null, Signature text null, StampId text);
29
+
30
+ -- A key that can validate a strand formation disclosure
31
+ table ValidationKey (
32
+ Key text primary key,
33
+ constraint Authorized check (
34
+ -- Authorities can authorize by signature and transaction stamp id (not repeatable)
35
+ exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(context.StampId, 'sha256', 'utf8'), context.Signature, A.Key, 'ed25519'))
36
+ )
37
+ ) with context (AuthorityKey text, StampId text, Signature text);
38
+
39
+ -- A network of members sharing an sApp database, each contributing peer nodes (their cadre) to the overall cohort
40
+ -- Cadre peers should participate in each of these strands
41
+ table Strand (
42
+ Id text primary key, -- UUID
43
+ MemberPrivateKey text null unique, -- Our private key as a member of this strand
44
+ Type text, -- Types: 'o' = Open, 'c' = Closed -- Open can still control writes in the sApp, but only Closed controls reads
45
+ constraint Authorized check (
46
+ -- Authorized by authority signature and transaction stamp id (not repeatable)
47
+ exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(context.StampId, 'sha256', 'utf8'), context.Signature, A.Key, 'ed25519'))
48
+
49
+ -- or authorized by a cadre peer who has received a valid formation invitation
50
+ or exists (select 1 from FormationUsage FU where FU.StrandId = new.Id)
51
+ ),
52
+ -- TODO: constraint to ensure member private key only if closed
53
+ ) with context (AuthorityKey text, StampId text, Signature text);
54
+
55
+ -- A peer (node) that is part of the cadre
56
+ table CadrePeer (
57
+ PeerId text primary key,
58
+ Multiaddr text,
59
+ constraint AuthorizedInsert check on insert, delete (
60
+ -- Authorized by an authority key
61
+ -- Use utf8 input encoding since peer IDs are base58btc strings, not base64url
62
+ exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(coalesce(new.PeerId, old.PeerId), 'sha256', 'utf8'), context.Signature, A.Key, 'ed25519'))
63
+ ),
64
+ constraint AuthorizedUpdate check on update (
65
+ -- Peer can change its own multiaddr (using utf8 encoding for both values)
66
+ verify(digest(new.PeerId, 'sha256', 'utf8') || digest(new.Multiaddr, 'sha256', 'utf8'), context.Signature, new.PeerId, 'ed25519')
67
+ -- or authorized by an authority key
68
+ or exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(new.PeerId, 'sha256', 'utf8'), context.Signature, A.Key, 'ed25519'))
69
+ )
70
+ ) with context (AuthorityKey text null, Signature text);
71
+
72
+ -- An open invitation to form a strand with this party
73
+ table FormationInvite (
74
+ Token text primary key, -- Just a random string
75
+ sAppId text, -- The app for the strand that will be formed
76
+ ExpiresAt datetime null,
77
+ TotalUses int null check (TotalUses >= 0),
78
+ ValidationUrl text null, -- Web hook - send disclosure, IP address...
79
+ constraint AuthorizedAddOrRemove check on insert, delete (
80
+ -- Authorized by an authority key to add or remove this invite
81
+ exists (select 1 from AuthorityKey A where A.Key = context.AuthorityKey and verify(digest(context.StampId), context.Signature, A.Key))
82
+ )
83
+ ) with context (AuthorityKey text, StampId text, Signature text);
84
+
85
+ table FormationUsage (
86
+ Token text,
87
+ UseNumber int,
88
+ Disclosure text,
89
+ StrandId text,
90
+ primary key (Token, UseNumber),
91
+ constraint InsertOnly check on update, delete (false),
92
+ constraint Monotonic check (
93
+ new.UseNumber = coalesce((select max(UseNumber) from FormationUsage U where U.Token = new.Token), 0) + 1
94
+ ),
95
+ constraint Authorized check on insert (
96
+ -- Satisfies an invitation
97
+ exists (
98
+ select 1 from FormationInvite FI
99
+ where FI.Token = new.Token
100
+ and (FI.TotalUses is null or FI.TotalUses >= new.UseNumber)
101
+ and (FI.ExpiresAt is null or FI.ExpiresAt > context.Now)
102
+ and (FI.ValidationUrl is null or verify(digest(new.Token, new.Disclosure), context.ValidationSignature, context.ValidationKey))
103
+ )
104
+ ),
105
+ constraint StrandExists check (exists (select 1 from Strand S where S.Id = new.StrandId)),
106
+ ) with context (PeerId text, PeerSignature text, Now datetime, ValidationKey text null, ValidationSignature text null);
107
+ }
108
+
109
+ apply schema CadreControl;`;
110
+ /**
111
+ * Generate a unique stamp ID for transaction authorization.
112
+ * Format: 32 bytes base64url encoded
113
+ * - First 16 bytes: SHA-256 hash of peer ID (for distributed uniqueness)
114
+ * - Last 16 bytes: Random bytes (for collision resistance)
115
+ */
116
+ function generateStampId(peerId) {
117
+ // Hash the peer ID and get first 16 bytes (128 bits)
118
+ const peerIdHash = digest(peerId, 'sha256', 'utf8', 'bytes');
119
+ const peerIdHashPart = peerIdHash.slice(0, 16);
120
+ // Generate 16 random bytes
121
+ const randomPart = randomBytes(128, 'bytes');
122
+ // Combine peer ID hash and random bytes
123
+ const combined = new Uint8Array(32);
124
+ combined.set(peerIdHashPart, 0);
125
+ combined.set(randomPart, 16);
126
+ // Convert to base64url
127
+ return uint8ArrayToString(combined, 'base64url');
128
+ }
129
+ /**
130
+ * ControlDatabase manages the CadreControl schema using Quereus with Optimystic backend.
131
+ * It provides typed query methods for accessing control network data.
132
+ */
133
+ export class ControlDatabase {
134
+ constructor(config) {
135
+ this.db = null;
136
+ this.collectionFactory = null;
137
+ this.initialized = false;
138
+ this.config = config;
139
+ }
140
+ /**
141
+ * Initialize the database - load schema and register plugins
142
+ */
143
+ async initialize() {
144
+ if (this.initialized) {
145
+ log('ControlDatabase already initialized');
146
+ return;
147
+ }
148
+ log('Initializing ControlDatabase for party: %s', this.config.partyId);
149
+ // Create database instance
150
+ this.db = new Database();
151
+ // Register crypto plugin (provides digest, sign, verify functions)
152
+ await registerPlugin(this.db, cryptoPlugin);
153
+ log('Registered crypto plugin');
154
+ // Register optimystic plugin with network transactor as default
155
+ const networkName = `control-${this.config.partyId}`;
156
+ const pluginResult = optimysticPlugin(this.db, {
157
+ default_transactor: 'network',
158
+ default_key_network: 'libp2p',
159
+ default_network_name: networkName,
160
+ enable_cache: true,
161
+ });
162
+ // Register vtables and functions manually since we need access to collectionFactory
163
+ for (const vtable of pluginResult.vtables) {
164
+ this.db.registerModule(vtable.name, vtable.module, vtable.auxData);
165
+ }
166
+ for (const func of pluginResult.functions) {
167
+ this.db.registerFunction(func.schema);
168
+ }
169
+ this.collectionFactory = pluginResult.collectionFactory;
170
+ // Inject the libp2p node into the collection factory
171
+ this.collectionFactory.registerLibp2pNode(networkName, this.config.libp2pNode, this.config.coordinatedRepo);
172
+ log('Registered libp2p node with collection factory');
173
+ // Load and execute the schema
174
+ await this.loadSchema();
175
+ this.initialized = true;
176
+ log('ControlDatabase initialized successfully');
177
+ }
178
+ async loadSchema() {
179
+ let schemaContent;
180
+ if (this.config.schemaPath) {
181
+ // Load from file if explicitly provided (for testing or custom schemas)
182
+ // This only works in Node.js environments
183
+ log('Loading schema from file: %s', this.config.schemaPath);
184
+ // Check if we're in a Node.js environment
185
+ if (typeof process !== 'undefined' && process.versions?.node) {
186
+ try {
187
+ // Use require to conditionally load fs only in Node.js
188
+ // This won't be bundled by React Native's Metro bundler
189
+ const fs = require('fs/promises');
190
+ schemaContent = await fs.readFile(this.config.schemaPath, 'utf-8');
191
+ }
192
+ catch (error) {
193
+ throw new Error(`Failed to load schema from ${this.config.schemaPath}: ${error instanceof Error ? error.message : String(error)}`);
194
+ }
195
+ }
196
+ else {
197
+ throw new Error('Loading schema from file is not supported in React Native. ' +
198
+ 'Remove the schemaPath option to use the embedded schema instead.');
199
+ }
200
+ }
201
+ else {
202
+ // Use embedded schema for cross-platform compatibility
203
+ log('Using embedded control schema');
204
+ schemaContent = CONTROL_SCHEMA;
205
+ }
206
+ await this.db.exec(schemaContent);
207
+ log('Schema loaded and executed');
208
+ }
209
+ /**
210
+ * Query all strands from the control database
211
+ */
212
+ async queryStrands() {
213
+ this.ensureInitialized();
214
+ const results = [];
215
+ for await (const row of this.db.eval('select Id, MemberPrivateKey, Type from CadreControl.Strand')) {
216
+ results.push({
217
+ Id: row.Id,
218
+ MemberPrivateKey: row.MemberPrivateKey,
219
+ Type: row.Type,
220
+ });
221
+ }
222
+ return results;
223
+ }
224
+ /**
225
+ * Get the underlying database for advanced queries
226
+ */
227
+ getDatabase() {
228
+ this.ensureInitialized();
229
+ return this.db;
230
+ }
231
+ /**
232
+ * Insert the initial authority key (bootstrap - no existing authorities required)
233
+ */
234
+ async insertAuthorityKey(key) {
235
+ this.ensureInitialized();
236
+ log('Inserting authority key: %s', key);
237
+ // For bootstrap, context values are not verified since no existing authorities
238
+ // Use fully qualified table name since schema is CadreControl
239
+ // StampId() provides the transaction's unique stamp from the optimystic transaction
240
+ await this.db.exec(`
241
+ insert into CadreControl.AuthorityKey (Key)
242
+ with context AuthorityKey = null, Signature = null, StampId = StampId()
243
+ values ('${key}')
244
+ `);
245
+ log('Authority key inserted');
246
+ }
247
+ /**
248
+ * Insert a strand into the control database using authority signature.
249
+ * This starts a transaction, gets the StampId, signs it, and inserts the strand.
250
+ *
251
+ * @param strandId - Unique identifier for the strand
252
+ * @param type - Strand type: 'o' for open, 'c' for closed
253
+ * @param authorityKey - Public key of the authorizing authority
254
+ * @param signStampId - Function to sign the stamp ID with the authority's private key
255
+ * @param memberPrivateKey - Optional private key for membership in closed strands
256
+ */
257
+ async insertStrand(strandId, type, authorityKey, signStampId, memberPrivateKey) {
258
+ this.ensureInitialized();
259
+ log('Inserting strand: %s (type: %s)', strandId, type);
260
+ const memberKeyValue = memberPrivateKey ? `'${memberPrivateKey}'` : 'null';
261
+ // Generate a unique stamp ID using the peer ID for distributed uniqueness
262
+ const peerId = this.config.libp2pNode.peerId.toString();
263
+ const stampId = generateStampId(peerId);
264
+ // Sign the stamp ID with the authority key
265
+ const signature = signStampId(stampId);
266
+ // Insert with the signed stamp ID
267
+ await this.db.exec(`
268
+ insert into CadreControl.Strand (Id, Type, MemberPrivateKey)
269
+ with context AuthorityKey = '${authorityKey}', Signature = '${signature}', StampId = '${stampId}'
270
+ values ('${strandId}', '${type}', ${memberKeyValue})
271
+ `);
272
+ log('Strand inserted: %s', strandId);
273
+ }
274
+ /**
275
+ * Close the database and cleanup resources
276
+ */
277
+ async close() {
278
+ if (this.collectionFactory) {
279
+ await this.collectionFactory.shutdown();
280
+ this.collectionFactory = null;
281
+ }
282
+ if (this.db) {
283
+ this.db.close();
284
+ this.db = null;
285
+ }
286
+ this.initialized = false;
287
+ log('ControlDatabase closed');
288
+ }
289
+ ensureInitialized() {
290
+ if (!this.initialized || !this.db) {
291
+ throw new Error('ControlDatabase not initialized. Call initialize() first.');
292
+ }
293
+ }
294
+ }
295
+ //# sourceMappingURL=control-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-database.js","sourceRoot":"","sources":["../src/control-database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import type { CreatePeerResult, MemberRegistration, MemberRegistrationResult } from './types.js';
2
+ /**
3
+ * Interface for verifying member signatures for strand joining
4
+ */
5
+ export interface MemberVerifier {
6
+ /**
7
+ * Verify that the signature is valid for the given member registration
8
+ * @param registration The member registration data
9
+ * @param signature The signature to verify
10
+ * @returns true if signature is valid
11
+ */
12
+ verifyMember(registration: MemberRegistration, signature: string): Promise<boolean>;
13
+ /**
14
+ * Check if the member key is authorized to join the strand
15
+ * (e.g., was invited via FormationInvite)
16
+ */
17
+ isAuthorizedToJoin(strandId: string, memberKey: string): Promise<boolean>;
18
+ }
19
+ /**
20
+ * Interface for registering members in a strand
21
+ */
22
+ export interface MemberRegistry {
23
+ /**
24
+ * Register a member in the strand's member list
25
+ */
26
+ registerMember(strandId: string, memberKey: string, peerIds: string[]): Promise<void>;
27
+ /**
28
+ * Check if a member is already registered in the strand
29
+ */
30
+ isMemberRegistered(strandId: string, memberKey: string): Promise<boolean>;
31
+ }
32
+ /**
33
+ * Enrollment API for creating peer identities and managing strand membership
34
+ *
35
+ * Peer Creation:
36
+ * `createCadrePeer()` generates an Ed25519 keypair for a new node.
37
+ * For cadre peer authorization, use the Seed Bootstrap API instead.
38
+ *
39
+ * Member Registration:
40
+ * Accept invitations to join strands as a member.
41
+ */
42
+ export declare class EnrollmentService {
43
+ private readonly memberVerifier?;
44
+ private readonly memberRegistry?;
45
+ constructor(options?: {
46
+ memberVerifier?: MemberVerifier;
47
+ memberRegistry?: MemberRegistry;
48
+ });
49
+ /**
50
+ * Create a new cadre peer identity
51
+ *
52
+ * Generates a new Ed25519 keypair for a cadre node.
53
+ * The private key should be stored securely by the node.
54
+ * The PeerId can be used with the Seed Bootstrap API for authorization.
55
+ */
56
+ createCadrePeer(): Promise<CreatePeerResult>;
57
+ /**
58
+ * Register a member into a strand.
59
+ *
60
+ * Called by an invited party to accept an invitation and join as a member.
61
+ * The signature proves ownership of the member key.
62
+ *
63
+ * @param registration The member registration data (strandId, key, peerIds)
64
+ * @param signature Signature over the registration proving key ownership
65
+ * @returns Success/failure with optional reason
66
+ */
67
+ registerMember(registration: MemberRegistration, signature: string): Promise<MemberRegistrationResult>;
68
+ /**
69
+ * Validate a member registration without actually registering
70
+ * Useful for pre-flight checks
71
+ */
72
+ validateMemberRegistration(registration: MemberRegistration, signature: string): Promise<{
73
+ valid: boolean;
74
+ reason?: string;
75
+ }>;
76
+ }
@@ -0,0 +1,126 @@
1
+ import debug from 'debug';
2
+ import { generateKeyPair, privateKeyToProtobuf } from '@libp2p/crypto/keys';
3
+ import { peerIdFromPrivateKey } from '@libp2p/peer-id';
4
+ const log = debug('sereus:cadre:enrollment');
5
+ /**
6
+ * Enrollment API for creating peer identities and managing strand membership
7
+ *
8
+ * Peer Creation:
9
+ * `createCadrePeer()` generates an Ed25519 keypair for a new node.
10
+ * For cadre peer authorization, use the Seed Bootstrap API instead.
11
+ *
12
+ * Member Registration:
13
+ * Accept invitations to join strands as a member.
14
+ */
15
+ export class EnrollmentService {
16
+ constructor(options) {
17
+ this.memberVerifier = options?.memberVerifier;
18
+ this.memberRegistry = options?.memberRegistry;
19
+ log('EnrollmentService created');
20
+ }
21
+ /**
22
+ * Create a new cadre peer identity
23
+ *
24
+ * Generates a new Ed25519 keypair for a cadre node.
25
+ * The private key should be stored securely by the node.
26
+ * The PeerId can be used with the Seed Bootstrap API for authorization.
27
+ */
28
+ async createCadrePeer() {
29
+ log('Creating new cadre peer identity');
30
+ // Generate Ed25519 keypair (same as libp2p uses)
31
+ const privateKey = await generateKeyPair('Ed25519');
32
+ const peerId = peerIdFromPrivateKey(privateKey);
33
+ // Export private key as protobuf bytes for storage
34
+ const privateKeyBytes = privateKeyToProtobuf(privateKey);
35
+ log('Created peer with ID: %s', peerId.toString());
36
+ return {
37
+ peerId,
38
+ privateKey: privateKeyBytes
39
+ };
40
+ }
41
+ // ============================================================================
42
+ // Member Registration API
43
+ // ============================================================================
44
+ /**
45
+ * Register a member into a strand.
46
+ *
47
+ * Called by an invited party to accept an invitation and join as a member.
48
+ * The signature proves ownership of the member key.
49
+ *
50
+ * @param registration The member registration data (strandId, key, peerIds)
51
+ * @param signature Signature over the registration proving key ownership
52
+ * @returns Success/failure with optional reason
53
+ */
54
+ async registerMember(registration, signature) {
55
+ const { strandId, key, peerIds } = registration;
56
+ log('Registering member %s for strand %s with %d peers', key, strandId, peerIds.length);
57
+ // Check required dependencies
58
+ if (!this.memberVerifier) {
59
+ log('MemberVerifier not configured');
60
+ return { success: false, reason: 'MemberVerifier not configured' };
61
+ }
62
+ if (!this.memberRegistry) {
63
+ log('MemberRegistry not configured');
64
+ return { success: false, reason: 'MemberRegistry not configured' };
65
+ }
66
+ // Verify the signature
67
+ const isValidSignature = await this.memberVerifier.verifyMember(registration, signature);
68
+ if (!isValidSignature) {
69
+ log('Invalid signature for member registration: %s', key);
70
+ return { success: false, reason: 'Invalid signature' };
71
+ }
72
+ // Check if member is authorized to join (e.g., has a valid invitation)
73
+ const isAuthorized = await this.memberVerifier.isAuthorizedToJoin(strandId, key);
74
+ if (!isAuthorized) {
75
+ log('Member %s not authorized to join strand %s', key, strandId);
76
+ return { success: false, reason: 'Not authorized to join strand' };
77
+ }
78
+ // Check if already registered
79
+ const alreadyRegistered = await this.memberRegistry.isMemberRegistered(strandId, key);
80
+ if (alreadyRegistered) {
81
+ log('Member %s already registered in strand %s', key, strandId);
82
+ return { success: false, reason: 'Member already registered' };
83
+ }
84
+ // Register the member
85
+ try {
86
+ await this.memberRegistry.registerMember(strandId, key, peerIds);
87
+ log('Member %s successfully registered in strand %s', key, strandId);
88
+ return { success: true };
89
+ }
90
+ catch (error) {
91
+ const message = error instanceof Error ? error.message : String(error);
92
+ log('Failed to register member %s: %s', key, message);
93
+ return { success: false, reason: `Registration failed: ${message}` };
94
+ }
95
+ }
96
+ /**
97
+ * Validate a member registration without actually registering
98
+ * Useful for pre-flight checks
99
+ */
100
+ async validateMemberRegistration(registration, signature) {
101
+ const { strandId, key } = registration;
102
+ if (!this.memberVerifier) {
103
+ return { valid: false, reason: 'MemberVerifier not configured' };
104
+ }
105
+ if (!this.memberRegistry) {
106
+ return { valid: false, reason: 'MemberRegistry not configured' };
107
+ }
108
+ // Verify signature
109
+ const isValidSignature = await this.memberVerifier.verifyMember(registration, signature);
110
+ if (!isValidSignature) {
111
+ return { valid: false, reason: 'Invalid signature' };
112
+ }
113
+ // Check authorization
114
+ const isAuthorized = await this.memberVerifier.isAuthorizedToJoin(strandId, key);
115
+ if (!isAuthorized) {
116
+ return { valid: false, reason: 'Not authorized to join strand' };
117
+ }
118
+ // Check if already registered
119
+ const alreadyRegistered = await this.memberRegistry.isMemberRegistered(strandId, key);
120
+ if (alreadyRegistered) {
121
+ return { valid: false, reason: 'Member already registered' };
122
+ }
123
+ return { valid: true };
124
+ }
125
+ }
126
+ //# sourceMappingURL=enrollment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrollment.js","sourceRoot":"","sources":["../src/enrollment.ts"],"names":[],"mappings":"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"}