@anodb/core 0.8.0 → 0.10.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.
Files changed (49) hide show
  1. package/PROTOCOL.md +30 -7
  2. package/README.md +57 -42
  3. package/dist/anodb.d.ts +1 -27
  4. package/dist/anodb.js +2 -151
  5. package/dist/anodb.js.map +1 -1
  6. package/dist/cli/init.js +5 -3
  7. package/dist/cli/init.js.map +1 -1
  8. package/dist/cli/main.js +0 -0
  9. package/dist/crypto.d.ts +2 -2
  10. package/dist/crypto.js +2 -2
  11. package/dist/crypto.js.map +1 -1
  12. package/dist/db.d.ts +9 -10
  13. package/dist/db.js +22 -31
  14. package/dist/db.js.map +1 -1
  15. package/dist/defaults.d.ts +3 -2
  16. package/dist/defaults.js +7 -5
  17. package/dist/defaults.js.map +1 -1
  18. package/dist/drivers/browser.d.ts +2 -1
  19. package/dist/drivers/browser.js +4 -1
  20. package/dist/drivers/browser.js.map +1 -1
  21. package/dist/index.d.ts +4 -7
  22. package/dist/index.js +2 -3
  23. package/dist/index.js.map +1 -1
  24. package/dist/kysely.d.ts +4 -0
  25. package/dist/kysely.js.map +1 -1
  26. package/dist/links.d.ts +8 -0
  27. package/dist/links.js +16 -0
  28. package/dist/links.js.map +1 -0
  29. package/dist/policy.d.ts +16 -0
  30. package/dist/policy.js +29 -0
  31. package/dist/policy.js.map +1 -0
  32. package/dist/react.d.ts +2 -2
  33. package/dist/react.js +1 -1
  34. package/dist/react.js.map +1 -1
  35. package/dist/schema.d.ts +12 -1
  36. package/dist/schema.js +28 -5
  37. package/dist/schema.js.map +1 -1
  38. package/dist/sharing.d.ts +18 -23
  39. package/dist/sharing.js +56 -99
  40. package/dist/sharing.js.map +1 -1
  41. package/dist/store.d.ts +8 -30
  42. package/dist/store.js +35 -86
  43. package/dist/store.js.map +1 -1
  44. package/dist/ui.d.ts +14 -44
  45. package/dist/ui.js +45 -86
  46. package/dist/ui.js.map +1 -1
  47. package/docs/DECISIONS.md +4 -0
  48. package/docs/DESIGN.md +4 -18
  49. package/package.json +1 -1
package/dist/store.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { decodeHlc } from './hlc.js';
2
- import { PUBLIC_SPACE, presetOf } from './public-tables.js';
3
- import { SYS_CREATED, SYS_DELETED, createTableSql, quoteIdent, tableFingerprint, toSql } from './schema.js';
2
+ import { SYS_CREATED, SYS_DELETED, createTableSql, ownerOfRow, quoteIdent, tableFingerprint, toSql } from './schema.js';
4
3
  const INTERNAL_SCHEMA = `
5
4
  CREATE TABLE IF NOT EXISTS anodb_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);
6
5
  CREATE TABLE IF NOT EXISTS anodb_spaces (
@@ -21,11 +20,9 @@ CREATE TABLE IF NOT EXISTS anodb_prune (event_id TEXT PRIMARY KEY, salt TEXT NOT
21
20
  CREATE TABLE IF NOT EXISTS anodb_devices (
22
21
  device TEXT PRIMARY KEY, identity TEXT NOT NULL, delegation TEXT NOT NULL, name TEXT NOT NULL, revoked INTEGER NOT NULL DEFAULT 0
23
22
  );
24
- CREATE TABLE IF NOT EXISTS anodb_invites_out (secret TEXT PRIMARY KEY, space TEXT NOT NULL, role TEXT NOT NULL, expires INTEGER NOT NULL, used INTEGER NOT NULL DEFAULT 0);
23
+ DROP TABLE IF EXISTS anodb_invites_out;
25
24
  CREATE TABLE IF NOT EXISTS anodb_invites_in (space TEXT PRIMARY KEY, sender TEXT NOT NULL, role TEXT NOT NULL, name TEXT NOT NULL, payload TEXT NOT NULL, status TEXT NOT NULL, received_at INTEGER NOT NULL);
26
- CREATE TABLE IF NOT EXISTS anodb_join_requests (
27
- id TEXT PRIMARY KEY, secret TEXT NOT NULL, identity TEXT NOT NULL, payload TEXT NOT NULL, status TEXT NOT NULL, received_at INTEGER NOT NULL
28
- );
25
+ DROP TABLE IF EXISTS anodb_join_requests;
29
26
  CREATE TABLE IF NOT EXISTS anodb_cells (
30
27
  space TEXT NOT NULL, tbl TEXT NOT NULL, row_id TEXT NOT NULL, col TEXT NOT NULL, value TEXT NOT NULL, hlc TEXT NOT NULL,
31
28
  PRIMARY KEY (space, tbl, row_id, col)
@@ -38,10 +35,7 @@ CREATE TABLE IF NOT EXISTS anodb_acks (
38
35
  PRIMARY KEY (event_id, relay)
39
36
  ) WITHOUT ROWID;
40
37
  CREATE TABLE IF NOT EXISTS anodb_cursors (relay TEXT NOT NULL, tag TEXT NOT NULL, since INTEGER NOT NULL, PRIMARY KEY (relay, tag)) WITHOUT ROWID;
41
- CREATE TABLE IF NOT EXISTS anodb_public (
42
- pubkey TEXT NOT NULL, kind INTEGER NOT NULL, event TEXT NOT NULL, created_at INTEGER NOT NULL, fetched_at INTEGER NOT NULL,
43
- PRIMARY KEY (pubkey, kind)
44
- ) WITHOUT ROWID;
38
+ DROP TABLE IF EXISTS anodb_public;
45
39
  `;
