@anodb/core 0.8.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/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/crypto.d.ts +2 -2
  9. package/dist/crypto.js +2 -2
  10. package/dist/crypto.js.map +1 -1
  11. package/dist/db.d.ts +9 -10
  12. package/dist/db.js +22 -31
  13. package/dist/db.js.map +1 -1
  14. package/dist/defaults.d.ts +3 -2
  15. package/dist/defaults.js +7 -5
  16. package/dist/defaults.js.map +1 -1
  17. package/dist/drivers/browser.d.ts +2 -1
  18. package/dist/drivers/browser.js +4 -1
  19. package/dist/drivers/browser.js.map +1 -1
  20. package/dist/index.d.ts +4 -7
  21. package/dist/index.js +2 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/kysely.d.ts +4 -0
  24. package/dist/kysely.js.map +1 -1
  25. package/dist/links.d.ts +8 -0
  26. package/dist/links.js +16 -0
  27. package/dist/links.js.map +1 -0
  28. package/dist/policy.d.ts +16 -0
  29. package/dist/policy.js +29 -0
  30. package/dist/policy.js.map +1 -0
  31. package/dist/react.d.ts +2 -2
  32. package/dist/react.js +1 -1
  33. package/dist/react.js.map +1 -1
  34. package/dist/schema.d.ts +12 -1
  35. package/dist/schema.js +28 -5
  36. package/dist/schema.js.map +1 -1
  37. package/dist/sharing.d.ts +18 -23
  38. package/dist/sharing.js +56 -99
  39. package/dist/sharing.js.map +1 -1
  40. package/dist/store.d.ts +8 -30
  41. package/dist/store.js +35 -86
  42. package/dist/store.js.map +1 -1
  43. package/dist/ui.d.ts +14 -44
  44. package/dist/ui.js +45 -86
  45. package/dist/ui.js.map +1 -1
  46. package/docs/DECISIONS.md +4 -0
  47. package/docs/DESIGN.md +4 -18
  48. package/package.json +3 -3
  49. package/dist/public-tables.d.ts +0 -31
  50. package/dist/public-tables.js +0 -186
  51. package/dist/public-tables.js.map +0 -1
  52. package/dist/public.d.ts +0 -75
  53. package/dist/public.js +0 -164
  54. package/dist/public.js.map +0 -1
