ftown 0.21.0 → 0.24.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/attention-events.d.ts +1 -1
- package/dist/attention-store.d.ts +3 -0
- package/dist/attention-store.js +25 -1
- package/dist/attention-store.js.map +1 -1
- package/dist/centrifugo-client.d.ts +14 -1
- package/dist/centrifugo-client.js +23 -2
- package/dist/centrifugo-client.js.map +1 -1
- package/dist/command-rpc.d.ts +2 -0
- package/dist/command-rpc.js +55 -9
- package/dist/command-rpc.js.map +1 -1
- package/dist/identity-reset.d.ts +3 -1
- package/dist/identity-reset.js +27 -5
- package/dist/identity-reset.js.map +1 -1
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/ledger-pairing-client.d.ts +1 -1
- package/dist/ledger-pairing-client.js +5 -3
- package/dist/ledger-pairing-client.js.map +1 -1
- package/dist/ledger-relay.d.ts +42 -7
- package/dist/ledger-relay.js +175 -33
- package/dist/ledger-relay.js.map +1 -1
- package/dist/ledger-reoffer.d.ts +56 -0
- package/dist/ledger-reoffer.js +210 -0
- package/dist/ledger-reoffer.js.map +1 -0
- package/dist/ledger-startup.d.ts +30 -5
- package/dist/ledger-startup.js +40 -10
- package/dist/ledger-startup.js.map +1 -1
- package/dist/local-api-server.d.ts +3 -0
- package/dist/local-api-server.js +68 -6
- package/dist/local-api-server.js.map +1 -1
- package/dist/mail-delivery.d.ts +26 -3
- package/dist/mail-delivery.js +65 -7
- package/dist/mail-delivery.js.map +1 -1
- package/dist/preview-protocol.d.ts +19 -3
- package/dist/preview-protocol.js +14 -0
- package/dist/preview-protocol.js.map +1 -1
- package/dist/relay-token.d.ts +6 -0
- package/dist/relay-token.js +9 -1
- package/dist/relay-token.js.map +1 -1
- package/dist/security/bridge/ledger-rpc.d.ts +34 -0
- package/dist/security/bridge/ledger-rpc.js +58 -0
- package/dist/security/bridge/ledger-rpc.js.map +1 -0
- package/dist/security/bridge/ledger-store.d.ts +82 -13
- package/dist/security/bridge/ledger-store.js +394 -54
- package/dist/security/bridge/ledger-store.js.map +1 -1
- package/dist/security/bridge/permissions.js +2 -1
- package/dist/security/bridge/permissions.js.map +1 -1
- package/dist/security/bridge/policy.d.ts +2 -1
- package/dist/security/bridge/policy.js.map +1 -1
- package/dist/security/bridge/security.d.ts +138 -10
- package/dist/security/bridge/security.js +252 -54
- package/dist/security/bridge/security.js.map +1 -1
- package/dist/security/ledger/announce.d.ts +32 -0
- package/dist/security/ledger/announce.js +101 -0
- package/dist/security/ledger/announce.js.map +1 -0
- package/dist/security/ledger/ledger.d.ts +107 -14
- package/dist/security/ledger/ledger.js +364 -83
- package/dist/security/ledger/ledger.js.map +1 -1
- package/dist/security/ledger/proof.d.ts +12 -0
- package/dist/security/ledger/proof.js +40 -8
- package/dist/security/ledger/proof.js.map +1 -1
- package/dist/security/ledger/protocol.d.ts +14 -1
- package/dist/security/ledger/protocol.js.map +1 -1
- package/dist/session-controller.d.ts +9 -3
- package/dist/session-controller.js +120 -20
- package/dist/session-controller.js.map +1 -1
- package/dist/session-inbox-protocol.d.ts +2 -0
- package/dist/session-preview.d.ts +20 -5
- package/dist/session-preview.js +185 -37
- package/dist/session-preview.js.map +1 -1
- package/dist/session-store.js +19 -1
- package/dist/session-store.js.map +1 -1
- package/dist/sessions-commands.js +41 -7
- package/dist/sessions-commands.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/opencode-plugin/ftown.js +15 -2
- package/package.json +2 -2
- package/skills/ftown/SKILL.md +18 -7
- package/skills/ftown/references/sessions.md +35 -10
|
@@ -5,7 +5,9 @@ import { BridgePolicyStore } from './policy.js';
|
|
|
5
5
|
import { BridgeSecurityError } from './errors.js';
|
|
6
6
|
import { classifyCommand, classifyHttp, classifyTerminal } from './permissions.js';
|
|
7
7
|
import { endpointSchema } from './metadata.js';
|
|
8
|
-
import { accountIdOf, ledgerHead, parseLedger } from '../ledger/ledger.js';
|
|
8
|
+
import { accountIdOf, ledgerHead, ledgerHeads, parseLedger, relateHead } from '../ledger/ledger.js';
|
|
9
|
+
import { verifyHeadAnnouncement } from '../ledger/announce.js';
|
|
10
|
+
import { ledgerRemovesBridge, shortHead } from './ledger-store.js';
|
|
9
11
|
const token = z.string().regex(/^[A-Za-z0-9_-]{1,200}$/);
|
|
10
12
|
const routeSchema = z.discriminatedUnion('kind', [
|
|
11
13
|
z.object({ kind: z.literal('command'), requestId: token, command: z.string().min(1).max(100), sessionId: token.nullable() }).strict(),
|
|
@@ -19,17 +21,18 @@ const object = (value) => {
|
|
|
19
21
|
return value;
|
|
20
22
|
};
|
|
21
23
|
export const applicationJson = (value) => JSON.parse(JSON.stringify(value));
|
|
22
|
-
/** (length, head) of verified chains already evaluated: a chain's payloads are hash-linked, so an equal pair is an equal chain. */
|
|
23
|
-
const EVALUATED_LIMIT = 16;
|
|
24
24
|
/** onApprovalRequired: at most one emission per endpoint per spacing, and at most this many endpoints tracked at once. */
|
|
25
25
|
const APPROVAL_SPACING_MS = 2000;
|
|
26
26
|
const APPROVAL_TRACKED_LIMIT = 1024;
|
|
27
|
+
const REJECTED = { decision: 'reject', relation: null, head: null, revision: null };
|
|
27
28
|
const reason = (error) => error instanceof Error ? error.message : String(error);
|
|
28
|
-
|
|
29
|
+
const httpStatus = (error) => typeof error === 'object' && error !== null && 'status' in error && typeof error.status === 'number' ? error.status : null;
|
|
30
|
+
/** The candidate's last record ({revision, head}), or null when it is not a well-formed chain. One hash, no signature work. */
|
|
31
|
+
async function chainTip(candidate) {
|
|
29
32
|
try {
|
|
30
33
|
const ledger = parseLedger(candidate);
|
|
31
34
|
const last = ledger.transitions[ledger.transitions.length - 1];
|
|
32
|
-
return
|
|
35
|
+
return { revision: ledger.transitions.length, head: last === undefined ? await accountIdOf(ledger.genesis.payload) : await ledgerHead(last.payload) };
|
|
33
36
|
}
|
|
34
37
|
catch {
|
|
35
38
|
return null;
|
|
@@ -54,14 +57,23 @@ export class BridgeSecurityService {
|
|
|
54
57
|
ledgerNow;
|
|
55
58
|
/** Ledger offers and their projections run one at a time, so the policy never sees an older view after a newer one. */
|
|
56
59
|
ledgerTail = Promise.resolve();
|
|
57
|
-
status = {
|
|
60
|
+
status = {
|
|
61
|
+
accountId: null, revision: null, head: null, own: 'unpaired', divergence: null, serverBehind: false, removedOnOtherHistory: false,
|
|
62
|
+
};
|
|
63
|
+
announcements = { accepted: 0, dropped: 0 };
|
|
64
|
+
headListeners = new Set();
|
|
58
65
|
ledgerMonotonic;
|
|
59
66
|
/** The trusted view of the last projection (null: none yet, or another account's). */
|
|
60
67
|
trustedView = null;
|
|
68
|
+
/** The state of the last projection (null: none yet, or an empty store), and the record heads of its chain (null: not computed). */
|
|
69
|
+
held = null;
|
|
70
|
+
heads = null;
|
|
61
71
|
approvalListeners = new Set();
|
|
62
72
|
approvalEmitted = new Map();
|
|
63
73
|
pendingOffers = new Map();
|
|
64
|
-
|
|
74
|
+
serverBehind = false;
|
|
75
|
+
/** The server's revision when it was last seen behind us (null: unknown). */
|
|
76
|
+
serverRevision = null;
|
|
65
77
|
refreshing = null;
|
|
66
78
|
refreshQueued = null;
|
|
67
79
|
constructor(identity, bridgeId, dataDir, options) {
|
|
@@ -290,9 +302,10 @@ export class BridgeSecurityService {
|
|
|
290
302
|
await this.refreshLedger();
|
|
291
303
|
}
|
|
292
304
|
/**
|
|
293
|
-
* Reads the server's ledger and offers it ('server'). A result that is not 'reject' counts as server contact;
|
|
294
|
-
* logged, never thrown. Single in flight: calls during a read share one trailing read, so a change announced
|
|
295
|
-
* The wiring calls it on every relay (re)subscribe and on a `ledger_head` that differs from ledgerStatus().head
|
|
305
|
+
* Reads the server's ledger and offers it ('server') through readServerLedger. A result that is not 'reject' counts as server contact;
|
|
306
|
+
* a fetch failure is logged, never thrown. Single in flight: calls during a read share one trailing read, so a change announced
|
|
307
|
+
* mid-read is not missed. The wiring calls it on every relay (re)subscribe and on a `ledger_head` that differs from ledgerStatus().head,
|
|
308
|
+
* and checks ledgerStatus().serverBehind afterwards.
|
|
296
309
|
*/
|
|
297
310
|
refreshLedger() {
|
|
298
311
|
if (!this.options.ledger || this.closed)
|
|
@@ -305,28 +318,46 @@ export class BridgeSecurityService {
|
|
|
305
318
|
return this.refreshing;
|
|
306
319
|
}
|
|
307
320
|
async refreshOnce() {
|
|
321
|
+
const read = await this.readServerLedger();
|
|
322
|
+
if (read.kind !== 'read')
|
|
323
|
+
console.warn('[Security] Account ledger read failed:', read.reason);
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* One read of the server's ledger (not coalesced), offered as 'server'; a result that is not 'reject' counts as server contact. Never
|
|
327
|
+
* throws: a 404 is 'unknown_account' (the server does not know this account), any other failure 'failed'. The re-offer runs it right
|
|
328
|
+
* before it posts; refreshLedger runs it for everything else.
|
|
329
|
+
*/
|
|
330
|
+
async readServerLedger() {
|
|
308
331
|
const ledger = this.options.ledger;
|
|
332
|
+
if (!ledger || this.closed)
|
|
333
|
+
return { kind: 'failed', reason: 'Account ledger unavailable' };
|
|
309
334
|
let fetched;
|
|
310
335
|
try {
|
|
311
336
|
fetched = await ledger.fetchLedger();
|
|
312
337
|
}
|
|
313
338
|
catch (error) {
|
|
314
|
-
|
|
315
|
-
return;
|
|
339
|
+
return httpStatus(error) === 404 ? { kind: 'unknown_account', reason: reason(error) } : { kind: 'failed', reason: reason(error) };
|
|
316
340
|
}
|
|
317
|
-
|
|
341
|
+
const outcome = await this.offerLedgerResult(fetched, 'server');
|
|
342
|
+
if (outcome.decision !== 'reject')
|
|
318
343
|
this.noteServerContact();
|
|
344
|
+
return { kind: 'read', outcome };
|
|
345
|
+
}
|
|
346
|
+
/** offerLedgerResult(candidate, source).decision. */
|
|
347
|
+
async offerLedger(candidate, source) {
|
|
348
|
+
return (await this.offerLedgerResult(candidate, source)).decision;
|
|
319
349
|
}
|
|
320
350
|
/**
|
|
321
|
-
* Offers an untrusted chain (the relay, a relay-token response, a server read) to the replica, then projects the result and
|
|
322
|
-
* this bridge's own status. Never throws: an invalid candidate, a closed service and a local storage failure all return 'reject'.
|
|
323
|
-
* Per source at most one offer waits behind the one in flight; a newer one replaces it, and the replaced caller gets the newer
|
|
324
|
-
*
|
|
325
|
-
*
|
|
351
|
+
* Offers an untrusted chain (the relay, a relay-token response, a server read or answer) to the replica, then projects the result and
|
|
352
|
+
* checks this bridge's own status. Never throws: an invalid candidate, a closed service and a local storage failure all return 'reject'.
|
|
353
|
+
* Per source at most one offer waits behind the one in flight; a newer one replaces it, and the replaced caller gets the newer outcome.
|
|
354
|
+
* A chain equal to the stored one or a prefix of it is answered keep/same or keep/behind from record heads alone (no signature check),
|
|
355
|
+
* unless a divergence is recorded for that source (the store clears it). The outcome of a 'server' chain sets serverBehind. Offers never
|
|
356
|
+
* count as server contact: readServerLedger and noteServerContact decide that.
|
|
326
357
|
*/
|
|
327
|
-
|
|
358
|
+
offerLedgerResult(candidate, source) {
|
|
328
359
|
if (!this.options.ledger || this.closed)
|
|
329
|
-
return Promise.resolve(
|
|
360
|
+
return Promise.resolve(REJECTED);
|
|
330
361
|
return new Promise(resolve => {
|
|
331
362
|
const waiting = this.pendingOffers.get(source);
|
|
332
363
|
if (waiting) {
|
|
@@ -340,18 +371,25 @@ export class BridgeSecurityService {
|
|
|
340
371
|
if (this.pendingOffers.get(source) === pending)
|
|
341
372
|
this.pendingOffers.delete(source);
|
|
342
373
|
return this.evaluate(pending.candidate, source);
|
|
343
|
-
}).catch(() =>
|
|
344
|
-
waiter(
|
|
374
|
+
}).catch(() => REJECTED).then(outcome => { for (const waiter of pending.waiters)
|
|
375
|
+
waiter({ ...outcome }); });
|
|
345
376
|
});
|
|
346
377
|
}
|
|
347
378
|
async evaluate(candidate, source) {
|
|
348
379
|
const ledger = this.options.ledger;
|
|
349
380
|
if (this.closed)
|
|
350
|
-
return
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
381
|
+
return REJECTED;
|
|
382
|
+
const tip = await chainTip(candidate);
|
|
383
|
+
const heads = this.heads;
|
|
384
|
+
if (tip !== null && heads !== null && this.held !== null && heads.of === this.held.checkpoint.head
|
|
385
|
+
&& !this.held.divergences.some(entry => entry.source === source)) {
|
|
386
|
+
let known = 'unknown';
|
|
387
|
+
try {
|
|
388
|
+
known = relateHead(heads.list, tip);
|
|
389
|
+
}
|
|
390
|
+
catch { /* not a head of ours */ }
|
|
391
|
+
if (known === 'same' || known === 'behind')
|
|
392
|
+
return this.observed(source, { decision: 'keep', relation: known, head: tip.head, revision: tip.revision });
|
|
355
393
|
}
|
|
356
394
|
let result;
|
|
357
395
|
try {
|
|
@@ -359,29 +397,105 @@ export class BridgeSecurityService {
|
|
|
359
397
|
}
|
|
360
398
|
catch (error) {
|
|
361
399
|
console.error('[Security] Account ledger offer failed:', reason(error));
|
|
362
|
-
return
|
|
400
|
+
return REJECTED;
|
|
363
401
|
}
|
|
402
|
+
const outcome = { decision: result.decision, relation: result.relation, head: result.candidate?.head ?? null, revision: result.candidate?.revision ?? null };
|
|
364
403
|
if (result.decision === 'reject' || result.state === null)
|
|
365
|
-
return 'reject';
|
|
404
|
+
return { ...outcome, decision: 'reject' };
|
|
366
405
|
try {
|
|
367
406
|
await this.projectState(result.state);
|
|
368
|
-
// Only a chain that verified and was fully applied is remembered; a rejected one never is (it may carry forged signatures).
|
|
369
|
-
if (key !== null)
|
|
370
|
-
this.remember(key);
|
|
371
407
|
}
|
|
372
408
|
catch (error) {
|
|
373
409
|
console.error('[Security] Account ledger projection failed:', reason(error));
|
|
374
410
|
}
|
|
375
|
-
return
|
|
411
|
+
return this.observed(source, outcome);
|
|
376
412
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
413
|
+
/** Records what a non-rejected 'server' chain says about the server: behind (a strict prefix of ours) or not. */
|
|
414
|
+
observed(source, outcome) {
|
|
415
|
+
if (source === 'server' && outcome.decision !== 'reject')
|
|
416
|
+
this.setServerBehind(outcome.relation === 'behind', outcome.revision);
|
|
417
|
+
return outcome;
|
|
418
|
+
}
|
|
419
|
+
setServerBehind(behind, revision) {
|
|
420
|
+
this.serverBehind = behind;
|
|
421
|
+
this.serverRevision = behind ? revision : null;
|
|
422
|
+
this.status = { ...this.status, serverBehind: behind };
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* A relay-token answer that carried no chain: the server's head is `head` (at `revision` when the answer named one, else the head the
|
|
426
|
+
* request sent). Classified against the stored chain from record heads alone: 'same', 'behind' (sets serverBehind), or 'unknown'
|
|
427
|
+
* (ahead, diverged, or not a head of ours: the caller reads the server). null without a ledger, a head, or a stored chain.
|
|
428
|
+
*/
|
|
429
|
+
noteServerHead(server) {
|
|
430
|
+
const heads = this.heads;
|
|
431
|
+
if (!this.options.ledger || this.closed || server.head === null || heads === null)
|
|
432
|
+
return null;
|
|
433
|
+
const revision = server.revision ?? heads.list.lastIndexOf(server.head);
|
|
434
|
+
let relation = 'unknown';
|
|
435
|
+
if (revision >= 0) {
|
|
436
|
+
try {
|
|
437
|
+
relation = relateHead(heads.list, { revision, head: server.head });
|
|
438
|
+
}
|
|
439
|
+
catch {
|
|
440
|
+
return null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
if (relation !== 'unknown')
|
|
444
|
+
this.setServerBehind(relation === 'behind', revision);
|
|
445
|
+
return relation;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* What this bridge holds that the server does not (for the startup message when the server refuses our key): our records after the
|
|
449
|
+
* fork point of a recorded server divergence, or after the server's revision when it was seen behind us; null when neither is known.
|
|
450
|
+
*/
|
|
451
|
+
uniqueHistory() {
|
|
452
|
+
const held = this.held;
|
|
453
|
+
if (held === null)
|
|
454
|
+
return null;
|
|
455
|
+
const fork = held.divergences.find(entry => entry.source === 'server')?.forkRevision ?? null;
|
|
456
|
+
const after = fork ?? (this.serverBehind ? this.serverRevision : null);
|
|
457
|
+
if (after === null || after < 0 || after > held.ledger.transitions.length)
|
|
458
|
+
return null;
|
|
459
|
+
const records = held.ledger.transitions.slice(after);
|
|
460
|
+
let removals = 0;
|
|
461
|
+
let passkeys = 0;
|
|
462
|
+
for (const record of records) {
|
|
463
|
+
const type = record.payload.operation.type;
|
|
464
|
+
if (type === 'revoke_device' || type === 'revoke_bridge')
|
|
465
|
+
removals++;
|
|
466
|
+
if (type === 'add_authority')
|
|
467
|
+
passkeys++;
|
|
384
468
|
}
|
|
469
|
+
return { afterRevision: after, records: records.length, removals, passkeys };
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Account mode, read-only (ledger_head / ledger_chain): the stored chain, for a BROWSER that is a member of this bridge's trusted
|
|
473
|
+
* checkpoint (listed with exactly this endpoint key, not revoked; policy access, offline grace and own status included). Throws
|
|
474
|
+
* BridgeSecurityError('permission_denied') for anyone else, Solo, --local and the local CLI.
|
|
475
|
+
*/
|
|
476
|
+
async memberLedger(principal) {
|
|
477
|
+
const held = await this.memberState(principal);
|
|
478
|
+
// Read-only by contract (the ledger_chain pager copies only the records it returns): no copy of the whole chain per request.
|
|
479
|
+
return { ledger: held.ledger, accountId: held.checkpoint.accountId, head: held.checkpoint.head, revision: held.checkpoint.revision };
|
|
480
|
+
}
|
|
481
|
+
/** ledger_head: like memberLedger, but answers the tip only, without touching the chain. */
|
|
482
|
+
async memberHead(principal) {
|
|
483
|
+
const held = await this.memberState(principal);
|
|
484
|
+
return { accountId: held.checkpoint.accountId, head: held.checkpoint.head, revision: held.checkpoint.revision };
|
|
485
|
+
}
|
|
486
|
+
async memberState(principal) {
|
|
487
|
+
if (!this.options.ledger || this.closed)
|
|
488
|
+
throw new BridgeSecurityError('permission_denied');
|
|
489
|
+
await this.policy.revalidate(principal, 'read');
|
|
490
|
+
const held = this.held;
|
|
491
|
+
const endpoint = principal.endpoint;
|
|
492
|
+
// The trusted checkpoint (sticky applied): a browser removed on a refused history is refused here too.
|
|
493
|
+
if (held === null || endpoint.kind !== 'browser' || held.trusted.accountId !== this.endpoint.ownerId
|
|
494
|
+
|| held.trusted.revokedDeviceIds.includes(endpoint.id)
|
|
495
|
+
|| !held.trusted.devices.some(device => device.endpoint.id === endpoint.id && device.endpoint.publicKey === endpoint.publicKey)) {
|
|
496
|
+
throw new BridgeSecurityError('permission_denied');
|
|
497
|
+
}
|
|
498
|
+
return held;
|
|
385
499
|
}
|
|
386
500
|
/** A successful server contact (the token provider calls this after a relay-token response): re-anchors offline grace at now and
|
|
387
501
|
* persists it (the replica's lastServerReadAt and the clock high-water). An invalid time is ignored. */
|
|
@@ -396,45 +510,128 @@ export class BridgeSecurityService {
|
|
|
396
510
|
ledger.store.markServerRead(at).catch(failed);
|
|
397
511
|
this.policy.persistLedgerClock().catch(failed);
|
|
398
512
|
}
|
|
399
|
-
ledgerStatus() {
|
|
513
|
+
ledgerStatus() {
|
|
514
|
+
return { ...this.status, divergence: this.status.divergence === null ? null : { ...this.status.divergence }, announcements: { ...this.announcements } };
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* A head announcement from the ledger channel (parsed, from an owner publication), judged against this bridge's TRUSTED checkpoint (sticky
|
|
518
|
+
* revocations applied) and the record heads of its stored chain: its relation ('same', 'behind' or 'unknown': the caller runs a paced server
|
|
519
|
+
* read) when it verifies, else null. This bridge's own announcements (kind bridge, its bridgeId) return null before any work and are not
|
|
520
|
+
* counted; every other null is counted as dropped, every relation as accepted. At most one signature verification, then an O(1) compare.
|
|
521
|
+
* Never throws. An announcement is never proof: nothing here changes the replica.
|
|
522
|
+
*/
|
|
523
|
+
async judgeHeadAnnouncement(announcement) {
|
|
524
|
+
if (!this.options.ledger || this.closed)
|
|
525
|
+
return null;
|
|
526
|
+
let relation = null;
|
|
527
|
+
try {
|
|
528
|
+
if (announcement.kind === 'bridge' && announcement.keyId === this.bridgeId)
|
|
529
|
+
return null;
|
|
530
|
+
const trusted = this.trustedView;
|
|
531
|
+
if (trusted !== null && this.heads !== null && this.heads.of === trusted.head
|
|
532
|
+
&& await verifyHeadAnnouncement(trusted, announcement, this.ledgerNow())) {
|
|
533
|
+
// The chain may have moved during the verification: compare with the heads held now.
|
|
534
|
+
const heads = this.heads;
|
|
535
|
+
if (heads !== null)
|
|
536
|
+
relation = relateHead(heads.list, { revision: announcement.revision, head: announcement.head });
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
catch {
|
|
540
|
+
relation = null;
|
|
541
|
+
}
|
|
542
|
+
if (relation === null)
|
|
543
|
+
this.announcements.dropped++;
|
|
544
|
+
else
|
|
545
|
+
this.announcements.accepted++;
|
|
546
|
+
return relation;
|
|
547
|
+
}
|
|
548
|
+
/** Account mode: fires (synchronously, after the projection) whenever the stored head or this bridge's own status changes, e.g. after an
|
|
549
|
+
* adopt. Listener errors are logged. */
|
|
550
|
+
onLedgerHead(listener) {
|
|
551
|
+
this.headListeners.add(listener);
|
|
552
|
+
return () => { this.headListeners.delete(listener); };
|
|
553
|
+
}
|
|
400
554
|
ledgerTask(run) {
|
|
401
555
|
const next = this.ledgerTail.then(run);
|
|
402
556
|
this.ledgerTail = next.catch(() => undefined);
|
|
403
557
|
return next;
|
|
404
558
|
}
|
|
405
|
-
|
|
559
|
+
/** This bridge's keys, exactly as its add_bridge lists them. */
|
|
560
|
+
ownKeys() {
|
|
561
|
+
return { bridgeId: this.bridgeId, endpointId: this.endpoint.id, endpointPublicKey: this.endpoint.publicKey, authPublicKey: this.options.ledger?.authPublicKey ?? '' };
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* This bridge in `trusted` (applyRevocations of the projected RAW chain `ledger`). 'active' = listed with exactly its keys. 'revoked' =
|
|
565
|
+
* the RAW chain proves the removal of THIS bridge (ledgerRemovesBridge: it added these keys, then revoked the id), the only status that
|
|
566
|
+
* resets the identity, decided exactly like the startup check (store.ownBridgeStatus). A sticky-only id, a removal seen on a refused
|
|
567
|
+
* history (C1c `seen`, never merged for our own id anyway) or a tombstone of our id is 'absent': fail closed, never a reset.
|
|
568
|
+
*/
|
|
569
|
+
ownOf(trusted, ledger) {
|
|
406
570
|
if (trusted === null)
|
|
407
571
|
return 'unpaired';
|
|
408
572
|
if (trusted.accountId !== this.endpoint.ownerId)
|
|
409
573
|
return 'absent';
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
574
|
+
const own = this.ownKeys();
|
|
575
|
+
if (trusted.bridges.some(item => item.bridgeId === own.bridgeId && item.authPublicKey === own.authPublicKey && item.endpoint.id === own.endpointId
|
|
576
|
+
&& item.endpoint.publicKey === own.endpointPublicKey))
|
|
577
|
+
return 'active';
|
|
578
|
+
return ledger !== null && ledgerRemovesBridge(ledger, own) ? 'revoked' : 'absent';
|
|
415
579
|
}
|
|
416
580
|
/** `trusted` is always the store's applyRevocations output, never its raw checkpoint. Own status acts before the policy write, so
|
|
417
581
|
* neither the revocation nor its emission waits on (or is lost to) a policy storage failure. */
|
|
418
582
|
async projectState(state) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
583
|
+
// The stored chain's record heads let an echo of it (or of a prefix) be answered without verification.
|
|
584
|
+
if (this.heads === null || this.heads.of !== state.checkpoint.head) {
|
|
585
|
+
try {
|
|
586
|
+
this.heads = { of: state.checkpoint.head, list: await ledgerHeads(state.ledger) };
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
this.heads = null;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
this.held = state;
|
|
593
|
+
return this.project(state.trusted, state.lastServerReadAt, state.divergences, state.ledger);
|
|
423
594
|
}
|
|
424
|
-
async project(trusted, lastServerReadAt) {
|
|
425
|
-
const own = this.ownOf(trusted);
|
|
595
|
+
async project(trusted, lastServerReadAt, divergences = [], ledger = null) {
|
|
596
|
+
const own = this.ownOf(trusted, ledger);
|
|
426
597
|
this.trustedView = trusted !== null && trusted.accountId === this.endpoint.ownerId ? trusted : null;
|
|
598
|
+
if (trusted === null) {
|
|
599
|
+
this.held = null;
|
|
600
|
+
this.heads = null;
|
|
601
|
+
}
|
|
427
602
|
const projection = this.policy.projectLedger({ trusted, own, lastServerReadAt });
|
|
428
603
|
const previous = this.status.own;
|
|
429
|
-
this.status
|
|
604
|
+
const previousHead = this.status.head;
|
|
605
|
+
// Server first: a server holding another history matters more than a relay publisher that does.
|
|
606
|
+
const shown = divergences.find(entry => entry.source === 'server') ?? divergences[0];
|
|
607
|
+
const divergence = shown === undefined || trusted === null ? null : {
|
|
608
|
+
source: shown.source, otherHead: shortHead(shown.otherHead), otherRevision: shown.otherRevision, ourRevision: trusted.revision, firstSeen: shown.firstSeen,
|
|
609
|
+
forkRevision: shown.forkRevision, removedOnOtherHistory: shown.removedOnOtherHistory,
|
|
610
|
+
};
|
|
611
|
+
this.status = {
|
|
612
|
+
accountId: trusted?.accountId ?? null, revision: trusted?.revision ?? null, head: trusted?.head ?? null, own, divergence, serverBehind: this.serverBehind,
|
|
613
|
+
removedOnOtherHistory: trusted !== null && divergences.some(entry => entry.removedOnOtherHistory),
|
|
614
|
+
};
|
|
430
615
|
if (own === 'revoked')
|
|
431
616
|
this.emitBridgeRevoked();
|
|
432
617
|
// Not listed is not a signed revocation: fail closed and say so, but never reset the identity on it.
|
|
433
618
|
else if (own === 'absent' && previous !== 'absent')
|
|
434
619
|
console.warn('[Security] This bridge is not in its account ledger; account devices are refused.');
|
|
620
|
+
if (own !== previous || this.status.head !== previousHead)
|
|
621
|
+
this.emitLedgerHead();
|
|
435
622
|
this.emitRevoked(await projection);
|
|
436
623
|
return own;
|
|
437
624
|
}
|
|
625
|
+
emitLedgerHead() {
|
|
626
|
+
for (const listener of Array.from(this.headListeners)) {
|
|
627
|
+
try {
|
|
628
|
+
listener();
|
|
629
|
+
}
|
|
630
|
+
catch (error) {
|
|
631
|
+
console.error('[Security] ledgerHead listener failed:', error);
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
}
|
|
438
635
|
emitRevoked(endpointIds) {
|
|
439
636
|
for (const id of endpointIds)
|
|
440
637
|
for (const listener of this.revoked)
|
|
@@ -525,6 +722,7 @@ export class BridgeSecurityService {
|
|
|
525
722
|
this.approvalListeners.clear();
|
|
526
723
|
this.approvalEmitted.clear();
|
|
527
724
|
this.replay.clear();
|
|
725
|
+
this.headListeners.clear();
|
|
528
726
|
await this.policy.close();
|
|
529
727
|
}
|
|
530
728
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/security/bridge/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/security/bridge/security.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type LedgerCheckpoint } from './protocol.js';
|
|
2
|
+
/**
|
|
3
|
+
* A member replica's signed statement "I hold head `head` at revision `revision`", published on the account's ledger channel
|
|
4
|
+
* (accountChannel('bridges:ledger', accountId)). `keyId` is the device's endpoint id or the bridge's bridgeId, the same ids auth proofs use.
|
|
5
|
+
* An announcement is never proof of a chain: it only tells a receiver whether to fetch one and run fork choice on it.
|
|
6
|
+
*/
|
|
7
|
+
export interface HeadAnnouncement {
|
|
8
|
+
type: 'ledger_head';
|
|
9
|
+
version: 1;
|
|
10
|
+
accountId: string;
|
|
11
|
+
kind: 'device' | 'bridge';
|
|
12
|
+
keyId: string;
|
|
13
|
+
head: string;
|
|
14
|
+
revision: number;
|
|
15
|
+
at: number;
|
|
16
|
+
/** Raw r||s, low S, canonical unpadded base64url (64 bytes). */
|
|
17
|
+
signature: string;
|
|
18
|
+
}
|
|
19
|
+
/** Signed bytes: UTF-8 of HEAD_ANNOUNCE_DOMAIN + JSON of { accountId, at, head, keyId, kind, revision } in that key order. */
|
|
20
|
+
export declare const HEAD_ANNOUNCE_DOMAIN = "ftown-head-announce-v1\n";
|
|
21
|
+
/** Receivers accept |now - at| <= this. */
|
|
22
|
+
export declare const HEAD_ANNOUNCE_MAX_AGE_MS = 120000;
|
|
23
|
+
/** Strict shape: exactly the nine keys, literal type/version, canonical base64url ids, safe integers. Anything else → null; never throws. */
|
|
24
|
+
export declare function parseHeadAnnouncement(value: unknown): HeadAnnouncement | null;
|
|
25
|
+
/** Signs with the member's ECDSA P-256 auth private key. Extra properties of `fields` are ignored; invalid fields throw invalid_head_announcement. */
|
|
26
|
+
export declare function signHeadAnnouncement(key: CryptoKey, fields: Omit<HeadAnnouncement, 'type' | 'version' | 'signature'>): Promise<HeadAnnouncement>;
|
|
27
|
+
/**
|
|
28
|
+
* True only when `announcement` is well formed, of `checkpoint`'s account, from a member of `checkpoint` (by kind + keyId) that is not
|
|
29
|
+
* revoked there, within HEAD_ANNOUNCE_MAX_AGE_MS of `now` either way, and signed by that member's authPublicKey. `checkpoint` must be the
|
|
30
|
+
* receiver's TRUSTED view of its own chain. Cheap checks run first: at most one signature verification per call. Never throws.
|
|
31
|
+
*/
|
|
32
|
+
export declare function verifyHeadAnnouncement(checkpoint: LedgerCheckpoint, announcement: HeadAnnouncement, now: number): Promise<boolean>;
|