46
40
  /**
47
41
  * Local persistence. `anodb_cells` holds one LWW register per (space, table, row, column);
@@ -77,6 +71,8 @@ export class Store {
77
71
  this.#ensureColumn('anodb_raw', 'relay', 'INTEGER NOT NULL DEFAULT 1');
78
72
  this.#ensureColumn('anodb_outbox', 'hold_until', 'INTEGER NOT NULL DEFAULT 0');
79
73
  this.#ensureColumn('anodb_messages', 'inner', "TEXT NOT NULL DEFAULT ''");
74
+ // identity whose signed change set the cell (null for cells from older versions)
75
+ this.#ensureColumn('anodb_cells', 'by', 'TEXT');
80
76
  }
81
77
  /** Add a column created by a newer version (CREATE TABLE IF NOT EXISTS does not alter tables). */
82
78
  #ensureColumn(table, column, ddl) {
@@ -128,18 +124,16 @@ export class Store {
128
124
  return n;
129
125
  }
130
126
  // ---- schema / projections ------------------------------------------------
131
- applySchema(schema, defaultSpace) {
127
+ applySchema(schema, defaultSpace, owner) {
132
128
  this.#schema = schema;
133
129
  this.transaction(() => {
134
130
  for (const [table, def] of Object.entries(schema)) {
135
- const preset = presetOf(def);
136
- const space = preset ? PUBLIC_SPACE : defaultSpace;
137
- const fp = `${tableFingerprint(def)}|${space}|${preset ? preset.kind : ''}`;
131
+ const fp = `${tableFingerprint(def)}|${defaultSpace}|${owner ?? ''}`;
138
132
  const key = `schema:${table}`;
139
133
  if (this.getMeta(key) === fp)
140
134
  continue;
141
135
  this.#db.exec(`DROP TABLE IF EXISTS ${quoteIdent(table)}`);
142
- this.#db.exec(createTableSql(table, def, space));
136
+ this.#db.exec(createTableSql(table, def, defaultSpace, owner));
143
137
  const rows = this.#db.all('SELECT DISTINCT space, row_id FROM anodb_cells WHERE tbl = ?', [table]);
144
138
  for (const r of rows)
145
139
  this.#project(r.space, table, r.row_id);
@@ -147,15 +141,21 @@ export class Store {
147
141
  }
148
142
  });
149
143
  }
150
- /** LWW merge. Returns tables whose visible state may have changed. Run inside `transaction`. */
151
- applyChanges(space, changes) {
144
+ /**
145
+ * LWW merge. `by` is the identity that signed the changes (a snapshot cell may carry its own as a
146
+ * 6th element). Returns tables whose visible state may have changed. Run inside `transaction`.
147
+ */
148
+ applyChanges(space, changes, by) {
152
149
  const dirty = new Map();
153
- for (const [table, rowId, column, value, hlc] of changes) {
150
+ for (const c of changes) {
151
+ const [table, rowId, column, value, hlc] = c;
152
+ const cellBy = c[5];
153
+ const writer = typeof cellBy === 'string' && /^[0-9a-f]{64}$/.test(cellBy) ? cellBy : (by ?? null);
154
154
  const current = this.#db.all('SELECT hlc FROM anodb_cells WHERE space = ? AND tbl = ? AND row_id = ? AND col = ?', [space, table, rowId, column])[0];
155
155
  if (current && current.hlc >= hlc)
156
156
  continue;
157
- this.#db.run(`INSERT INTO anodb_cells (space, tbl, row_id, col, value, hlc) VALUES (?, ?, ?, ?, ?, ?)
158
- ON CONFLICT(space, tbl, row_id, col) DO UPDATE SET value = excluded.value, hlc = excluded.hlc`, [space, table, rowId, column, JSON.stringify(value ?? null), hlc]);
157
+ this.#db.run(`INSERT INTO anodb_cells (space, tbl, row_id, col, value, hlc, by) VALUES (?, ?, ?, ?, ?, ?, ?)
158
+ ON CONFLICT(space, tbl, row_id, col) DO UPDATE SET value = excluded.value, hlc = excluded.hlc, by = excluded.by`, [space, table, rowId, column, JSON.stringify(value ?? null), hlc, writer]);
159
159
  let rows = dirty.get(table);
160
160
  if (!rows)
161
161
  dirty.set(table, (rows = new Set()));
@@ -167,11 +167,11 @@ export class Store {
167
167
  }
168
168
  return new Set(dirty.keys());
169
169
  }
170
- /** All current cells of a space (for snapshots). */
170
+ /** All current cells of a space (for snapshots), with the signing identity as a 6th element when known. */
171
171
  cells(space) {
172
172
  return this.#db
173
- .all('SELECT tbl, row_id, col, value, hlc FROM anodb_cells WHERE space = ? ORDER BY tbl, row_id, col', [space])
174
- .map((c) => [c.tbl, c.row_id, c.col, JSON.parse(c.value), c.hlc]);
173
+ .all('SELECT tbl, row_id, col, value, hlc, by FROM anodb_cells WHERE space = ? ORDER BY tbl, row_id, col', [space])
174
+ .map((c) => (c.by ? [c.tbl, c.row_id, c.col, JSON.parse(c.value), c.hlc, c.by] : [c.tbl, c.row_id, c.col, JSON.parse(c.value), c.hlc]));
175
175
  }
176
176
  /** Drop all cells of a space and its projected rows. Run inside `transaction`. */
177
177
  clearSpace(space) {
@@ -186,15 +186,21 @@ export class Store {
186
186
  const def = this.#schema[table];
187
187
  if (!def)
188
188
  return; // kept in cells; projected once the schema knows the table
189
- const cells = this.#db.all('SELECT col, value, hlc FROM anodb_cells WHERE space = ? AND tbl = ? AND row_id = ?', [space, table, rowId]);
189
+ const cells = this.#db.all('SELECT col, value, hlc, by FROM anodb_cells WHERE space = ? AND tbl = ? AND row_id = ?', [space, table, rowId]);
190
190
  const values = new Map();
191
191
  let maxHlc = '';
192
+ let updatedBy = null;
192
193
  for (const c of cells) {
193
194
  values.set(c.col, JSON.parse(c.value));
194
- if (c.hlc > maxHlc)
195
+ if (c.hlc > maxHlc) {
195
196
  maxHlc = c.hlc;
197
+ updatedBy = c.by;
198
+ }
196
199
  }
197
- if (values.get(SYS_DELETED) === true || cells.length === 0) {
200
+ // A row whose id names its creator exists only once that creator created it (others may not
201
+ // write its $createdAt), so edits to a plain table cannot conjure a row in someone else's name.
202
+ const unborn = ownerOfRow(rowId) !== null && !values.has(SYS_CREATED);
203
+ if (values.get(SYS_DELETED) === true || cells.length === 0 || unborn) {
198
204
  this.#db.run(`DELETE FROM ${quoteIdent(table)} WHERE space = ? AND id = ?`, [space, rowId]);
199
205
  return;
200
206
  }
@@ -206,8 +212,10 @@ export class Store {
206
212
  ...cols.map((c) => toSql(def[c], values.get(c))),
207
213
  typeof created === 'number' ? created : null,
208
214
  decodeHlc(maxHlc).millis,
215
+ ownerOfRow(rowId),
216
+ updatedBy,
209
217
  ];
210
- const names = ['space', 'id', ...cols, 'createdAt', 'updatedAt'].map(quoteIdent).join(', ');
218
+ const names = ['space', 'id', ...cols, 'createdAt', 'updatedAt', 'createdBy', 'updatedBy'].map(quoteIdent).join(', ');
211
219
  this.#db.run(`INSERT OR REPLACE INTO ${quoteIdent(table)} (${names}) VALUES (${params.map(() => '?').join(', ')})`, params);
212
220
  }
213
221
  // ---- spaces & keys -----------------------------------------------------------
@@ -281,17 +289,6 @@ export class Store {
281
289
  forgetPrunable(eventId) {
282
290
  this.#db.run('DELETE FROM anodb_prune WHERE event_id = ?', [eventId]);
283
291
  }
284
- // ---- public table rows ---------------------------------------------------------
285
- publicRows(table, where, params) {
286
- return this.#db.all(`SELECT * FROM ${quoteIdent(table)} WHERE space = '${PUBLIC_SPACE}' AND ${where}`, params);
287
- }
288
- putPublicRow(table, row) {
289
- const cols = Object.keys(row);
290
- this.#db.run(`INSERT OR REPLACE INTO ${quoteIdent(table)} (space, ${cols.map(quoteIdent).join(', ')}) VALUES ('${PUBLIC_SPACE}', ${cols.map(() => '?').join(', ')})`, cols.map((c) => row[c] ?? null));
291
- }
292
- deletePublicRows(table, where, params) {
293
- this.#db.run(`DELETE FROM ${quoteIdent(table)} WHERE space = '${PUBLIC_SPACE}' AND ${where}`, params);
294
- }
295
292
  // ---- devices -------------------------------------------------------------------
296
293
  putDevice(device, identity, delegation, name) {
297
294
  this.#db.run('INSERT OR IGNORE INTO anodb_devices (device, identity, delegation, name) VALUES (?, ?, ?, ?)', [device, identity, delegation, name]);
@@ -305,17 +302,6 @@ export class Store {
305
302
  .map((r) => ({ ...r, revoked: r.revoked === 1 }));
306
303
  }
307
304
  // ---- invitations ---------------------------------------------------------------
308
- putInviteOut(secret, space, role, expires) {
309
- this.#db.run('INSERT INTO anodb_invites_out (secret, space, role, expires) VALUES (?, ?, ?, ?)', [secret, space, role, expires]);
310
- }
311
- invitesOut() {
312
- return this.#db
313
- .all('SELECT secret, space, role, expires, used FROM anodb_invites_out')
314
- .map((r) => ({ ...r, used: r.used === 1 }));
315
- }
316
- markInviteUsed(secret) {
317
- this.#db.run('UPDATE anodb_invites_out SET used = 1 WHERE secret = ?', [secret]);
318
- }
319
305
  putInviteIn(space, sender, role, name, payload) {
320
306
  this.#db.run(`INSERT INTO anodb_invites_in (space, sender, role, name, payload, status, received_at) VALUES (?, ?, ?, ?, ?, 'pending', ?)
321
307
  ON CONFLICT(space) DO UPDATE SET sender = excluded.sender, role = excluded.role, name = excluded.name, payload = excluded.payload,
@@ -327,21 +313,6 @@ export class Store {
327
313
  setInviteInStatus(space, status) {
328
314
  this.#db.run('UPDATE anodb_invites_in SET status = ? WHERE space = ?', [status, space]);
329
315
  }
330
- putJoinRequest(id, secret, identity, payload) {
331
- this.#db.run("INSERT OR IGNORE INTO anodb_join_requests (id, secret, identity, payload, status, received_at) VALUES (?, ?, ?, ?, 'pending', ?)", [
332
- id,
333
- secret,
334
- identity,
335
- payload,
336
- Date.now(),
337
- ]);
338
- }
339
- joinRequests(status = 'pending') {
340
- return this.#db.all('SELECT id, secret, identity, payload FROM anodb_join_requests WHERE status = ? ORDER BY received_at', [status]);
341
- }
342
- setJoinRequestStatus(id, status) {
343
- this.#db.run('UPDATE anodb_join_requests SET status = ? WHERE id = ?', [status, id]);
344
- }
345
316
  /** Forget all spaces and data (device pairing adopts another identity). Keeps node id and clock. */
346
317
  wipe() {
347
318
  this.transaction(() => {
@@ -355,9 +326,7 @@ export class Store {
355
326
  'anodb_acks',
356
327
  'anodb_cursors',
357
328
  'anodb_devices',
358
- 'anodb_invites_out',
359
329
  'anodb_invites_in',
360
- 'anodb_join_requests',
361
330
  ]) {
362
331
  this.#db.run(`DELETE FROM ${t}`);
363
332
  }
@@ -457,25 +426,5 @@ export class Store {
457
426
  resetCursors() {
458
427
  this.#db.run('DELETE FROM anodb_cursors');
459
428
  }
460
- // ---- public (replaceable) event cache ---------------------------------
461
- getPublic(pubkey, kind) {
462
- const row = this.#db.all('SELECT event, fetched_at FROM anodb_public WHERE pubkey = ? AND kind = ?', [
463
- pubkey,
464
- kind,
465
- ])[0];
466
- return row && { event: JSON.parse(row.event), fetchedAt: row.fetched_at };
467
- }
468
- putPublic(event, pubkey, kind, fetchedAt) {
469
- const existing = this.getPublic(pubkey, kind);
470
- const newer = event &&
471
- (!existing || event.created_at > existing.event.created_at || (event.created_at === existing.event.created_at && event.id < existing.event.id));
472
- if (newer) {
473
- this.#db.run(`INSERT INTO anodb_public (pubkey, kind, event, created_at, fetched_at) VALUES (?, ?, ?, ?, ?)
474
- ON CONFLICT(pubkey, kind) DO UPDATE SET event = excluded.event, created_at = excluded.created_at, fetched_at = excluded.fetched_at`, [pubkey, kind, JSON.stringify(event), event.created_at, fetchedAt]);
475
- }
476
- else if (existing) {
477
- this.#db.run('UPDATE anodb_public SET fetched_at = ? WHERE pubkey = ? AND kind = ?', [fetchedAt, pubkey, kind]);
478
- }
479
- }
480
429
  }
481
430
  //# sourceMappingURL=store.js.map
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import type { Role } from './membership.js';
3
- import type { Device, Invitation, JoinRequest, Member } from './sharing.js';
3
+ import type { Device, Invitation, Member } from './sharing.js';
4
4
  import type { SpaceInfo } from './db.js';
5
5
  /** The parts of AnoDB these components use. */
6
6
  export interface SharingDB {
@@ -12,14 +12,7 @@ export interface SharingDB {
12
12
  roleIn(space: string): Role | undefined;
13
13
  setRole(space: string, who: string, role: Exclude<Role, 'owner'>): Promise<void>;
14
14
  removeMember(space: string, who: string): Promise<void>;
15
- createInviteLink(space: string, opts?: {
16
- role?: Exclude<Role, 'owner'>;
17
- expiresInMs?: number;
18
- }): Promise<string>;
19
- requestJoin(link: string, name?: string): Promise<void>;
20
- joinRequests(): JoinRequest[];
21
- approveJoinRequest(id: string): Promise<void>;
22
- rejectJoinRequest(id: string): void;
15
+ addMember(space: string, who: string, role: Exclude<Role, 'owner'>): Promise<void>;
23
16
  invitations(): Invitation[];
24
17
  acceptInvitation(space: string): Promise<void>;
25
18
  declineInvitation(space: string): void;
@@ -60,20 +53,10 @@ declare const en: {
60
53
  revoked: string;
61
54
  revoke: string;
62
55
  confirmRevoke: string;
63
- invite: string;
64
56
  role: string;
65
- createLink: string;
66
- linkHint: string;
67
- requests: string;
68
- none: string;
69
- approveRequest: string;
70
- reject: string;
71
- cannotInvite: string;
72
- join: string;
73
- inviteLink: string;
74
- yourName: string;
75
- requestJoin: string;
76
- requested: string;
57
+ addMember: string;
58
+ add: string;
59
+ added: string;
77
60
  joined: string;
78
61
  invitations: string;
79
62
  accept: string;
@@ -102,7 +85,7 @@ export declare function toAppLink(uri: string, base?: string): string;
102
85
  /** Accepts an `anodb://…` link or an app link (`…#anodb=…`) and returns the `anodb://` link. */
103
86
  export declare function parseAppLink(text: string): string | null;
104
87
  /** An `anodb://<kind>` link this page was opened with (`#anodb=…`), and a way to clear it. */
105
- export declare function useIncomingLink(kind: 'pair' | 'join'): [string | null, () => void];
88
+ export declare function useIncomingLink(kind: 'pair'): [string | null, () => void];
106
89
  /** QR code as SVG (dark modules use `currentColor`). */
107
90
  export declare function QRCode(props: {
108
91
  value: string;
@@ -125,29 +108,16 @@ export interface PairDeviceProps extends CommonProps {
125
108
  export declare function PairDevice(props: PairDeviceProps): import("react").JSX.Element;
126
109
  /** Your devices, with a revoke button for each other device. */
127
110
  export declare function DeviceList(props: CommonProps): import("react").JSX.Element;
128
- export interface InviteLinkProps extends CommonProps {
111
+ export interface AddMemberProps extends CommonProps {
129
112
  space: string;
130
- /** Link lifetime. Default 24 h. */
131
- expiresInMs?: number;
132
- /** Show join requests below the link. Default true. */
133
- showRequests?: boolean;
134
- linkBase?: string;
135
- }
136
- /** One-time invite link (with QR code) for a space, and the join requests waiting for approval. */
137
- export declare function InviteLink(props: InviteLinkProps): import("react").JSX.Element;
138
- /** Join requests for one space (or all spaces) with approve / reject. */
139
- export declare function JoinRequests(props: CommonProps & {
140
- space?: string;
141
- }): import("react").JSX.Element;
142
- export interface JoinSpaceProps extends CommonProps {
143
- /** Called with the space id once you are a member. */
144
- onJoined?: (space: string) => void;
145
- /** Pre-filled name shown to the admin. */
146
- defaultName?: string;
147
113
  }
148
- /** Join with an invite link (pasted or opened via QR), and accept invitations sent to your npub. */
149
- export declare function JoinSpace(props: JoinSpaceProps): import("react").JSX.Element;
150
- /** Invitations sent to your npub (`db.invite(space, npub, role)`), with accept / decline. */
114
+ /**
115
+ * Add someone to a space by npub (owners / admins). They must have published a key package
116
+ * (`db.publishKeyPackage()`); they then see an invitation to accept. Deciding *who* may join —
117
+ * links, approval, sign-in with an external provider — is left to the app or anoAuth.
118
+ */
119
+ export declare function AddMember(props: AddMemberProps): import("react").JSX.Element | null;
120
+ /** Invitations sent to your npub (`db.addMember(space, npub, role)`), with accept / decline. */
151
121
  export declare function Invitations(props: CommonProps & {
152
122
  onJoined?: (space: string) => void;
153
123
  }): import("react").JSX.Element | null;
package/dist/ui.js CHANGED
@@ -6,8 +6,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  *
7
7
  * <PairDevice /> add a device to your identity (QR code + safety code)
8
8
  * <DeviceList /> your devices, with revoke
9
- * <InviteLink space={id} /> one-time invite link + QR, and the join requests to approve
10
- * <JoinSpace /> paste / open an invite link, see invitations by npub
9
+ * <AddMember space={id} /> add someone by npub (owners / admins)
10
+ * <Invitations /> spaces you were added to, with accept / decline
11
11
  * <Members space={id} /> members with roles (owners / admins can change them)
12
12
  *
13
13
  * Links and QR codes are ordinary `https://your-app/#anodb=…` URLs: scanning one with a phone's
@@ -16,6 +16,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
16
  */
17
17
  import qrcode from 'qrcode-generator';
18
18
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
19
+ import { LINK_CHANNEL } from './links.js';
19
20
  import { useAnoDB } from './react.js';
20
21
  const en = {
21
22
  addDevice: 'Add a device',
@@ -39,20 +40,10 @@ const en = {
39
40
  revoked: 'revoked',
40
41
  revoke: 'Revoke',
41
42
  confirmRevoke: 'Revoke for good?',
42
- invite: 'Invite',
43
43
  role: 'Role',
44
- createLink: 'Create invite link',
45
- linkHint: 'One-time link. It expires in {hours} h, and you approve each request below.',
46
- requests: 'Join requests',
47
- none: 'None',
48
- approveRequest: 'Approve',
49
- reject: 'Reject',
50
- cannotInvite: 'Only owners and admins can invite.',
51
- join: 'Join with a link',
52
- inviteLink: 'Invite link',
53
- yourName: 'Your name (shown to the admin)',
54
- requestJoin: 'Request to join',
55
- requested: 'Request sent. You join as soon as an admin approves it.',
44
+ addMember: 'Add a member',
45
+ add: 'Add',
46
+ added: 'Added. They see an invitation the next time they open the app.',
56
47
  joined: 'Joined',
57
48
  invitations: 'Invitations',
58
49
  accept: 'Accept',
@@ -85,20 +76,10 @@ const ja = {
85
76
  revoked: '失効済み',
86
77
  revoke: '失効',
87
78
  confirmRevoke: '本当に失効させますか?',
88
- invite: '招待',
89
79
  role: '役割',
90
- createLink: '招待リンクを作成',
91
- linkHint: '1回限りのリンクです。{hours} 時間で期限が切れ、参加リクエストは下で1件ずつ承認します。',
92
- requests: '参加リクエスト',
93
- none: 'なし',
94
- approveRequest: '承認',
95
- reject: '拒否',
96
- cannotInvite: '招待できるのはオーナーと管理者だけです。',
97
- join: 'リンクで参加',
98
- inviteLink: '招待リンク',
99
- yourName: 'あなたの名前(管理者に表示されます)',
100
- requestJoin: '参加をリクエスト',
101
- requested: 'リクエストを送りました。管理者が承認すると参加できます。',
80
+ addMember: 'メンバーを追加',
81
+ add: '追加',
82
+ added: '追加しました。相手が次にアプリを開くと招待が表示されます。',
102
83
  joined: '参加しました',
103
84
  invitations: '招待',
104
85
  accept: '参加する',
@@ -179,7 +160,21 @@ export function useIncomingLink(kind) {
179
160
  };
180
161
  read();
181
162
  window.addEventListener('hashchange', read);
182
- return () => window.removeEventListener('hashchange', read);
163
+ // A link opened in another tab while this one holds the database (see browserDriver).
164
+ const ch = typeof BroadcastChannel !== 'undefined' ? new BroadcastChannel(LINK_CHANNEL) : null;
165
+ if (ch)
166
+ ch.onmessage = (e) => {
167
+ const l = typeof e.data?.href === 'string' ? parseAppLink(e.data.href) : null;
168
+ if (!l || parseAppLink(location.href) === l)
169
+ return;
170
+ // Put it in this page's URL so every useIncomingLink (including ones mounted later) sees it.
171
+ history.replaceState(null, '', `${location.pathname}${location.search}#anodb=${encodeURIComponent(l)}`);
172
+ window.dispatchEvent(new HashChangeEvent('hashchange'));
173
+ };
174
+ return () => {
175
+ window.removeEventListener('hashchange', read);
176
+ ch?.close();
177
+ };
183
178
  }, [kind]);
184
179
  const clear = useCallback(() => {
185
180
  setLink(null);
@@ -315,70 +310,34 @@ export function DeviceList(props) {
315
310
  }
316
311
  // ---- sharing ---------------------------------------------------------------------------------
317
312
  const MANAGER = { owner: true, admin: true };
318
- /** One-time invite link (with QR code) for a space, and the join requests waiting for approval. */
319
- export function InviteLink(props) {
313
+ /**
314
+ * Add someone to a space by npub (owners / admins). They must have published a key package
315
+ * (`db.publishKeyPackage()`); they then see an invitation to accept. Deciding *who* may join —
316
+ * links, approval, sign-in with an external provider — is left to the app or anoAuth.
317
+ */
318
+ export function AddMember(props) {
320
319
  const l = useLabels(props);
321
320
  const db = useSharingDB();
322
321
  const me = useLive((d) => d.roleIn(props.space), [props.space]);
323
322
  const roles = me === 'owner' ? ['writer', 'reader', 'admin'] : ['writer', 'reader'];
324
323
  const [role, setRole] = useState('writer');
325
- const [link, setLink] = useState(null);
326
- const { error, run } = useErr();
327
- const expires = props.expiresInMs ?? 24 * 3600_000;
328
- useEffect(() => setLink(null), [props.space]);
329
- if (!me || !MANAGER[me]) {
330
- return (_jsx("p", { className: props.className ?? 'anodb-invite', style: { margin: 0 }, children: l.cannotInvite }));
331
- }
332
- return (_jsxs("section", { className: props.className ?? 'anodb-invite', style: col, children: [_jsx("h3", { style: { margin: 0 }, children: l.invite }), _jsxs("div", { style: row, children: [_jsx("select", { className: "anodb-select", "aria-label": l.role, value: role, onChange: (e) => setRole(e.target.value), children: roles.map((r) => (_jsx("option", { value: r, children: r }, r))) }), _jsx("button", { className: "anodb-button", onClick: () => void run(db.createInviteLink(props.space, { role, expiresInMs: expires })).then((u) => u && setLink(toAppLink(u, props.linkBase))), children: l.createLink })] }), link && (_jsxs("div", { style: col, children: [_jsx(QRCode, { value: link, title: l.inviteLink }), _jsx("span", { style: mono, children: link }), _jsx("div", { style: row, children: _jsx(CopyButton, { text: link, l: l }) }), _jsx("span", { className: "anodb-hint", children: l.linkHint.replace('{hours}', String(Math.round(expires / 3600_000))) })] })), _jsx(ErrorText, { error: error }), props.showRequests !== false && _jsx(JoinRequests, { space: props.space, ...(props.lang ? { lang: props.lang } : {}), ...(props.labels ? { labels: props.labels } : {}) })] }));
333
- }
334
- /** Join requests for one space (or all spaces) with approve / reject. */
335
- export function JoinRequests(props) {
336
- const l = useLabels(props);
337
- const db = useSharingDB();
338
- const requests = useLive((d) => d.joinRequests().filter((r) => !props.space || r.space === props.space), [props.space]);
324
+ const [npub, setNpub] = useState('');
325
+ const [done, setDone] = useState(false);
339
326
  const { error, run } = useErr();
340
- return (_jsxs("section", { className: props.className ?? 'anodb-requests', style: col, children: [_jsx("h4", { style: { margin: 0 }, children: l.requests }), requests.length === 0 && _jsx("span", { className: "anodb-hint", children: l.none }), _jsx("ul", { style: list, children: requests.map((r) => (_jsxs("li", { style: { ...row, justifyContent: 'space-between' }, children: [_jsxs("span", { children: [r.name || `${r.npub.slice(0, 12)}…`, " ", _jsx("span", { className: "anodb-badge", children: r.role })] }), _jsxs("span", { style: row, children: [_jsx("button", { className: "anodb-button", onClick: () => void run(db.approveJoinRequest(r.id)), children: l.approveRequest }), _jsx("button", { className: "anodb-button anodb-secondary", onClick: () => db.rejectJoinRequest(r.id), children: l.reject })] })] }, r.id))) }), _jsx(ErrorText, { error: error })] }));
341
- }
342
- /** Join with an invite link (pasted or opened via QR), and accept invitations sent to your npub. */
343
- export function JoinSpace(props) {
344
- const l = useLabels(props);
345
- const db = useSharingDB();
346
- const [incoming, clearIncoming] = useIncomingLink('join');
347
- const [text, setText] = useState('');
348
- const [name, setName] = useState(props.defaultName ?? '');
349
- const [sent, setSent] = useState(false);
350
- const { error, setError, run } = useErr();
351
- const spaces = useLive((d) => d.spaces().filter((s) => s.status === 'active').map((s) => s.id));
352
- const before = useRef(null);
353
- const onJoined = props.onJoined;
354
- useEffect(() => {
355
- if (incoming)
356
- setText(incoming);
357
- }, [incoming]);
358
- useEffect(() => {
359
- if (!before.current)
360
- return;
361
- const added = spaces.find((s) => !before.current.has(s));
362
- if (added) {
363
- before.current = null;
364
- setSent(false);
365
- onJoined?.(added);
366
- }
367
- }, [spaces, onJoined]);
368
- return (_jsxs("section", { className: props.className ?? 'anodb-join', style: col, children: [_jsx("h3", { style: { margin: 0 }, children: l.join }), _jsxs("form", { style: col, onSubmit: (e) => {
369
- e.preventDefault();
370
- const uri = parseAppLink(text);
371
- if (!uri?.startsWith('anodb://join'))
372
- return setError(l.invalidLink);
373
- before.current = new Set(spaces);
374
- void run(db.requestJoin(uri, name.trim())).then(() => {
375
- setSent(true);
376
- setText('');
377
- clearIncoming();
378
- });
379
- }, children: [_jsx("input", { className: "anodb-input", "aria-label": l.inviteLink, placeholder: l.inviteLink, value: text, onChange: (e) => setText(e.target.value) }), _jsxs("div", { style: row, children: [_jsx("input", { className: "anodb-input", "aria-label": l.yourName, placeholder: l.yourName, value: name, onChange: (e) => setName(e.target.value), style: { flex: 1, minWidth: 0 } }), _jsx("button", { className: "anodb-button", children: l.requestJoin })] })] }), sent && _jsx("span", { className: "anodb-hint", children: l.requested }), _jsx(ErrorText, { error: error }), _jsx(Invitations, { ...props })] }));
327
+ if (!me || !MANAGER[me])
328
+ return null;
329
+ return (_jsxs("form", { className: props.className ?? 'anodb-add-member', style: col, onSubmit: (e) => {
330
+ e.preventDefault();
331
+ setDone(false);
332
+ void run(db.addMember(props.space, npub.trim(), role).then(() => true)).then((ok) => {
333
+ if (!ok)
334
+ return;
335
+ setNpub('');
336
+ setDone(true);
337
+ });
338
+ }, children: [_jsx("h3", { style: { margin: 0 }, children: l.addMember }), _jsx("input", { className: "anodb-input", "aria-label": "npub", placeholder: "npub1\u2026", value: npub, onChange: (e) => setNpub(e.target.value) }), _jsxs("div", { style: row, children: [_jsx("select", { className: "anodb-select", "aria-label": l.role, value: role, onChange: (e) => setRole(e.target.value), children: roles.map((r) => (_jsx("option", { value: r, children: r }, r))) }), _jsx("button", { className: "anodb-button", disabled: !npub.trim(), children: l.add })] }), done && (_jsx("span", { className: "anodb-hint", role: "status", children: l.added })), _jsx(ErrorText, { error: error })] }));
380
339
  }
381
- /** Invitations sent to your npub (`db.invite(space, npub, role)`), with accept / decline. */
340
+ /** Invitations sent to your npub (`db.addMember(space, npub, role)`), with accept / decline. */
382
341
  export function Invitations(props) {
383
342
  const l = useLabels(props);
384
343
  const db = useSharingDB();