@book.dev/sdk 1.76.2 → 2.1.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.
@@ -13,6 +13,13 @@ import { globalFetch } from '../client';
13
13
  import { buildAttachMessage, buildReattachMessage } from './challenge';
14
14
  import { signWithSiteKey } from './siteKey';
15
15
  import { TunnelClient } from './tunnelClient';
16
+ /** Every {@link SiteVisibility}, matching the account's `SITE_VISIBILITIES`. */
17
+ export const SITE_VISIBILITIES = [
18
+ 'public',
19
+ 'authenticated',
20
+ 'members',
21
+ 'restricted',
22
+ ];
16
23
  export class MemoryKeyStore {
17
24
  constructor() {
18
25
  this.identity = null;
@@ -53,11 +60,16 @@ export class ForwardingClient {
53
60
  get region() {
54
61
  return this.opts.region ?? 'sin1';
55
62
  }
56
- async api(path, body) {
63
+ /**
64
+ * One authorized account-API round-trip. Threads the device bearer token, folds
65
+ * the server's `{error}` JSON into a {@link ForwardingApiError} on non-OK, and is
66
+ * method-agnostic so the site-visibility GET/PATCH share the same error surface as
67
+ * the POST provisioning flow (the {@link api} shorthand keeps the POST callers terse).
68
+ */
69
+ async request(path, init) {
57
70
  const res = await this.fetchImpl(`${this.opts.accountUrl.replace(/\/$/, '')}${path}`, {
58
- method: 'POST',
59
- headers: { authorization: `Bearer ${this.opts.authToken}`, 'content-type': 'application/json' },
60
- body: JSON.stringify(body),
71
+ ...init,
72
+ headers: { authorization: `Bearer ${this.opts.authToken}`, ...init.headers },
61
73
  });
62
74
  if (!res.ok) {
63
75
  let detail;
@@ -73,6 +85,47 @@ export class ForwardingClient {
73
85
  }
74
86
  return (await res.json());
75
87
  }
88
+ api(path, body) {
89
+ return this.request(path, {
90
+ method: 'POST',
91
+ headers: { 'content-type': 'application/json' },
92
+ body: JSON.stringify(body),
93
+ });
94
+ }
95
+ /** Resolve the registered site id without provisioning: the in-memory identity if
96
+ * the tunnel is up, else the persisted key's — throwing if no site exists yet
97
+ * (visibility is only meaningful for a site that's been registered). */
98
+ async requireSiteId() {
99
+ const id = this.identity ?? (await this.opts.keyStore.load());
100
+ if (!id)
101
+ throw new Error('no site registered — enable publishing first');
102
+ return id.siteId;
103
+ }
104
+ /**
105
+ * Read the published site's current audience scope from the account
106
+ * (`GET /api/sites/:id`). The account is the source of truth — the desktop UI
107
+ * reflects THIS, never a locally-assumed default, so it can honestly tell the
108
+ * owner whether their address is Public or Private.
109
+ */
110
+ async getSiteVisibility() {
111
+ const siteId = await this.requireSiteId();
112
+ const data = await this.request(`/api/sites/${encodeURIComponent(siteId)}`, { method: 'GET' });
113
+ if (!data.site)
114
+ throw new ForwardingApiError(`/api/sites/${siteId}`, 404, 'site not found');
115
+ return data.site.visibility;
116
+ }
117
+ /**
118
+ * Set the published site's audience scope via the EXISTING free-tier route
119
+ * (`PATCH /api/sites/:id`, body `{visibility}`). The account whitelist-validates
120
+ * the value and enforces owner-only server-side (a non-owner 404s); this client
121
+ * only ever runs on the owner's device under their device bearer token. Returns
122
+ * the persisted scope so the caller reflects the server's truth, not the request.
123
+ */
124
+ async setSiteVisibility(visibility) {
125
+ const siteId = await this.requireSiteId();
126
+ const data = await this.request(`/api/sites/${encodeURIComponent(siteId)}`, { method: 'PATCH', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ visibility }) });
127
+ return data.site.visibility;
128
+ }
76
129
  /** Reattach to our existing site (if we hold its key), else provision a new one. */
77
130
  async ensureSite() {
78
131
  if (this.identity)
@@ -1 +1 @@
1
- {"version":3,"file":"forwardingClient.js","sourceRoot":"","sources":["../../src/forwarding/forwardingClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forwardingClient.js","sourceRoot":"","sources":["../../src/forwarding/forwardingClient.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- export { ForwardingApiError, ForwardingClient, MemoryKeyStore, type KeyStore, type SiteIdentity, type ForwardingClientOptions } from './forwardingClient';
1
+ export { ForwardingApiError, ForwardingClient, MemoryKeyStore, SITE_VISIBILITIES, type KeyStore, type SiteIdentity, type SiteVisibility, type ForwardingClientOptions, } from './forwardingClient';
2
2
  export { TunnelClient, type TunnelStatus, type TunnelClientOptions } from './tunnelClient';
3
3
  export { mintSiteKeypair, signWithSiteKey, verifyWithSiteKey, type SiteKeypair } from './siteKey';
4
- export { signRosterAssertion, verifyRosterAssertion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_SKEW_MS, type RosterAssertionPayload, type SignRosterAssertionInput, type VerifyRosterAssertionInput, } from './rosterAssertion';
4
+ export { signRosterAssertion, verifyRosterAssertion, isAcceptedRosterVersion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_V2, ACCEPTED_ROSTER_VERSIONS, ROSTER_ASSERTION_SKEW_MS, type RosterAssertionVersion, type RosterAssertionPayload, type RosterAssertionV1Payload, type RosterAssertionV2Payload, type SignRosterAssertionInput, type VerifyRosterAssertionInput, type VerifiedRosterAssertion, } from './rosterAssertion';
5
5
  export { buildAttachMessage, buildReattachMessage, buildRelayAttachMessage, newNonce, isFreshTimestamp, type AttachClaim, } from './challenge';
6
6
  export { encodeControl, decodeControl, encodeBody, decodeBody, FORWARDED_HEADER, type ControlFrame, } from './tunnelProtocol';
@@ -6,10 +6,10 @@
6
6
  // whole surface is runtime-agnostic (Web Crypto + global fetch/WebSocket), so it
7
7
  // runs in the Tauri webview; the desktop supplies a keychain-backed KeyStore and
8
8
  // the IPC fetch.
9
- export { ForwardingApiError, ForwardingClient, MemoryKeyStore } from './forwardingClient';
9
+ export { ForwardingApiError, ForwardingClient, MemoryKeyStore, SITE_VISIBILITIES, } from './forwardingClient';
10
10
  export { TunnelClient } from './tunnelClient';
11
11
  export { mintSiteKeypair, signWithSiteKey, verifyWithSiteKey } from './siteKey';
12
- export { signRosterAssertion, verifyRosterAssertion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_SKEW_MS, } from './rosterAssertion';
12
+ export { signRosterAssertion, verifyRosterAssertion, isAcceptedRosterVersion, ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_V2, ACCEPTED_ROSTER_VERSIONS, ROSTER_ASSERTION_SKEW_MS, } from './rosterAssertion';
13
13
  export { buildAttachMessage, buildReattachMessage, buildRelayAttachMessage, newNonce, isFreshTimestamp, } from './challenge';
14
14
  export { encodeControl, decodeControl, encodeBody, decodeBody, FORWARDED_HEADER, } from './tunnelProtocol';
15
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forwarding/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,iBAAiB;AAEjB,OAAO,EAAC,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAiE,MAAM,oBAAoB,CAAC;AACxJ,OAAO,EAAC,YAAY,EAA8C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,GAIzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,QAAQ,EACR,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forwarding/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,gFAAgF;AAChF,iFAAiF;AACjF,iFAAiF;AACjF,iBAAiB;AAEjB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAKlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,YAAY,EAA8C,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAC,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAChG,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,GAQzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,QAAQ,EACR,gBAAgB,GAEjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,aAAa,EACb,UAAU,EACV,UAAU,EACV,gBAAgB,GAEjB,MAAM,kBAAkB,CAAC"}
@@ -1,31 +1,59 @@
1
- /** The assertion payload version tag — also the signed-message prefix. */
1
+ /** The legacy assertion version tag (v1) — carries `workspaceId`. Still ACCEPTED. */
2
2
  export declare const ROSTER_ASSERTION_VERSION = "openbook.roster.v1";
3
+ /** The current assertion version tag (v2, LIB-5) — carries `libraryId`. What the signer emits. */
4
+ export declare const ROSTER_ASSERTION_V2 = "openbook.roster.v2";
5
+ /**
6
+ * Every version tag the verifier accepts (dual-accept v1 + v2). Pinned BEFORE any
7
+ * crypto runs — an unknown / absent `v` is rejected without a signature check, so
8
+ * there is no downgrade oracle. Retiring v1 is a later, reversible step (drop it
9
+ * from this set) — never do it while any un-updatable desktop build still signs v1.
10
+ */
11
+ export declare const ACCEPTED_ROSTER_VERSIONS: readonly ["openbook.roster.v1", "openbook.roster.v2"];
12
+ /** An accepted roster-assertion version tag. */
13
+ export type RosterAssertionVersion = (typeof ACCEPTED_ROSTER_VERSIONS)[number];
14
+ /** Narrow an arbitrary string to an accepted version tag (pinned before crypto). */
15
+ export declare function isAcceptedRosterVersion(v: unknown): v is RosterAssertionVersion;
3
16
  /** Default freshness window for a roster assertion (±5 min — the account's window). */
4
17
  export declare const ROSTER_ASSERTION_SKEW_MS: number;
5
- export interface RosterAssertionPayload {
18
+ /** The legacy (v1) assertion payload — carries `workspaceId`. Still verifiable. */
19
+ export interface RosterAssertionV1Payload {
6
20
  /** Fixed protocol tag, {@link ROSTER_ASSERTION_VERSION}. */
7
21
  v: typeof ROSTER_ASSERTION_VERSION;
8
22
  /** The site's registered public key (raw 32-byte Ed25519, base64url). */
9
23
  pub: string;
10
- /** The workspace the site is asserting it is bound to. */
24
+ /** The library the site is asserting it is bound to (legacy key name). */
11
25
  workspaceId: string;
12
26
  /** Epoch millis the site stamped when signing (freshness). */
13
27
  ts: number;
14
28
  }
29
+ /** The current (v2, LIB-5) assertion payload — carries `libraryId`. What the signer emits. */
30
+ export interface RosterAssertionV2Payload {
31
+ /** Fixed protocol tag, {@link ROSTER_ASSERTION_V2}. */
32
+ v: typeof ROSTER_ASSERTION_V2;
33
+ /** The site's registered public key (raw 32-byte Ed25519, base64url). */
34
+ pub: string;
35
+ /** The library the site is asserting it is bound to (renamed from `workspaceId`; SAME id value). */
36
+ libraryId: string;
37
+ /** Epoch millis the site stamped when signing (freshness). */
38
+ ts: number;
39
+ }
40
+ /** Any accepted roster-assertion payload (v1 or v2). */
41
+ export type RosterAssertionPayload = RosterAssertionV1Payload | RosterAssertionV2Payload;
15
42
  export interface SignRosterAssertionInput {
16
43
  /** base64url PKCS#8 site private key — from the OS keychain. NEVER the data-server. */
17
44
  privateKey: string;
18
45
  /** The site's registered public key (raw base64url) — the verifiable half. */
19
46
  publicKey: string;
20
- /** The bound workspace id. */
21
- workspaceId: string;
47
+ /** The bound library id (renamed from `workspaceId`; SAME id value). */
48
+ libraryId: string;
22
49
  /** Clock injection (tests). Defaults to {@link Date.now}. */
23
50
  now?: () => number;
24
51
  }
25
52
  /**
26
53
  * Mint a fresh signed roster assertion bearer for `Authorization: Bearer <…>`.
27
- * Returns `base64url(payloadJson) + '.' + base64url(ed25519Sig)`. Stamps `ts` at
28
- * call time, so mint one PER fetch (the account's freshness window is ±5 min).
54
+ * Emits `openbook.roster.v2` (`libraryId`). Returns
55
+ * `base64url(payloadJson) + '.' + base64url(ed25519Sig)`. Stamps `ts` at call time,
56
+ * so mint one PER fetch (the account's freshness window is ±5 min).
29
57
  */
30
58
  export declare function signRosterAssertion(input: SignRosterAssertionInput): Promise<string>;
31
59
  export interface VerifyRosterAssertionInput {
@@ -33,17 +61,38 @@ export interface VerifyRosterAssertionInput {
33
61
  assertion: string;
34
62
  /** The site's registered public key (raw base64url) to verify against. */
35
63
  publicKey: string;
36
- /** The workspace the assertion must claim. */
37
- workspaceId: string;
64
+ /** The library the assertion must claim (renamed from `workspaceId`; SAME id value). */
65
+ libraryId: string;
38
66
  /** Clock for the freshness check (ms). Defaults to {@link Date.now}. */
39
67
  now?: number;
40
68
  /** Freshness window (ms). Defaults to {@link ROSTER_ASSERTION_SKEW_MS}. */
41
69
  skewMs?: number;
42
70
  }
71
+ /**
72
+ * A verified roster assertion, version-normalized. `libraryId` is the audience read
73
+ * from whichever key the AUTHENTICATED version carries (v1 `workspaceId`, v2
74
+ * `libraryId`) — callers always read `libraryId` regardless of the on-wire version.
75
+ */
76
+ export interface VerifiedRosterAssertion {
77
+ /** The authenticated version tag that verified. */
78
+ v: RosterAssertionVersion;
79
+ /** The site's public key the signature verified against. */
80
+ pub: string;
81
+ /** The bound library id (normalized name, whatever the on-wire key). */
82
+ libraryId: string;
83
+ /** The signer's stamped epoch-millis timestamp. */
84
+ ts: number;
85
+ }
43
86
  /**
44
87
  * Verify a roster assertion (the account side, mirrored here for one canonical
45
- * impl + end-to-end tests). Returns the parsed payload on success, or `null` on
46
- * ANY failure — bad framing, wrong version/workspace/pub, a stale `ts`, or a bad
88
+ * impl + end-to-end tests). DUAL-ACCEPTS v1 + v2. Returns the version-normalized
89
+ * result on success, or `null` on ANY failure — bad framing, unknown/absent
90
+ * version, missing/mistyped field, wrong library/pub, a stale/future `ts`, or a bad
47
91
  * signature. Never throws (so it can sit directly in an auth gate).
92
+ *
93
+ * Fail-closed order (all BEFORE trusting anything): frame → decode → pin the
94
+ * version from the authenticated body → select the audience field by the
95
+ * per-version map → require a non-empty audience that matches → freshness →
96
+ * Ed25519 verify over the prefix reconstructed from the authenticated version.
48
97
  */
49
- export declare function verifyRosterAssertion(input: VerifyRosterAssertionInput): Promise<RosterAssertionPayload | null>;
98
+ export declare function verifyRosterAssertion(input: VerifyRosterAssertionInput): Promise<VerifiedRosterAssertion | null>;
@@ -1,11 +1,11 @@
1
- // Per-instance roster assertion (OB-199 — "bind instance ↔ workspace").
1
+ // Per-instance roster assertion (OB-199 — "bind instance ↔ library").
2
2
  //
3
- // When a managed instance pulls its bound workspace's roster from the account
4
- // (`GET /api/workspaces/:id/roster`), it must prove it is the SITE that owns the
3
+ // When a managed instance pulls its bound library's roster from the account
4
+ // (`GET /api/libraries/:id/roster`), it must prove it is the SITE that owns the
5
5
  // binding — not an end user. It does so by signing a short-lived assertion with
6
6
  // the site's device private key (the same key that double-gates the forwarding
7
7
  // tunnel attach). The account verifies the signature against the Site row's
8
- // registered public key and that the site is bound to the workspace.
8
+ // registered public key and that the site is bound to the library.
9
9
  //
10
10
  // The signing half runs ONLY where the private key lives — the desktop's OS
11
11
  // keychain — so the raw key never enters the (separate) data-server process. The
@@ -13,44 +13,85 @@
13
13
  // account can adopt one canonical implementation and so the contract is testable
14
14
  // end-to-end (sign → verify) without the account repo.
15
15
  //
16
+ // LIB-5 — the wire field renamed from `workspaceId` → `libraryId`. Because the
17
+ // field name lives INSIDE the signed bytes, the rename is versioned: the signer
18
+ // emits `openbook.roster.v2` (carrying `libraryId`) while the verifier
19
+ // DUAL-ACCEPTS v1 (`workspaceId`) + v2 (`libraryId`), fail-closed. The version is
20
+ // authenticated (it is part of the signed payload AND the signed-message prefix),
21
+ // so an attacker can never flip v1↔v2 without breaking the signature, and the
22
+ // verifier never trusts an out-of-band version. See the LIB-5 design + runbook.
23
+ //
16
24
  // Runtime-agnostic (Web Crypto via {@link signWithSiteKey}/{@link verifyWithSiteKey}).
17
25
  import { b64uDecodeString, b64uEncodeString } from './encoding';
18
26
  import { signWithSiteKey, verifyWithSiteKey } from './siteKey';
19
- /** The assertion payload version tag — also the signed-message prefix. */
27
+ /** The legacy assertion version tag (v1) — carries `workspaceId`. Still ACCEPTED. */
20
28
  export const ROSTER_ASSERTION_VERSION = 'openbook.roster.v1';
29
+ /** The current assertion version tag (v2, LIB-5) — carries `libraryId`. What the signer emits. */
30
+ export const ROSTER_ASSERTION_V2 = 'openbook.roster.v2';
31
+ /**
32
+ * Every version tag the verifier accepts (dual-accept v1 + v2). Pinned BEFORE any
33
+ * crypto runs — an unknown / absent `v` is rejected without a signature check, so
34
+ * there is no downgrade oracle. Retiring v1 is a later, reversible step (drop it
35
+ * from this set) — never do it while any un-updatable desktop build still signs v1.
36
+ */
37
+ export const ACCEPTED_ROSTER_VERSIONS = [ROSTER_ASSERTION_VERSION, ROSTER_ASSERTION_V2];
38
+ /**
39
+ * Which JSON key carries the audience (the bound library id) PER version. v1 signed
40
+ * `workspaceId`; v2 renames the KEY to `libraryId` (the id VALUE — a cuid — is
41
+ * UNCHANGED). The verifier selects this field strictly from the AUTHENTICATED `v`
42
+ * via THIS explicit map — never a binary ternary that defaults to v1 — so a v1 body
43
+ * can't be re-read as v2 (or vice-versa): each version reads only its own key, and
44
+ * a body carrying the wrong key resolves to `undefined` → reject.
45
+ */
46
+ const AUDIENCE_KEY_BY_VERSION = {
47
+ [ROSTER_ASSERTION_VERSION]: 'workspaceId',
48
+ [ROSTER_ASSERTION_V2]: 'libraryId',
49
+ };
50
+ /** Narrow an arbitrary string to an accepted version tag (pinned before crypto). */
51
+ export function isAcceptedRosterVersion(v) {
52
+ return v === ROSTER_ASSERTION_VERSION || v === ROSTER_ASSERTION_V2;
53
+ }
21
54
  /** Default freshness window for a roster assertion (±5 min — the account's window). */
22
55
  export const ROSTER_ASSERTION_SKEW_MS = 5 * 60 * 1000;
23
56
  /**
24
- * The exact bytes signed/verified: `openbook.roster.v1.<base64url(payloadJson)>`.
25
- * Order and separators are fixed so the site and the account never disagree. The
26
- * base64url payload carries no `.`, so it never collides with the version prefix's
27
- * dots when the account reconstructs the message from the assertion's first half.
57
+ * The exact bytes signed/verified: `<version>.<base64url(payloadJson)>`. The version
58
+ * prefix is derived from the payload's OWN `v` tag (never hardcoded), so the signed
59
+ * message and the authenticated version can never disagree. The base64url payload
60
+ * carries no `.`, so it never collides with the version prefix's dots when the
61
+ * account reconstructs the message from the assertion's first half.
28
62
  */
29
- function rosterAssertionMessage(payloadB64) {
30
- return `${ROSTER_ASSERTION_VERSION}.${payloadB64}`;
63
+ function rosterAssertionMessage(version, payloadB64) {
64
+ return `${version}.${payloadB64}`;
31
65
  }
32
66
  /**
33
67
  * Mint a fresh signed roster assertion bearer for `Authorization: Bearer <…>`.
34
- * Returns `base64url(payloadJson) + '.' + base64url(ed25519Sig)`. Stamps `ts` at
35
- * call time, so mint one PER fetch (the account's freshness window is ±5 min).
68
+ * Emits `openbook.roster.v2` (`libraryId`). Returns
69
+ * `base64url(payloadJson) + '.' + base64url(ed25519Sig)`. Stamps `ts` at call time,
70
+ * so mint one PER fetch (the account's freshness window is ±5 min).
36
71
  */
37
72
  export async function signRosterAssertion(input) {
38
73
  const ts = input.now ? input.now() : Date.now();
39
74
  const payload = {
40
- v: ROSTER_ASSERTION_VERSION,
75
+ v: ROSTER_ASSERTION_V2,
41
76
  pub: input.publicKey,
42
- workspaceId: input.workspaceId,
77
+ libraryId: input.libraryId,
43
78
  ts,
44
79
  };
45
80
  const payloadB64 = b64uEncodeString(JSON.stringify(payload));
46
- const signature = await signWithSiteKey(input.privateKey, rosterAssertionMessage(payloadB64));
81
+ const signature = await signWithSiteKey(input.privateKey, rosterAssertionMessage(ROSTER_ASSERTION_V2, payloadB64));
47
82
  return `${payloadB64}.${signature}`;
48
83
  }
49
84
  /**
50
85
  * Verify a roster assertion (the account side, mirrored here for one canonical
51
- * impl + end-to-end tests). Returns the parsed payload on success, or `null` on
52
- * ANY failure — bad framing, wrong version/workspace/pub, a stale `ts`, or a bad
86
+ * impl + end-to-end tests). DUAL-ACCEPTS v1 + v2. Returns the version-normalized
87
+ * result on success, or `null` on ANY failure — bad framing, unknown/absent
88
+ * version, missing/mistyped field, wrong library/pub, a stale/future `ts`, or a bad
53
89
  * signature. Never throws (so it can sit directly in an auth gate).
90
+ *
91
+ * Fail-closed order (all BEFORE trusting anything): frame → decode → pin the
92
+ * version from the authenticated body → select the audience field by the
93
+ * per-version map → require a non-empty audience that matches → freshness →
94
+ * Ed25519 verify over the prefix reconstructed from the authenticated version.
54
95
  */
55
96
  export async function verifyRosterAssertion(input) {
56
97
  try {
@@ -59,28 +100,38 @@ export async function verifyRosterAssertion(input) {
59
100
  return null;
60
101
  const payloadB64 = input.assertion.slice(0, dot);
61
102
  const signature = input.assertion.slice(dot + 1);
62
- if (signature.includes('.'))
63
- return null; // exactly two base64url parts
103
+ if (!signature || signature.includes('.'))
104
+ return null; // exactly two non-empty base64url parts
64
105
  const parsed = JSON.parse(b64uDecodeString(payloadB64));
65
106
  if (typeof parsed !== 'object' || parsed === null)
66
107
  return null;
67
108
  const payload = parsed;
68
- if (payload.v !== ROSTER_ASSERTION_VERSION)
109
+ // (1) Pin the version from the AUTHENTICATED, decoded body BEFORE any crypto.
110
+ // Unknown / absent → reject with no signature check (no downgrade oracle).
111
+ const version = payload.v;
112
+ if (!isAcceptedRosterVersion(version))
69
113
  return null;
114
+ // (2/3) Select the audience field by an EXPLICIT per-version map — never a
115
+ // binary ternary defaulting to v1. A v1 body carrying `libraryId` reads its
116
+ // (absent) `workspaceId` key → undefined → reject; a v2 body reads `libraryId`.
117
+ const aud = payload[AUDIENCE_KEY_BY_VERSION[version]];
70
118
  if (typeof payload.pub !== 'string' || payload.pub !== input.publicKey)
71
119
  return null;
72
- if (typeof payload.workspaceId !== 'string' || payload.workspaceId !== input.workspaceId)
73
- return null;
120
+ if (typeof aud !== 'string' || !aud)
121
+ return null; // (4) non-empty audience required
122
+ if (aud !== input.libraryId)
123
+ return null; // audience bind — id VALUE unchanged
74
124
  if (typeof payload.ts !== 'number' || !Number.isFinite(payload.ts))
75
125
  return null;
76
126
  const now = input.now ?? Date.now();
77
127
  const skewMs = input.skewMs ?? ROSTER_ASSERTION_SKEW_MS;
78
128
  if (Math.abs(now - payload.ts) > skewMs)
79
- return null;
80
- const ok = await verifyWithSiteKey(input.publicKey, rosterAssertionMessage(payloadB64), signature);
129
+ return null; // symmetric — rejects stale AND future
130
+ // Reconstruct the signed prefix from the AUTHENTICATED version, never a constant.
131
+ const ok = await verifyWithSiteKey(input.publicKey, rosterAssertionMessage(version, payloadB64), signature);
81
132
  if (!ok)
82
133
  return null;
83
- return { v: ROSTER_ASSERTION_VERSION, pub: payload.pub, workspaceId: payload.workspaceId, ts: payload.ts };
134
+ return { v: version, pub: payload.pub, libraryId: aud, ts: payload.ts };
84
135
  }
85
136
  catch {
86
137
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"rosterAssertion.js","sourceRoot":"","sources":["../../src/forwarding/rosterAssertion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rosterAssertion.js","sourceRoot":"","sources":["../../src/forwarding/rosterAssertion.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,51 @@ export type VerifiedVia =
27
27
  | 'synced'
28
28
  /** In-process caller (the embedded `LocalDataClient`) — implicitly the local
29
29
  * owner; there is no request to carry a credential. */
30
- | 'local';
30
+ | 'local'
31
+ /**
32
+ * An **agent Personal-Access-Token** (AGENT-6): a `Bearer obat_…` credential an
33
+ * instance admin minted, bound at mint time to the MINTER's own verified subject
34
+ * (never client-chosen). It rides the SUBJECT-keyed authorize rungs its bound user
35
+ * would — owner-content, subject-ACL, authenticated-read — but is deliberately
36
+ * NOT a roster member (no `admin`/`viewer` rung, see `resolveMemberRole`), carries
37
+ * no persona email (never matches an email-ACL), and can never mint verified block
38
+ * authorship (`verifiedSubject` stays jws-only). Its HTTP surface is further
39
+ * confined by a default-deny scope-gate. */
40
+ | 'pat';
31
41
  export type PrincipalKind = 'user' | 'guest';
42
+ /** What a minted agent token may do over the API (AGENT-6). `read` is confined to
43
+ * the read scope-gate allowlist; `write` additionally admits the unsafe methods on
44
+ * content routes. Never grants any privileged/admin route (default-deny). */
45
+ export type AgentTokenScope = 'read' | 'write';
46
+ /**
47
+ * The **redacted** view of a minted agent token (AGENT-6), safe to return from the
48
+ * management API and render in settings. NEVER carries the secret itself — only an
49
+ * `obat_…` preview prefix; the plaintext is shown exactly once, in the create
50
+ * response, and only its SHA-256 hash is stored at rest.
51
+ */
52
+ export interface AgentTokenMeta {
53
+ id: string;
54
+ /** Human label the minter gave the token. */
55
+ name: string;
56
+ scope: AgentTokenScope;
57
+ /** The verified subject the token is bound to (the minter's own subject, or
58
+ * `local:owner` for a hatch/local-owner minter). */
59
+ subject: string;
60
+ /** The issuer that vouched for {@link subject} (empty / `local` for the hatch). */
61
+ issuer: string;
62
+ /** Who minted it (a display label). */
63
+ createdBy: string;
64
+ /** ISO timestamps. */
65
+ createdAt: string;
66
+ /** ISO expiry, or `null` for a no-expiry token. */
67
+ expiresAt: string | null;
68
+ /** ISO last-used, or `null` if never presented. */
69
+ lastUsedAt: string | null;
70
+ /** A short, non-secret prefix of the token (`obat_xxxx…`) for recognition. */
71
+ preview: string;
72
+ /** True once revoked (kept listed briefly for provenance; never resolves). */
73
+ revoked: boolean;
74
+ }
32
75
  /** The actor behind a request, resolved by the server and stamped onto changes. */
33
76
  export interface Principal {
34
77
  kind: PrincipalKind;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
package/dist/import.d.ts CHANGED
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * - **Strategy B — {@link writeViaBundle}** maps the whole IR into a backup
16
16
  * bundle (`{pages, databases}` native records) and hands it to
17
- * `importSpace(…, mode:'copy')`. That inherits — for free — the server's
17
+ * `importLibrary(…, mode:'copy')`. That inherits — for free — the server's
18
18
  * id-remap, `@`-mention link-rewrite, name de-dup, and idempotent-replay
19
19
  * machinery (`remapBundle` / `importBundle`), plus the Restore dialog on the
20
20
  * UI side. Best for a multi-page / database tree.
@@ -200,7 +200,7 @@ export type ImportStrategy = 'create' | 'bundle';
200
200
  */
201
201
  export declare function chooseStrategy(doc: ImportedDoc): ImportStrategy;
202
202
  /** The slice of {@link DataClient} the import writers use (a real client satisfies it). */
203
- export type ImportWriteClient = Pick<DataClient, 'savePage' | 'setPageProperties' | 'createDatabase' | 'createRow' | 'importSpace'>;
203
+ export type ImportWriteClient = Pick<DataClient, 'savePage' | 'setPageProperties' | 'createDatabase' | 'createRow' | 'importLibrary'>;
204
204
  /** Options shared by both writers. */
205
205
  export interface ImportOptions {
206
206
  /**
@@ -271,7 +271,7 @@ export declare function buildImportBundle(doc: ImportedDoc, opts?: BundleOptions
271
271
  };
272
272
  /**
273
273
  * **Strategy B.** Build the copy-mode bundle ({@link buildImportBundle}) and
274
- * hand it to `importSpace`, inheriting the server's id-remap, link-rewrite,
274
+ * hand it to `importLibrary`, inheriting the server's id-remap, link-rewrite,
275
275
  * name-dedup, and idempotent-replay handling. Surfaces the server's
276
276
  * {@link ImportResult} (and its `idMap` as the new page ids).
277
277
  */
package/dist/import.js CHANGED
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * - **Strategy B — {@link writeViaBundle}** maps the whole IR into a backup
16
16
  * bundle (`{pages, databases}` native records) and hands it to
17
- * `importSpace(…, mode:'copy')`. That inherits — for free — the server's
17
+ * `importLibrary(…, mode:'copy')`. That inherits — for free — the server's
18
18
  * id-remap, `@`-mention link-rewrite, name de-dup, and idempotent-replay
19
19
  * machinery (`remapBundle` / `importBundle`), plus the Restore dialog on the
20
20
  * UI side. Best for a multi-page / database tree.
@@ -300,14 +300,14 @@ export function buildImportBundle(doc, opts = {}) {
300
300
  }
301
301
  /**
302
302
  * **Strategy B.** Build the copy-mode bundle ({@link buildImportBundle}) and
303
- * hand it to `importSpace`, inheriting the server's id-remap, link-rewrite,
303
+ * hand it to `importLibrary`, inheriting the server's id-remap, link-rewrite,
304
304
  * name-dedup, and idempotent-replay handling. Surfaces the server's
305
305
  * {@link ImportResult} (and its `idMap` as the new page ids).
306
306
  */
307
307
  export async function writeViaBundle(client, doc, opts = {}) {
308
308
  const { pages, databases } = buildImportBundle(doc, opts);
309
309
  const req = { pages, databases, mode: 'copy' };
310
- const importResult = await client.importSpace(req);
310
+ const importResult = await client.importLibrary(req);
311
311
  // Map the bundle pages that carry an image placeholder to their server-assigned
312
312
  // ids (via the id-map) so the post-import rehydration pass revisits only those.
313
313
  const placeholderPageIds = [];