package/dist/public.js DELETED
@@ -1,164 +0,0 @@
1
- import { verifySignedEvent } from './crypto.js';
2
- import { DEFAULT_DISCOVERY_RELAYS } from './defaults.js';
3
- import { normalizeRelayUrl } from './relay-pool.js';
4
- export const KIND_PROFILE = 0;
5
- export const KIND_NOTE = 1;
6
- export const KIND_RELAY_LIST = 10002;
7
- /**
8
- * Standard Nostr events (profiles, notes, NIP-65 relay lists): readable and writable by any
9
- * Nostr client. Fetched data is cached in the local SQLite so it is available offline.
10
- */
11
- export class PublicData {
12
- #d;
13
- constructor(deps) {
14
- this.#d = deps;
15
- }
16
- // ---- read ------------------------------------------------------------------
17
- /** Cached kind 0 without touching the network. */
18
- cachedProfile(pubkey) {
19
- const c = this.#d.store.getPublic(pubkey, KIND_PROFILE);
20
- return c ? parseProfile(c.event) : null;
21
- }
22
- async getProfile(pubkey, opts = {}) {
23
- const r = await this.#getReplaceable(pubkey, KIND_PROFILE, opts, true);
24
- return { ...r, value: r.event ? parseProfile(r.event) : null };
25
- }
26
- async getRelayList(pubkey, opts = {}) {
27
- const r = await this.#getReplaceable(pubkey, KIND_RELAY_LIST, opts, false);
28
- return { ...r, value: r.event ? parseRelayList(r.event) : null };
29
- }
30
- /** Recent kind 1 notes by `pubkey`, from the pool and the author's NIP-65 write relays. */
31
- async getNotes(pubkey, opts = {}) {
32
- const relays = await this.#authorRelays(pubkey, opts.timeoutMs);
33
- const filter = { kinds: [KIND_NOTE], authors: [pubkey], limit: opts.limit ?? 20 };
34
- if (opts.since !== undefined)
35
- filter.since = opts.since;
36
- const events = await this.fetch([filter], { relays, timeoutMs: opts.timeoutMs });
37
- return events.sort((a, b) => b.created_at - a.created_at || (a.id < b.id ? -1 : 1)).slice(0, filter.limit);
38
- }
39
- /** One-shot query; returns only events with valid signatures. */
40
- async fetch(filters, opts = {}) {
41
- const pool = this.#d.pool;
42
- if (!pool)
43
- return [];
44
- const q = {};
45
- if (opts.relays)
46
- q.relays = opts.relays;
47
- if (opts.timeoutMs !== undefined)
48
- q.timeoutMs = opts.timeoutMs;
49
- const events = await pool.query(filters, q);
50
- return events.filter(verifySignedEvent);
51
- }
52
- async #getReplaceable(pubkey, kind, opts, discover) {
53
- const { store, now } = this.#d;
54
- const cached = store.getPublic(pubkey, kind);
55
- const maxAge = opts.maxAgeMs ?? 10 * 60_000;
56
- if (cached && now() - cached.fetchedAt < maxAge) {
57
- return { event: cached.event, status: 'synced', fetchedAt: cached.fetchedAt };
58
- }
59
- let relays = this.#baseRelays(opts.relays);
60
- if (discover)
61
- relays = unique([...relays, ...(await this.#authorRelays(pubkey, opts.timeoutMs))]);
62
- const events = (await this.fetch([{ kinds: [kind], authors: [pubkey] }], { relays, timeoutMs: opts.timeoutMs }))
63
- .filter((e) => e.pubkey === pubkey && e.kind === kind);
64
- const best = newest(events);
65
- if (best) {
66
- const t = now();
67
- store.putPublic(best, pubkey, kind, t);
68
- const after = store.getPublic(pubkey, kind);
69
- return { event: after.event, status: 'synced', fetchedAt: t };
70
- }
71
- if (cached)
72
- return { event: cached.event, status: 'stale', fetchedAt: cached.fetchedAt };
73
- return { event: null, status: 'unavailable', fetchedAt: null };
74
- }
75
- /** Pool relays + discovery relays + the author's NIP-65 write relays. */
76
- async #authorRelays(pubkey, timeoutMs) {
77
- const opts = {};
78
- if (timeoutMs !== undefined)
79
- opts.timeoutMs = timeoutMs;
80
- const list = await this.getRelayList(pubkey, opts);
81
- return unique([...this.#baseRelays(), ...(list.value?.write ?? [])]);
82
- }
83
- #baseRelays(extra = []) {
84
- const pool = this.#d.pool?.relays ?? [];
85
- return unique([...pool, ...(this.#d.discoveryRelays ?? DEFAULT_DISCOVERY_RELAYS), ...extra]);
86
- }
87
- // ---- write -----------------------------------------------------------------
88
- // Signed with the owner key and delivered through the durable outbox.
89
- async publishProfile(profile) {
90
- const event = await this.#sign(KIND_PROFILE, JSON.stringify(profile), []);
91
- this.#d.store.putPublic(event, event.pubkey, KIND_PROFILE, this.#d.now());
92
- this.#d.enqueue(event);
93
- return event;
94
- }
95
- async publishNote(content, tags = []) {
96
- const event = await this.#sign(KIND_NOTE, content, tags);
97
- this.#d.enqueue(event);
98
- return event;
99
- }
100
- async publishRelayList(list) {
101
- const read = new Set(list.read.map(normalizeRelayUrl));
102
- const write = new Set(list.write.map(normalizeRelayUrl));
103
- const tags = [];
104
- for (const r of unique([...read, ...write])) {
105
- if (read.has(r) && write.has(r))
106
- tags.push(['r', r]);
107
- else
108
- tags.push(['r', r, read.has(r) ? 'read' : 'write']);
109
- }
110
- const event = await this.#sign(KIND_RELAY_LIST, '', tags);
111
- this.#d.store.putPublic(event, event.pubkey, KIND_RELAY_LIST, this.#d.now());
112
- this.#d.enqueue(event);
113
- return event;
114
- }
115
- #sign(kind, content, tags) {
116
- return this.#d.signer().signEvent({ kind, content, tags, created_at: Math.floor(this.#d.now() / 1000) });
117
- }
118
- }
119
- function newest(events) {
120
- // NIP-01: highest created_at wins; ties broken by lowest id.
121
- return events.reduce((best, e) => (!best || e.created_at > best.created_at || (e.created_at === best.created_at && e.id < best.id) ? e : best), undefined);
122
- }
123
- function unique(urls) {
124
- const out = new Set();
125
- for (const u of urls) {
126
- try {
127
- out.add(normalizeRelayUrl(u));
128
- }
129
- catch {
130
- /* skip malformed relay URLs from untrusted relay lists */
131
- }
132
- }
133
- return [...out];
134
- }
135
- export function parseProfile(event) {
136
- try {
137
- const p = JSON.parse(event.content);
138
- return typeof p === 'object' && p !== null && !Array.isArray(p) ? p : null;
139
- }
140
- catch {
141
- return null;
142
- }
143
- }
144
- export function parseRelayList(event) {
145
- const read = [];
146
- const write = [];
147
- for (const t of event.tags) {
148
- if (t[0] !== 'r' || typeof t[1] !== 'string')
149
- continue;
150
- let url;
151
- try {
152
- url = normalizeRelayUrl(t[1]);
153
- }
154
- catch {
155
- continue;
156
- }
157
- if (t[2] !== 'write')
158
- read.push(url);
159
- if (t[2] !== 'read')
160
- write.push(url);
161
- }
162
- return { read, write };
163
- }
164
- //# sourceMappingURL=public.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"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"}