@hashtree/nostr 0.1.5 → 0.1.7

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/README.md CHANGED
@@ -123,6 +123,24 @@ stop();
123
123
 
124
124
  The library does not keep a global snapshot cache for you. It provides stateless helpers plus a live watcher; route caching and reuse policy stay with the app. Pass a `HashTree` when you already have one controlling write policy, or a raw `Store` when the default wrapper is enough.
125
125
 
126
+ Snapshot routes use the signed snapshot blob `nhash` plus a path and optional link key:
127
+
128
+ ```typescript
129
+ import {
130
+ buildTreeEventSnapshotPermalink,
131
+ parseTreeEventSnapshotPermalink,
132
+ } from '@hashtree/nostr';
133
+
134
+ const href = buildTreeEventSnapshotPermalink({
135
+ snapshotNhash: snapshot.snapshotNhash,
136
+ path: ['index.html'],
137
+ linkKey: 'abcd...optional 64-hex link key',
138
+ });
139
+ // nhash1.../index.html?snapshot=1&k=...
140
+
141
+ const parsed = parseTreeEventSnapshotPermalink(`htree://${href}`);
142
+ ```
143
+
126
144
  ## License
127
145
 
128
146
  MIT
@@ -0,0 +1,15 @@
1
+ import { COLLECTION_MANIFEST_METADATA_FILE, CollectionSource, CollectionWriter, type CollectionDefinition, type CollectionManifest } from '@hashtree/collection';
2
+ import type { Store } from '@hashtree/core';
3
+ import type { NostrEventManifest, StoredNostrEvent } from './events.js';
4
+ export declare const DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID = "nostr-events";
5
+ export declare const NOSTR_EVENT_ITEM_FORMAT = "nostr/event@1";
6
+ export declare const NOSTR_EVENT_PROJECTION_FORMAT = "hashtree/nostr-event-index@1";
7
+ export { COLLECTION_MANIFEST_METADATA_FILE };
8
+ export declare function createNostrEventCollectionDefinition(sourceId?: string): CollectionDefinition<StoredNostrEvent>;
9
+ export declare function nostrEventManifestToCollectionManifest(manifest: NostrEventManifest, sourceId?: string, itemCount?: number): CollectionManifest;
10
+ export declare function collectionManifestToNostrEventManifest(manifest: CollectionManifest): NostrEventManifest;
11
+ export declare function createNostrEventCollectionSource(store: Store, manifest: NostrEventManifest, sourceId?: string): Promise<CollectionSource>;
12
+ export declare function createNostrEventCollectionWriter(store: Store, manifest: NostrEventManifest, sourceId?: string): CollectionWriter<StoredNostrEvent>;
13
+ export declare function nostrEventCollectionManifestMetadata(manifest: NostrEventManifest, sourceId?: string): import("@hashtree/collection").CollectionManifestMetadata | null;
14
+ export declare const nostrEventCollectionRootMetadata: typeof nostrEventCollectionManifestMetadata;
15
+ //# sourceMappingURL=eventCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventCollection.d.ts","sourceRoot":"","sources":["../src/eventCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,gBAAgB,EAChB,gBAAgB,EAIhB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EAGxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAsB5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAExE,eAAO,MAAM,wCAAwC,iBAAiB,CAAC;AACvE,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,CAAC;AAO7C,wBAAgB,oCAAoC,CAClD,QAAQ,GAAE,MAAiD,GAC1D,oBAAoB,CAAC,gBAAgB,CAAC,CAkDxC;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAiD,EAC3D,SAAS,SAAI,GACZ,kBAAkB,CAwBpB;AAED,wBAAgB,sCAAsC,CAAC,QAAQ,EAAE,kBAAkB,GAAG,kBAAkB,CAoBvG;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAiD,GAC1D,OAAO,CAAC,gBAAgB,CAAC,CAO3B;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAiD,GAC1D,gBAAgB,CAAC,gBAAgB,CAAC,CAMpC;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,GAAE,MAAiD,oEAK5D;AAED,eAAO,MAAM,gCAAgC,6CAAuC,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { COLLECTION_MANIFEST_METADATA_FILE, CollectionSource, CollectionWriter, collectionManifestMetadataFromManifest, deserializeCid, serializeCid, } from '@hashtree/collection';
2
+ import { authorKindTimeKey, authorTimeKey, getDTag, isParameterizedReplaceableKind, isReplaceableKind, kindTimeKey, MANIFEST_BY_AUTHOR_KIND_TIME, MANIFEST_BY_AUTHOR_TIME, MANIFEST_BY_KIND_TIME, MANIFEST_BY_TAG, MANIFEST_BY_TIME, MANIFEST_PARAMETERIZED_REPLACEABLE, MANIFEST_REPLACEABLE, parameterizedReplaceableKey, replaceableKey, tagKeys, timeKey, } from './eventKeys.js';
3
+ import { validateEventShape } from './eventValidation.js';
4
+ export const DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID = 'nostr-events';
5
+ export const NOSTR_EVENT_ITEM_FORMAT = 'nostr/event@1';
6
+ export const NOSTR_EVENT_PROJECTION_FORMAT = 'hashtree/nostr-event-index@1';
7
+ export { COLLECTION_MANIFEST_METADATA_FILE };
8
+ const NOSTR_EVENT_PUBLISHED_SCHEMA = {
9
+ itemFormat: NOSTR_EVENT_ITEM_FORMAT,
10
+ projectionFormat: NOSTR_EVENT_PROJECTION_FORMAT,
11
+ };
12
+ export function createNostrEventCollectionDefinition(sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
13
+ return {
14
+ sourceId,
15
+ schema: {
16
+ version: 1,
17
+ validate: (event) => {
18
+ validateEventShape(event);
19
+ },
20
+ },
21
+ publishedSchema: NOSTR_EVENT_PUBLISHED_SCHEMA,
22
+ getId: (event) => event.id,
23
+ keyIndexes: [
24
+ {
25
+ name: MANIFEST_BY_AUTHOR_TIME,
26
+ keys: (event) => [authorTimeKey(event)],
27
+ },
28
+ {
29
+ name: MANIFEST_BY_AUTHOR_KIND_TIME,
30
+ keys: (event) => [authorKindTimeKey(event)],
31
+ },
32
+ {
33
+ name: MANIFEST_BY_KIND_TIME,
34
+ keys: (event) => [kindTimeKey(event)],
35
+ },
36
+ {
37
+ name: MANIFEST_BY_TIME,
38
+ keys: (event) => [timeKey(event)],
39
+ },
40
+ {
41
+ name: MANIFEST_BY_TAG,
42
+ keys: (event) => tagKeys(event),
43
+ },
44
+ {
45
+ name: MANIFEST_REPLACEABLE,
46
+ keys: (event) => (isReplaceableKind(event.kind)
47
+ ? [replaceableKey(event.pubkey, event.kind)]
48
+ : []),
49
+ },
50
+ {
51
+ name: MANIFEST_PARAMETERIZED_REPLACEABLE,
52
+ keys: (event) => (isParameterizedReplaceableKind(event.kind)
53
+ ? [parameterizedReplaceableKey(event.pubkey, event.kind, getDTag(event) ?? '')]
54
+ : []),
55
+ },
56
+ ],
57
+ };
58
+ }
59
+ export function nostrEventManifestToCollectionManifest(manifest, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID, itemCount = 0) {
60
+ const indexes = {
61
+ [MANIFEST_BY_AUTHOR_TIME]: { kind: 'key', root: serializeCid(manifest.byAuthorTime) },
62
+ [MANIFEST_BY_AUTHOR_KIND_TIME]: { kind: 'key', root: serializeCid(manifest.byAuthorKindTime) },
63
+ [MANIFEST_BY_KIND_TIME]: { kind: 'key', root: serializeCid(manifest.byKindTime) },
64
+ [MANIFEST_BY_TIME]: { kind: 'key', root: serializeCid(manifest.byTime) },
65
+ [MANIFEST_BY_TAG]: { kind: 'key', root: serializeCid(manifest.byTag) },
66
+ [MANIFEST_REPLACEABLE]: { kind: 'key', root: serializeCid(manifest.replaceable) },
67
+ [MANIFEST_PARAMETERIZED_REPLACEABLE]: {
68
+ kind: 'key',
69
+ root: serializeCid(manifest.parameterizedReplaceable),
70
+ },
71
+ };
72
+ return {
73
+ version: 1,
74
+ sourceId,
75
+ schemaVersion: 1,
76
+ updatedAt: 0,
77
+ itemCount,
78
+ byIdRoot: serializeCid(manifest.byId),
79
+ indexes,
80
+ publishedSchema: NOSTR_EVENT_PUBLISHED_SCHEMA,
81
+ };
82
+ }
83
+ export function collectionManifestToNostrEventManifest(manifest) {
84
+ const byId = deserializeCid(manifest.byIdRoot);
85
+ const keyIndexCid = (name) => {
86
+ const index = manifest.indexes[name];
87
+ if (!index?.root) {
88
+ return null;
89
+ }
90
+ return deserializeCid(index.root);
91
+ };
92
+ return {
93
+ byId,
94
+ byAuthorTime: keyIndexCid(MANIFEST_BY_AUTHOR_TIME),
95
+ byAuthorKindTime: keyIndexCid(MANIFEST_BY_AUTHOR_KIND_TIME),
96
+ byKindTime: keyIndexCid(MANIFEST_BY_KIND_TIME),
97
+ byTime: keyIndexCid(MANIFEST_BY_TIME),
98
+ byTag: keyIndexCid(MANIFEST_BY_TAG),
99
+ replaceable: keyIndexCid(MANIFEST_REPLACEABLE),
100
+ parameterizedReplaceable: keyIndexCid(MANIFEST_PARAMETERIZED_REPLACEABLE),
101
+ };
102
+ }
103
+ export async function createNostrEventCollectionSource(store, manifest, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
104
+ const collectionManifest = nostrEventManifestToCollectionManifest(manifest, sourceId);
105
+ const source = new CollectionSource(store, collectionManifest);
106
+ return new CollectionSource(store, {
107
+ ...collectionManifest,
108
+ itemCount: await source.count(),
109
+ });
110
+ }
111
+ export function createNostrEventCollectionWriter(store, manifest, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
112
+ return new CollectionWriter(store, createNostrEventCollectionDefinition(sourceId), nostrEventManifestToCollectionManifest(manifest, sourceId));
113
+ }
114
+ export function nostrEventCollectionManifestMetadata(manifest, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
115
+ return collectionManifestMetadataFromManifest(nostrEventManifestToCollectionManifest(manifest, sourceId));
116
+ }
117
+ export const nostrEventCollectionRootMetadata = nostrEventCollectionManifestMetadata;
118
+ //# sourceMappingURL=eventCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventCollection.js","sourceRoot":"","sources":["../src/eventCollection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { StoredNostrEvent } from './events.js';
2
+ export declare const MANIFEST_BY_ID = "by-id";
3
+ export declare const MANIFEST_BY_AUTHOR_TIME = "by-author-time";
4
+ export declare const MANIFEST_BY_AUTHOR_KIND_TIME = "by-author-kind-time";
5
+ export declare const MANIFEST_BY_KIND_TIME = "by-kind-time";
6
+ export declare const MANIFEST_BY_TIME = "by-time";
7
+ export declare const MANIFEST_BY_TAG = "by-tag";
8
+ export declare const MANIFEST_REPLACEABLE = "replaceable";
9
+ export declare const MANIFEST_PARAMETERIZED_REPLACEABLE = "parameterized-replaceable";
10
+ export declare function padKind(kind: number): string;
11
+ export declare function reverseTimestamp(createdAt: number): string;
12
+ export declare function isReplaceableKind(kind: number): boolean;
13
+ export declare function isParameterizedReplaceableKind(kind: number): boolean;
14
+ export declare function getDTag(event: Pick<StoredNostrEvent, 'tags'>): string | null;
15
+ export declare function compareEvents(a: StoredNostrEvent, b: StoredNostrEvent): number;
16
+ export declare function authorTimeKey(event: StoredNostrEvent): string;
17
+ export declare function authorKindTimeKey(event: StoredNostrEvent): string;
18
+ export declare function kindTimeKey(event: StoredNostrEvent): string;
19
+ export declare function timeKey(event: StoredNostrEvent): string;
20
+ export declare function createdAtFromIndexKey(key: string): number;
21
+ export declare function normalizeTagName(tagName: string): string;
22
+ export declare function normalizeTagValue(tagName: string, tagValue: string): string;
23
+ export declare function tagKeys(event: StoredNostrEvent): string[];
24
+ export declare function tagPrefix(tagName: string, tagValue: string): string;
25
+ export declare function replaceableKey(pubkey: string, kind: number): string;
26
+ export declare function parameterizedReplaceableKey(pubkey: string, kind: number, dTag: string): string;
27
+ export declare function retainLatestReplaceableEvents(events: StoredNostrEvent[]): StoredNostrEvent[];
28
+ //# sourceMappingURL=eventKeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventKeys.d.ts","sourceRoot":"","sources":["../src/eventKeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,uBAAuB,mBAAmB,CAAC;AACxD,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAClE,eAAO,MAAM,qBAAqB,iBAAiB,CAAC;AACpD,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,eAAe,WAAW,CAAC;AACxC,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAClD,eAAO,MAAM,kCAAkC,8BAA8B,CAAC;AAE9E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAQ5E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAM9E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAE7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEjE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAE3D;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAEvD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAczD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAWzD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAwB5F"}
@@ -0,0 +1,113 @@
1
+ const MAX_U64 = (1n << 64n) - 1n;
2
+ export const MANIFEST_BY_ID = 'by-id';
3
+ export const MANIFEST_BY_AUTHOR_TIME = 'by-author-time';
4
+ export const MANIFEST_BY_AUTHOR_KIND_TIME = 'by-author-kind-time';
5
+ export const MANIFEST_BY_KIND_TIME = 'by-kind-time';
6
+ export const MANIFEST_BY_TIME = 'by-time';
7
+ export const MANIFEST_BY_TAG = 'by-tag';
8
+ export const MANIFEST_REPLACEABLE = 'replaceable';
9
+ export const MANIFEST_PARAMETERIZED_REPLACEABLE = 'parameterized-replaceable';
10
+ export function padKind(kind) {
11
+ return kind.toString(16).padStart(8, '0');
12
+ }
13
+ export function reverseTimestamp(createdAt) {
14
+ return (MAX_U64 - BigInt(createdAt)).toString(16).padStart(16, '0');
15
+ }
16
+ export function isReplaceableKind(kind) {
17
+ return kind === 0 || kind === 3 || (kind >= 10_000 && kind < 20_000);
18
+ }
19
+ export function isParameterizedReplaceableKind(kind) {
20
+ return kind >= 30_000 && kind < 40_000;
21
+ }
22
+ export function getDTag(event) {
23
+ for (const tag of event.tags) {
24
+ if (tag[0] === 'd' && typeof tag[1] === 'string' && tag[1].length > 0) {
25
+ return tag[1];
26
+ }
27
+ }
28
+ return null;
29
+ }
30
+ export function compareEvents(a, b) {
31
+ if (a.created_at !== b.created_at) {
32
+ return a.created_at - b.created_at;
33
+ }
34
+ return a.id.localeCompare(b.id);
35
+ }
36
+ export function authorTimeKey(event) {
37
+ return `${event.pubkey}:${reverseTimestamp(event.created_at)}:${event.id}`;
38
+ }
39
+ export function authorKindTimeKey(event) {
40
+ return `${event.pubkey}:${padKind(event.kind)}:${reverseTimestamp(event.created_at)}:${event.id}`;
41
+ }
42
+ export function kindTimeKey(event) {
43
+ return `${padKind(event.kind)}:${reverseTimestamp(event.created_at)}:${event.id}`;
44
+ }
45
+ export function timeKey(event) {
46
+ return `${reverseTimestamp(event.created_at)}:${event.id}`;
47
+ }
48
+ export function createdAtFromIndexKey(key) {
49
+ const parts = key.split(':');
50
+ if (parts.length < 2) {
51
+ throw new Error(`Invalid Nostr index key: ${key}`);
52
+ }
53
+ const reversed = parts[parts.length - 2];
54
+ const reversedTimestamp = BigInt(`0x${reversed}`);
55
+ const createdAt = MAX_U64 - reversedTimestamp;
56
+ if (createdAt > BigInt(Number.MAX_SAFE_INTEGER)) {
57
+ throw new Error(`Created_at exceeds safe integer range in Nostr index key: ${key}`);
58
+ }
59
+ return Number(createdAt);
60
+ }
61
+ export function normalizeTagName(tagName) {
62
+ if (tagName.length === 0) {
63
+ throw new Error('tag name must be non-empty');
64
+ }
65
+ return tagName.toLowerCase();
66
+ }
67
+ export function normalizeTagValue(tagName, tagValue) {
68
+ return tagName === 't' ? tagValue.toLowerCase() : tagValue;
69
+ }
70
+ export function tagKeys(event) {
71
+ return event.tags.flatMap((tag) => {
72
+ const [name, value] = tag;
73
+ if (!name || !value) {
74
+ return [];
75
+ }
76
+ const normalizedName = name.toLowerCase();
77
+ const normalizedValue = normalizeTagValue(normalizedName, value);
78
+ return [`${normalizedName}:${normalizedValue}:${reverseTimestamp(event.created_at)}:${event.id}`];
79
+ });
80
+ }
81
+ export function tagPrefix(tagName, tagValue) {
82
+ const normalizedName = normalizeTagName(tagName);
83
+ return `${normalizedName}:${normalizeTagValue(normalizedName, tagValue)}:`;
84
+ }
85
+ export function replaceableKey(pubkey, kind) {
86
+ return `${pubkey}:${padKind(kind)}`;
87
+ }
88
+ export function parameterizedReplaceableKey(pubkey, kind, dTag) {
89
+ return `${pubkey}:${padKind(kind)}:${dTag}`;
90
+ }
91
+ export function retainLatestReplaceableEvents(events) {
92
+ const retained = new Map();
93
+ const passthrough = [];
94
+ for (const event of events) {
95
+ let slot = null;
96
+ if (isReplaceableKind(event.kind)) {
97
+ slot = `replaceable:${replaceableKey(event.pubkey, event.kind)}`;
98
+ }
99
+ else if (isParameterizedReplaceableKind(event.kind)) {
100
+ slot = `parameterized:${parameterizedReplaceableKey(event.pubkey, event.kind, getDTag(event) ?? '')}`;
101
+ }
102
+ if (!slot) {
103
+ passthrough.push(event);
104
+ continue;
105
+ }
106
+ const existing = retained.get(slot);
107
+ if (!existing || compareEvents(event, existing) > 0) {
108
+ retained.set(slot, event);
109
+ }
110
+ }
111
+ return [...passthrough, ...retained.values()];
112
+ }
113
+ //# sourceMappingURL=eventKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventKeys.js","sourceRoot":"","sources":["../src/eventKeys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { StoredNostrEvent } from './events.js';
2
+ export declare const HEX_64: RegExp;
3
+ export declare const HEX_128: RegExp;
4
+ export declare function assertStringArray(tags: unknown): asserts tags is string[][];
5
+ export declare function validateHex64(value: string, label: string): string;
6
+ export declare function validateHex128(value: string, label: string): string;
7
+ export declare function validateCreatedAt(value: number): number;
8
+ export declare function validateKind(value: number): number;
9
+ export declare function validateContent(value: string): string;
10
+ export declare function validateEventShape(event: StoredNostrEvent): StoredNostrEvent;
11
+ //# sourceMappingURL=eventValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventValidation.d.ts","sourceRoot":"","sources":["../src/eventValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,MAAM,QAAmB,CAAC;AACvC,eAAO,MAAM,OAAO,QAAoB,CAAC;AAEzC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAU3E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAa5E"}
@@ -0,0 +1,56 @@
1
+ export const HEX_64 = /^[0-9a-f]{64}$/;
2
+ export const HEX_128 = /^[0-9a-f]{128}$/;
3
+ export function assertStringArray(tags) {
4
+ if (!Array.isArray(tags)) {
5
+ throw new Error('Nostr event tags must be an array');
6
+ }
7
+ for (const tag of tags) {
8
+ if (!Array.isArray(tag) || tag.some((value) => typeof value !== 'string')) {
9
+ throw new Error('Nostr event tags must be an array of string arrays');
10
+ }
11
+ }
12
+ }
13
+ export function validateHex64(value, label) {
14
+ if (!HEX_64.test(value)) {
15
+ throw new Error(`${label} must be a lowercase 64-character hex string`);
16
+ }
17
+ return value;
18
+ }
19
+ export function validateHex128(value, label) {
20
+ if (!HEX_128.test(value)) {
21
+ throw new Error(`${label} must be a lowercase 128-character hex string`);
22
+ }
23
+ return value;
24
+ }
25
+ export function validateCreatedAt(value) {
26
+ if (!Number.isInteger(value) || value < 0) {
27
+ throw new Error('created_at must be a non-negative integer');
28
+ }
29
+ return value;
30
+ }
31
+ export function validateKind(value) {
32
+ if (!Number.isInteger(value) || value < 0) {
33
+ throw new Error('kind must be a non-negative integer');
34
+ }
35
+ return value;
36
+ }
37
+ export function validateContent(value) {
38
+ if (typeof value !== 'string') {
39
+ throw new Error('content must be a string');
40
+ }
41
+ return value;
42
+ }
43
+ export function validateEventShape(event) {
44
+ const normalized = {
45
+ id: validateHex64(event.id, 'event id'),
46
+ pubkey: validateHex64(event.pubkey, 'pubkey'),
47
+ created_at: validateCreatedAt(event.created_at),
48
+ kind: validateKind(event.kind),
49
+ tags: event.tags,
50
+ content: validateContent(event.content),
51
+ sig: validateHex128(event.sig, 'signature'),
52
+ };
53
+ assertStringArray(normalized.tags);
54
+ return normalized;
55
+ }
56
+ //# sourceMappingURL=eventValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventValidation.js","sourceRoot":"","sources":["../src/eventValidation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAG,gBAAgB,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,KAAa;IACxD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8CAA8C,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,KAAa;IACzD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+CAA+C,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAuB;IACxD,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC;QACvC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC7C,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;QACvC,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC;KAC5C,CAAC;IAEF,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/dist/events.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { CollectionSource, type CollectionManifest } from '@hashtree/collection';
1
2
  import { type CID, type Store } from '@hashtree/core';
2
3
  export interface StoredNostrEvent {
3
4
  id: string;
@@ -24,8 +25,8 @@ export interface ListEventsOptions {
24
25
  until?: number;
25
26
  }
26
27
  export declare class NostrEventStore {
28
+ private readonly store;
27
29
  private readonly tree;
28
- private readonly index;
29
30
  constructor(store: Store);
30
31
  encodeEvent(event: StoredNostrEvent): Uint8Array;
31
32
  decodeEvent(data: Uint8Array): StoredNostrEvent;
@@ -39,28 +40,17 @@ export declare class NostrEventStore {
39
40
  listByTag(root: CID | null, tagName: string, tagValue: string, options?: ListEventsOptions): Promise<StoredNostrEvent[]>;
40
41
  getParameterizedReplaceable(root: CID | null, pubkey: string, kind: number, dTag: string): Promise<StoredNostrEvent | null>;
41
42
  getManifest(root: CID | null): Promise<NostrEventManifest>;
43
+ getCollectionManifest(root: CID | null, sourceId?: string): Promise<CollectionManifest>;
44
+ getCollectionSource(root: CID | null, sourceId?: string): Promise<CollectionSource>;
42
45
  listByKind(root: CID | null, kind: number, options?: ListEventsOptions): Promise<StoredNostrEvent[]>;
43
46
  private collectEvents;
44
47
  private readStoredEvent;
45
- private upsertWinner;
48
+ private emptyManifest;
49
+ private collectionSourceFromManifest;
50
+ private collectionWriterFromManifest;
51
+ private resolveReplaceableDecision;
46
52
  private writeManifest;
47
- private authorTimeKey;
48
- private authorKindTimeKey;
49
- private kindTimeKey;
50
- private timeKey;
51
- private createdAtFromIndexKey;
52
- private tagKeys;
53
- private tagPrefix;
54
- private normalizeTagName;
55
- private normalizeTagValue;
56
- private replaceableKey;
57
- private parameterizedReplaceableKey;
58
53
  private validateEventShape;
59
54
  private validateEvent;
60
- private validateHex64;
61
- private validateHex128;
62
- private validateCreatedAt;
63
- private validateKind;
64
- private validateContent;
65
55
  }
66
56
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js CHANGED
@@ -1,18 +1,10 @@
1
1
  import { decode, encode } from '@msgpack/msgpack';
2
+ import { CollectionSource, serializeCollectionManifestMetadata, } from '@hashtree/collection';
2
3
  import { HashTree, LinkType, toHex, sha256 } from '@hashtree/core';
3
- import { BTree } from '@hashtree/index';
4
+ import { COLLECTION_MANIFEST_METADATA_FILE, collectionManifestToNostrEventManifest, createNostrEventCollectionWriter, DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID, nostrEventCollectionManifestMetadata, nostrEventManifestToCollectionManifest, } from './eventCollection.js';
5
+ import { compareEvents, createdAtFromIndexKey, getDTag, isParameterizedReplaceableKind, isReplaceableKind, MANIFEST_BY_AUTHOR_KIND_TIME, MANIFEST_BY_AUTHOR_TIME, MANIFEST_BY_ID, MANIFEST_BY_KIND_TIME, MANIFEST_BY_TAG, MANIFEST_BY_TIME, MANIFEST_PARAMETERIZED_REPLACEABLE, MANIFEST_REPLACEABLE, parameterizedReplaceableKey, replaceableKey, retainLatestReplaceableEvents, tagPrefix, } from './eventKeys.js';
6
+ import { assertStringArray, validateEventShape, validateHex64, validateKind } from './eventValidation.js';
4
7
  const EVENT_ENVELOPE_VERSION = 1;
5
- const MAX_U64 = (1n << 64n) - 1n;
6
- const HEX_64 = /^[0-9a-f]{64}$/;
7
- const HEX_128 = /^[0-9a-f]{128}$/;
8
- const MANIFEST_BY_ID = 'by-id';
9
- const MANIFEST_BY_AUTHOR_TIME = 'by-author-time';
10
- const MANIFEST_BY_AUTHOR_KIND_TIME = 'by-author-kind-time';
11
- const MANIFEST_BY_KIND_TIME = 'by-kind-time';
12
- const MANIFEST_BY_TIME = 'by-time';
13
- const MANIFEST_BY_TAG = 'by-tag';
14
- const MANIFEST_REPLACEABLE = 'replaceable';
15
- const MANIFEST_PARAMETERIZED_REPLACEABLE = 'parameterized-replaceable';
16
8
  function canonicalEventIdPayload(event) {
17
9
  return JSON.stringify([0, event.pubkey, event.created_at, event.kind, event.tags, event.content]);
18
10
  }
@@ -20,48 +12,12 @@ async function computeCanonicalEventId(event) {
20
12
  const payload = canonicalEventIdPayload(event);
21
13
  return toHex(await sha256(new TextEncoder().encode(payload)));
22
14
  }
23
- function padKind(kind) {
24
- return kind.toString(16).padStart(8, '0');
25
- }
26
- function reverseTimestamp(createdAt) {
27
- return (MAX_U64 - BigInt(createdAt)).toString(16).padStart(16, '0');
28
- }
29
- function isReplaceableKind(kind) {
30
- return kind === 0 || kind === 3 || (kind >= 10_000 && kind < 20_000);
31
- }
32
- function isParameterizedReplaceableKind(kind) {
33
- return kind >= 30_000 && kind < 40_000;
34
- }
35
- function getDTag(event) {
36
- for (const tag of event.tags) {
37
- if (tag[0] === 'd' && typeof tag[1] === 'string' && tag[1].length > 0) {
38
- return tag[1];
39
- }
40
- }
41
- return null;
42
- }
43
- function compareEvents(a, b) {
44
- if (a.created_at !== b.created_at) {
45
- return a.created_at - b.created_at;
46
- }
47
- return a.id.localeCompare(b.id);
48
- }
49
- function assertStringArray(tags) {
50
- if (!Array.isArray(tags)) {
51
- throw new Error('Nostr event tags must be an array');
52
- }
53
- for (const tag of tags) {
54
- if (!Array.isArray(tag) || tag.some(value => typeof value !== 'string')) {
55
- throw new Error('Nostr event tags must be an array of string arrays');
56
- }
57
- }
58
- }
59
15
  export class NostrEventStore {
16
+ store;
60
17
  tree;
61
- index;
62
18
  constructor(store) {
19
+ this.store = store;
63
20
  this.tree = new HashTree({ store });
64
- this.index = new BTree(store);
65
21
  }
66
22
  encodeEvent(event) {
67
23
  const normalized = this.validateEventShape(event);
@@ -108,104 +64,80 @@ export class NostrEventStore {
108
64
  async add(root, event) {
109
65
  const normalized = await this.validateEvent(event);
110
66
  const manifest = await this.getManifest(root);
111
- const eventBytes = this.encodeEvent(normalized);
112
- const { cid: eventCid } = await this.tree.putFile(eventBytes);
113
- const nextManifest = {
114
- byId: await this.index.insertLink(manifest.byId, normalized.id, eventCid),
115
- byAuthorTime: await this.index.insertLink(manifest.byAuthorTime, this.authorTimeKey(normalized), eventCid),
116
- byAuthorKindTime: await this.index.insertLink(manifest.byAuthorKindTime, this.authorKindTimeKey(normalized), eventCid),
117
- byKindTime: await this.index.insertLink(manifest.byKindTime, this.kindTimeKey(normalized), eventCid),
118
- byTime: await this.index.insertLink(manifest.byTime, this.timeKey(normalized), eventCid),
119
- byTag: manifest.byTag,
120
- replaceable: manifest.replaceable,
121
- parameterizedReplaceable: manifest.parameterizedReplaceable,
122
- };
123
- for (const tagKey of this.tagKeys(normalized)) {
124
- nextManifest.byTag = await this.index.insertLink(nextManifest.byTag, tagKey, eventCid);
125
- }
126
- if (isReplaceableKind(normalized.kind)) {
127
- nextManifest.replaceable = await this.upsertWinner(manifest.replaceable, this.replaceableKey(normalized.pubkey, normalized.kind), normalized, eventCid);
128
- }
129
- if (isParameterizedReplaceableKind(normalized.kind)) {
130
- const dTag = getDTag(normalized);
131
- if (dTag) {
132
- nextManifest.parameterizedReplaceable = await this.upsertWinner(manifest.parameterizedReplaceable, this.parameterizedReplaceableKey(normalized.pubkey, normalized.kind, dTag), normalized, eventCid);
67
+ const decision = await this.resolveReplaceableDecision(manifest, normalized);
68
+ if (!decision.accept) {
69
+ if (!root) {
70
+ throw new Error('Rejecting replaceable event without an existing manifest root');
133
71
  }
72
+ return root;
134
73
  }
74
+ const eventBytes = this.encodeEvent(normalized);
75
+ const { cid: eventCid } = await this.tree.putFile(eventBytes);
76
+ const writer = this.collectionWriterFromManifest(manifest);
77
+ await writer.put(normalized, eventCid, {
78
+ previous: decision.replaced?.event,
79
+ });
80
+ const nextManifest = collectionManifestToNostrEventManifest(writer.manifest());
135
81
  const manifestRoot = await this.writeManifest(nextManifest);
136
82
  if (!manifestRoot) {
137
83
  throw new Error('Failed to create Nostr event manifest');
138
84
  }
85
+ if (decision.replaced) {
86
+ await this.store.delete(decision.replaced.cid.hash);
87
+ }
139
88
  return manifestRoot;
140
89
  }
141
90
  async build(root, events) {
142
- const normalized = await Promise.all(events.map(event => this.validateEvent(event)));
91
+ const normalized = retainLatestReplaceableEvents(await Promise.all(events.map((event) => this.validateEvent(event))));
143
92
  normalized.sort(compareEvents);
144
- let current = root;
145
- for (const event of normalized) {
146
- current = await this.add(current, event);
93
+ if (normalized.length === 0) {
94
+ return root;
147
95
  }
148
- return current;
96
+ if (root) {
97
+ let current = root;
98
+ for (const event of normalized) {
99
+ current = await this.add(current, event);
100
+ }
101
+ return current;
102
+ }
103
+ const writer = this.collectionWriterFromManifest(this.emptyManifest());
104
+ await writer.rebuild(await Promise.all(normalized.map(async (event) => {
105
+ const { cid } = await this.tree.putFile(this.encodeEvent(event));
106
+ return { item: event, cid };
107
+ })));
108
+ return await this.writeManifest(collectionManifestToNostrEventManifest(writer.manifest()));
149
109
  }
150
110
  async getById(root, eventId) {
151
- if (!HEX_64.test(eventId)) {
152
- throw new Error('Event id must be a lowercase 64-character hex string');
153
- }
154
- const manifest = await this.getManifest(root);
155
- if (!manifest.byId) {
156
- return null;
157
- }
158
- const eventCid = await this.index.getLink(manifest.byId, eventId);
111
+ const source = this.collectionSourceFromManifest(await this.getManifest(root));
112
+ const eventCid = await source.get(validateHex64(eventId, 'event id'));
159
113
  if (!eventCid) {
160
114
  return null;
161
115
  }
162
116
  return this.readStoredEvent(eventCid);
163
117
  }
164
118
  async listByAuthor(root, pubkey, options = {}) {
165
- const manifest = await this.getManifest(root);
166
- if (!manifest.byAuthorTime) {
167
- return [];
168
- }
169
- return this.collectEvents(manifest.byAuthorTime, `${this.validateHex64(pubkey, 'pubkey')}:`, options);
119
+ return this.collectEvents(this.collectionSourceFromManifest(await this.getManifest(root)), MANIFEST_BY_AUTHOR_TIME, `${validateHex64(pubkey, 'pubkey')}:`, options);
170
120
  }
171
121
  async listByAuthorAndKind(root, pubkey, kind, options = {}) {
172
- const manifest = await this.getManifest(root);
173
- if (!manifest.byAuthorKindTime) {
174
- return [];
175
- }
176
- return this.collectEvents(manifest.byAuthorKindTime, `${this.validateHex64(pubkey, 'pubkey')}:${padKind(this.validateKind(kind))}:`, options);
122
+ return this.collectEvents(this.collectionSourceFromManifest(await this.getManifest(root)), MANIFEST_BY_AUTHOR_KIND_TIME, `${validateHex64(pubkey, 'pubkey')}:${validateKind(kind).toString(16).padStart(8, '0')}:`, options);
177
123
  }
178
124
  async getReplaceable(root, pubkey, kind) {
179
- const manifest = await this.getManifest(root);
180
- if (!manifest.replaceable) {
181
- return null;
182
- }
183
- const eventCid = await this.index.getLink(manifest.replaceable, this.replaceableKey(this.validateHex64(pubkey, 'pubkey'), this.validateKind(kind)));
125
+ const source = this.collectionSourceFromManifest(await this.getManifest(root));
126
+ const eventCid = await source.getIndexLink(MANIFEST_REPLACEABLE, replaceableKey(validateHex64(pubkey, 'pubkey'), validateKind(kind)));
184
127
  return eventCid ? this.readStoredEvent(eventCid) : null;
185
128
  }
186
129
  async listRecent(root, options = {}) {
187
- const manifest = await this.getManifest(root);
188
- if (!manifest.byTime) {
189
- return [];
190
- }
191
- return this.collectEvents(manifest.byTime, '', options);
130
+ return this.collectEvents(this.collectionSourceFromManifest(await this.getManifest(root)), MANIFEST_BY_TIME, '', options);
192
131
  }
193
132
  async listByTag(root, tagName, tagValue, options = {}) {
194
- const manifest = await this.getManifest(root);
195
- if (!manifest.byTag) {
196
- return [];
197
- }
198
- return this.collectEvents(manifest.byTag, this.tagPrefix(tagName, tagValue), options);
133
+ return this.collectEvents(this.collectionSourceFromManifest(await this.getManifest(root)), MANIFEST_BY_TAG, tagPrefix(tagName, tagValue), options);
199
134
  }
200
135
  async getParameterizedReplaceable(root, pubkey, kind, dTag) {
201
- const manifest = await this.getManifest(root);
202
- if (!manifest.parameterizedReplaceable) {
203
- return null;
204
- }
205
136
  if (dTag.length === 0) {
206
137
  throw new Error('Parameterized replaceable events require a non-empty d tag');
207
138
  }
208
- const eventCid = await this.index.getLink(manifest.parameterizedReplaceable, this.parameterizedReplaceableKey(this.validateHex64(pubkey, 'pubkey'), this.validateKind(kind), dTag));
139
+ const source = this.collectionSourceFromManifest(await this.getManifest(root));
140
+ const eventCid = await source.getIndexLink(MANIFEST_PARAMETERIZED_REPLACEABLE, parameterizedReplaceableKey(validateHex64(pubkey, 'pubkey'), validateKind(kind), dTag));
209
141
  return eventCid ? this.readStoredEvent(eventCid) : null;
210
142
  }
211
143
  async getManifest(root) {
@@ -234,20 +166,37 @@ export class NostrEventStore {
234
166
  parameterizedReplaceable: getCid(MANIFEST_PARAMETERIZED_REPLACEABLE),
235
167
  };
236
168
  }
169
+ async getCollectionManifest(root, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
170
+ const manifest = nostrEventManifestToCollectionManifest(await this.getManifest(root), sourceId);
171
+ const source = new CollectionSource(this.store, manifest);
172
+ return {
173
+ ...manifest,
174
+ itemCount: await source.count(),
175
+ };
176
+ }
177
+ async getCollectionSource(root, sourceId = DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID) {
178
+ return new CollectionSource(this.store, await this.getCollectionManifest(root, sourceId));
179
+ }
237
180
  async listByKind(root, kind, options = {}) {
238
- const manifest = await this.getManifest(root);
239
- if (!manifest.byKindTime) {
240
- return [];
241
- }
242
- return this.collectEvents(manifest.byKindTime, `${padKind(this.validateKind(kind))}:`, options);
181
+ return this.collectEvents(this.collectionSourceFromManifest(await this.getManifest(root)), MANIFEST_BY_KIND_TIME, `${validateKind(kind).toString(16).padStart(8, '0')}:`, options);
243
182
  }
244
- async collectEvents(root, prefix, options = {}) {
183
+ async collectEvents(source, indexName, prefix, options = {}) {
245
184
  const events = [];
246
- const entries = prefix.length === 0
247
- ? this.index.linksEntries(root)
248
- : this.index.prefixLinks(root, prefix);
249
- for await (const [key, eventCid] of entries) {
250
- const createdAt = this.createdAtFromIndexKey(key);
185
+ const entries = indexName === MANIFEST_BY_ID
186
+ ? await source.queryById({
187
+ prefix,
188
+ limit: options.limit !== undefined && options.since === undefined && options.until === undefined
189
+ ? options.limit
190
+ : undefined,
191
+ })
192
+ : await source.queryIndex(indexName, {
193
+ prefix,
194
+ limit: options.limit !== undefined && options.since === undefined && options.until === undefined
195
+ ? options.limit
196
+ : undefined,
197
+ });
198
+ for (const { key, cid: eventCid } of entries) {
199
+ const createdAt = createdAtFromIndexKey(key);
251
200
  if (options.until !== undefined && createdAt > options.until) {
252
201
  continue;
253
202
  }
@@ -268,19 +217,67 @@ export class NostrEventStore {
268
217
  }
269
218
  return this.decodeEvent(data);
270
219
  }
271
- async upsertWinner(root, key, event, eventCid) {
272
- const existingCid = root ? await this.index.getLink(root, key) : null;
220
+ emptyManifest() {
221
+ return {
222
+ byId: null,
223
+ byAuthorTime: null,
224
+ byAuthorKindTime: null,
225
+ byKindTime: null,
226
+ byTime: null,
227
+ byTag: null,
228
+ replaceable: null,
229
+ parameterizedReplaceable: null,
230
+ };
231
+ }
232
+ collectionSourceFromManifest(manifest) {
233
+ return new CollectionSource(this.store, nostrEventManifestToCollectionManifest(manifest));
234
+ }
235
+ collectionWriterFromManifest(manifest) {
236
+ return createNostrEventCollectionWriter(this.store, manifest);
237
+ }
238
+ async resolveReplaceableDecision(manifest, event) {
239
+ const slot = isReplaceableKind(event.kind)
240
+ ? {
241
+ indexName: MANIFEST_REPLACEABLE,
242
+ key: replaceableKey(event.pubkey, event.kind),
243
+ }
244
+ : isParameterizedReplaceableKind(event.kind)
245
+ ? {
246
+ indexName: MANIFEST_PARAMETERIZED_REPLACEABLE,
247
+ key: parameterizedReplaceableKey(event.pubkey, event.kind, getDTag(event) ?? ''),
248
+ }
249
+ : null;
250
+ if (!slot) {
251
+ return { accept: true };
252
+ }
253
+ const source = this.collectionSourceFromManifest(manifest);
254
+ const existingCid = await source.getIndexLink(slot.indexName, slot.key);
273
255
  if (!existingCid) {
274
- return this.index.insertLink(root, key, eventCid);
256
+ return { accept: true };
257
+ }
258
+ try {
259
+ const existingEvent = await this.readStoredEvent(existingCid);
260
+ if (compareEvents(event, existingEvent) > 0) {
261
+ return {
262
+ accept: true,
263
+ replaced: {
264
+ event: existingEvent,
265
+ cid: existingCid,
266
+ },
267
+ };
268
+ }
269
+ return { accept: false };
275
270
  }
276
- const existingEvent = await this.readStoredEvent(existingCid);
277
- if (compareEvents(event, existingEvent) > 0) {
278
- return this.index.insertLink(root, key, eventCid);
271
+ catch (error) {
272
+ if (error instanceof Error && error.message === 'Stored Nostr event blob is missing') {
273
+ return { accept: true };
274
+ }
275
+ throw error;
279
276
  }
280
- return root;
281
277
  }
282
278
  async writeManifest(manifest) {
283
279
  const entries = [];
280
+ const rootMetadata = nostrEventCollectionManifestMetadata(manifest);
284
281
  if (manifest.byId) {
285
282
  entries.push({ name: MANIFEST_BY_ID, cid: manifest.byId, size: 0, type: LinkType.Dir });
286
283
  }
@@ -310,79 +307,24 @@ export class NostrEventStore {
310
307
  type: LinkType.Dir,
311
308
  });
312
309
  }
310
+ if (rootMetadata) {
311
+ const metadataBytes = serializeCollectionManifestMetadata(rootMetadata);
312
+ const { cid, size } = await this.tree.putFile(metadataBytes);
313
+ entries.push({
314
+ name: COLLECTION_MANIFEST_METADATA_FILE,
315
+ cid,
316
+ size,
317
+ type: LinkType.File,
318
+ });
319
+ }
313
320
  if (entries.length === 0) {
314
321
  return null;
315
322
  }
316
323
  const { cid } = await this.tree.putDirectory(entries);
317
324
  return cid;
318
325
  }
319
- authorTimeKey(event) {
320
- return `${event.pubkey}:${reverseTimestamp(event.created_at)}:${event.id}`;
321
- }
322
- authorKindTimeKey(event) {
323
- return `${event.pubkey}:${padKind(event.kind)}:${reverseTimestamp(event.created_at)}:${event.id}`;
324
- }
325
- kindTimeKey(event) {
326
- return `${padKind(event.kind)}:${reverseTimestamp(event.created_at)}:${event.id}`;
327
- }
328
- timeKey(event) {
329
- return `${reverseTimestamp(event.created_at)}:${event.id}`;
330
- }
331
- createdAtFromIndexKey(key) {
332
- const parts = key.split(':');
333
- if (parts.length < 2) {
334
- throw new Error(`Invalid Nostr index key: ${key}`);
335
- }
336
- const reversed = parts[parts.length - 2];
337
- const reversedTimestamp = BigInt(`0x${reversed}`);
338
- const createdAt = MAX_U64 - reversedTimestamp;
339
- if (createdAt > BigInt(Number.MAX_SAFE_INTEGER)) {
340
- throw new Error(`Created_at exceeds safe integer range in Nostr index key: ${key}`);
341
- }
342
- return Number(createdAt);
343
- }
344
- tagKeys(event) {
345
- return event.tags.flatMap((tag) => {
346
- const [name, value] = tag;
347
- if (!name || !value) {
348
- return [];
349
- }
350
- const normalizedName = name.toLowerCase();
351
- const normalizedValue = this.normalizeTagValue(normalizedName, value);
352
- return [`${normalizedName}:${normalizedValue}:${reverseTimestamp(event.created_at)}:${event.id}`];
353
- });
354
- }
355
- tagPrefix(tagName, tagValue) {
356
- const normalizedName = this.normalizeTagName(tagName);
357
- return `${normalizedName}:${this.normalizeTagValue(normalizedName, tagValue)}:`;
358
- }
359
- normalizeTagName(tagName) {
360
- if (tagName.length === 0) {
361
- throw new Error('tag name must be non-empty');
362
- }
363
- return tagName.toLowerCase();
364
- }
365
- normalizeTagValue(tagName, tagValue) {
366
- return tagName === 't' ? tagValue.toLowerCase() : tagValue;
367
- }
368
- replaceableKey(pubkey, kind) {
369
- return `${pubkey}:${padKind(kind)}`;
370
- }
371
- parameterizedReplaceableKey(pubkey, kind, dTag) {
372
- return `${pubkey}:${padKind(kind)}:${dTag}`;
373
- }
374
326
  validateEventShape(event) {
375
- const normalized = {
376
- id: this.validateHex64(event.id, 'event id'),
377
- pubkey: this.validateHex64(event.pubkey, 'pubkey'),
378
- created_at: this.validateCreatedAt(event.created_at),
379
- kind: this.validateKind(event.kind),
380
- tags: event.tags,
381
- content: this.validateContent(event.content),
382
- sig: this.validateHex128(event.sig, 'signature'),
383
- };
384
- assertStringArray(normalized.tags);
385
- return normalized;
327
+ return validateEventShape(event);
386
328
  }
387
329
  async validateEvent(event) {
388
330
  const normalized = this.validateEventShape(event);
@@ -392,35 +334,5 @@ export class NostrEventStore {
392
334
  }
393
335
  return normalized;
394
336
  }
395
- validateHex64(value, label) {
396
- if (!HEX_64.test(value)) {
397
- throw new Error(`${label} must be a lowercase 64-character hex string`);
398
- }
399
- return value;
400
- }
401
- validateHex128(value, label) {
402
- if (!HEX_128.test(value)) {
403
- throw new Error(`${label} must be a lowercase 128-character hex string`);
404
- }
405
- return value;
406
- }
407
- validateCreatedAt(value) {
408
- if (!Number.isInteger(value) || value < 0) {
409
- throw new Error('created_at must be a non-negative integer');
410
- }
411
- return value;
412
- }
413
- validateKind(value) {
414
- if (!Number.isInteger(value) || value < 0) {
415
- throw new Error('kind must be a non-negative integer');
416
- }
417
- return value;
418
- }
419
- validateContent(value) {
420
- if (typeof value !== 'string') {
421
- throw new Error('content must be a string');
422
- }
423
- return value;
424
- }
425
337
  }
426
338
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,9 @@
6
6
  export { WebRTCStore, DEFAULT_RELAYS, Peer, PeerSelector, PeerId, generateUuid, MAX_HTL, MSG_TYPE_REQUEST, MSG_TYPE_RESPONSE, FRAGMENT_SIZE, encodeRequest, encodeResponse, parseMessage, createRequest, createResponse, createFragmentResponse, hashToKey, verifyHash, generatePeerHTLConfig, decrementHTLWithPolicy, decrementHTL, shouldForwardHTL, peerPrincipal, normalizeDispatchConfig, buildHedgedWavePlan, syncSelectorPeers, shouldForward, type SignalingMessage, type WebRTCStoreConfig, type PeerStatus, type WebRTCStoreEvent, type WebRTCStoreEventHandler, type EventSigner, type EventEncrypter, type EventDecrypter, type GiftWrapper, type GiftUnwrapper, type SignedEvent, type PeerPool, type PeerClassifier, type PoolConfig, type SelectionStrategy, type RequestDispatchConfig, type PersistedPeerMetadata, type PeerMetadataSnapshot, type MeshStats, type WebRTCStats, type BandwidthSample, type DataRequest, type DataResponse, type PeerHTLConfig, type PendingRequest, } from './webrtc/index.js';
7
7
  export { createNostrRefResolver, createNostrRefResolver as createNostrRootResolver, type NostrRefResolverConfig, type NostrRefResolverConfig as NostrRootResolverConfig, type NostrEvent, type NostrFilter, type Nip19Like, type VisibilityCallbacks, type ParsedTreeVisibility, } from './resolver/index.js';
8
8
  export { NostrEventStore, type StoredNostrEvent, type NostrEventManifest, type ListEventsOptions, } from './events.js';
9
+ export { COLLECTION_MANIFEST_METADATA_FILE, DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID, NOSTR_EVENT_ITEM_FORMAT, NOSTR_EVENT_PROJECTION_FORMAT, collectionManifestToNostrEventManifest, createNostrEventCollectionDefinition, createNostrEventCollectionSource, createNostrEventCollectionWriter, nostrEventCollectionManifestMetadata, nostrEventCollectionRootMetadata, nostrEventManifestToCollectionManifest, } from './eventCollection.js';
10
+ export { MANIFEST_BY_AUTHOR_KIND_TIME, MANIFEST_BY_AUTHOR_TIME, MANIFEST_BY_ID, MANIFEST_BY_KIND_TIME, MANIFEST_BY_TAG, MANIFEST_BY_TIME, MANIFEST_PARAMETERIZED_REPLACEABLE, MANIFEST_REPLACEABLE, parameterizedReplaceableKey, replaceableKey, tagPrefix, } from './eventKeys.js';
9
11
  export { encodeSignedNostrEventJson, decodeSignedNostrEventJson, storeSignedNostrEventSnapshot, readSignedNostrEventSnapshot, parseHashtreeRootEvent, type ParsedHashtreeRootEvent, type SnapshotTreeLike, type SnapshotTarget, } from './snapshot.js';
10
12
  export { storeTreeEventSnapshot, readTreeEventSnapshot, fetchLatestTreeEventSnapshot, watchLatestTreeEventSnapshot, compareTreeEventSnapshots, isNewerTreeEventSnapshot, snapshotMatchesRootCid, resolveSnapshotRootCid, type TreeEventSnapshotInfo, type TreeEventSnapshotQuery, type FetchLatestTreeEventSnapshotConfig, type WatchTreeEventSnapshotsConfig, } from './treeEventSnapshots.js';
13
+ export { buildTreeEventSnapshotPermalink, parseTreeEventSnapshotPermalink, normalizeTreeEventSnapshotLinkKey, type TreeEventSnapshotPermalink, type BuildTreeEventSnapshotPermalinkOptions, } from './treeEventSnapshotPermalinks.js';
11
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EAEtB,sBAAsB,IAAI,uBAAuB,EACjD,KAAK,sBAAsB,EAE3B,KAAK,sBAAsB,IAAI,uBAAuB,EACtD,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,GACnC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EAEb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EAEtB,sBAAsB,IAAI,uBAAuB,EACjD,KAAK,sBAAsB,EAE3B,KAAK,sBAAsB,IAAI,uBAAuB,EACtD,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iCAAiC,EACjC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,sCAAsC,EACtC,oCAAoC,EACpC,gCAAgC,EAChC,gCAAgC,EAChC,oCAAoC,EACpC,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kCAAkC,EAClC,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,GACnC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,iCAAiC,EACjC,KAAK,0BAA0B,EAC/B,KAAK,sCAAsC,GAC5C,MAAM,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,9 @@ export { createNostrRefResolver,
13
13
  createNostrRefResolver as createNostrRootResolver, } from './resolver/index.js';
14
14
  // Event storage and indexing
15
15
  export { NostrEventStore, } from './events.js';
16
+ export { COLLECTION_MANIFEST_METADATA_FILE, DEFAULT_NOSTR_EVENT_COLLECTION_SOURCE_ID, NOSTR_EVENT_ITEM_FORMAT, NOSTR_EVENT_PROJECTION_FORMAT, collectionManifestToNostrEventManifest, createNostrEventCollectionDefinition, createNostrEventCollectionSource, createNostrEventCollectionWriter, nostrEventCollectionManifestMetadata, nostrEventCollectionRootMetadata, nostrEventManifestToCollectionManifest, } from './eventCollection.js';
17
+ export { MANIFEST_BY_AUTHOR_KIND_TIME, MANIFEST_BY_AUTHOR_TIME, MANIFEST_BY_ID, MANIFEST_BY_KIND_TIME, MANIFEST_BY_TAG, MANIFEST_BY_TIME, MANIFEST_PARAMETERIZED_REPLACEABLE, MANIFEST_REPLACEABLE, parameterizedReplaceableKey, replaceableKey, tagPrefix, } from './eventKeys.js';
16
18
  export { encodeSignedNostrEventJson, decodeSignedNostrEventJson, storeSignedNostrEventSnapshot, readSignedNostrEventSnapshot, parseHashtreeRootEvent, } from './snapshot.js';
17
19
  export { storeTreeEventSnapshot, readTreeEventSnapshot, fetchLatestTreeEventSnapshot, watchLatestTreeEventSnapshot, compareTreeEventSnapshots, isNewerTreeEventSnapshot, snapshotMatchesRootCid, resolveSnapshotRootCid, } from './treeEventSnapshots.js';
20
+ export { buildTreeEventSnapshotPermalink, parseTreeEventSnapshotPermalink, normalizeTreeEventSnapshotLinkKey, } from './treeEventSnapshotPermalinks.js';
18
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,aAAa;AACb,qBAAqB;AACrB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GA0Bd,MAAM,mBAAmB,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EACL,sBAAsB;AACtB,eAAe;AACf,sBAAsB,IAAI,uBAAuB,GASlD,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,GAIvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GAKvB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,OAAO,EACL,WAAW,EACX,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,aAAa;AACb,qBAAqB;AACrB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GA0Bd,MAAM,mBAAmB,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EACL,sBAAsB;AACtB,eAAe;AACf,sBAAsB,IAAI,uBAAuB,GASlD,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO,EACL,eAAe,GAIhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,iCAAiC,EACjC,wCAAwC,EACxC,uBAAuB,EACvB,6BAA6B,EAC7B,sCAAsC,EACtC,oCAAoC,EACpC,gCAAgC,EAChC,gCAAgC,EAChC,oCAAoC,EACpC,gCAAgC,EAChC,sCAAsC,GACvC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,kCAAkC,EAClC,oBAAoB,EACpB,2BAA2B,EAC3B,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,sBAAsB,GAIvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GAKvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,iCAAiC,GAGlC,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface TreeEventSnapshotPermalink {
2
+ snapshotNhash: string;
3
+ path: string[];
4
+ linkKey?: string;
5
+ }
6
+ export interface BuildTreeEventSnapshotPermalinkOptions {
7
+ prefix?: string;
8
+ }
9
+ export declare function normalizeTreeEventSnapshotLinkKey(value?: string | null): string | null;
10
+ export declare function buildTreeEventSnapshotPermalink(value: TreeEventSnapshotPermalink, options?: BuildTreeEventSnapshotPermalinkOptions): string;
11
+ export declare function parseTreeEventSnapshotPermalink(input: string | URL): TreeEventSnapshotPermalink | null;
12
+ //# sourceMappingURL=treeEventSnapshotPermalinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeEventSnapshotPermalinks.d.ts","sourceRoot":"","sources":["../src/treeEventSnapshotPermalinks.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sCAAsC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+CD,wBAAgB,iCAAiC,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAStF;AAsBD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,0BAA0B,EACjC,OAAO,GAAE,sCAA2C,GACnD,MAAM,CAUR;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,0BAA0B,GAAG,IAAI,CA2CtG"}
@@ -0,0 +1,120 @@
1
+ import { nhashDecode } from '@hashtree/core';
2
+ const NHASH_PATTERN = /^nhash1[a-z0-9]+$/;
3
+ const LINK_KEY_PATTERN = /^[a-f0-9]{64}$/i;
4
+ function safeDecode(value) {
5
+ try {
6
+ return decodeURIComponent(value);
7
+ }
8
+ catch {
9
+ return value;
10
+ }
11
+ }
12
+ function extractPermalinkCandidate(input) {
13
+ const raw = `${input instanceof URL ? input.toString() : input}`.trim();
14
+ if (!raw) {
15
+ return '';
16
+ }
17
+ try {
18
+ const parsed = input instanceof URL ? input : new URL(raw);
19
+ if (parsed.hash.startsWith('#/')) {
20
+ return parsed.hash.slice(1);
21
+ }
22
+ return `/${parsed.host}${parsed.pathname}${parsed.search}`;
23
+ }
24
+ catch {
25
+ if (raw.startsWith('#/')) {
26
+ return raw.slice(1);
27
+ }
28
+ return raw;
29
+ }
30
+ }
31
+ function normalizeSnapshotNhash(value) {
32
+ const trimmed = value.trim();
33
+ if (!NHASH_PATTERN.test(trimmed)) {
34
+ return null;
35
+ }
36
+ try {
37
+ const decoded = nhashDecode(trimmed);
38
+ if (decoded.key) {
39
+ return null;
40
+ }
41
+ return trimmed;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ export function normalizeTreeEventSnapshotLinkKey(value) {
48
+ const trimmed = value?.trim();
49
+ if (!trimmed) {
50
+ return null;
51
+ }
52
+ if (!LINK_KEY_PATTERN.test(trimmed)) {
53
+ return null;
54
+ }
55
+ return trimmed.toLowerCase();
56
+ }
57
+ function normalizeTreeEventSnapshotPermalink(value) {
58
+ const snapshotNhash = normalizeSnapshotNhash(value.snapshotNhash);
59
+ if (!snapshotNhash) {
60
+ throw new Error(`Invalid tree event snapshot nhash: ${value.snapshotNhash}`);
61
+ }
62
+ const linkKey = normalizeTreeEventSnapshotLinkKey(value.linkKey);
63
+ if (value.linkKey?.trim() && !linkKey) {
64
+ throw new Error(`Invalid tree event snapshot link key: ${value.linkKey}`);
65
+ }
66
+ return {
67
+ snapshotNhash,
68
+ path: value.path.filter(Boolean),
69
+ ...(linkKey ? { linkKey } : {}),
70
+ };
71
+ }
72
+ export function buildTreeEventSnapshotPermalink(value, options = {}) {
73
+ const normalized = normalizeTreeEventSnapshotPermalink(value);
74
+ const encodedPath = normalized.path.map((part) => encodeURIComponent(part)).join('/');
75
+ const query = new URLSearchParams();
76
+ query.set('snapshot', '1');
77
+ if (normalized.linkKey) {
78
+ query.set('k', normalized.linkKey);
79
+ }
80
+ const prefix = options.prefix ?? '';
81
+ return `${prefix}${normalized.snapshotNhash}${encodedPath ? `/${encodedPath}` : ''}?${query.toString()}`;
82
+ }
83
+ export function parseTreeEventSnapshotPermalink(input) {
84
+ const candidate = extractPermalinkCandidate(input);
85
+ if (!candidate) {
86
+ return null;
87
+ }
88
+ const [pathPart, queryPart = ''] = candidate.split('?', 2);
89
+ const parts = pathPart
90
+ .replace(/^\/+/, '')
91
+ .split('/')
92
+ .filter(Boolean)
93
+ .map(safeDecode);
94
+ if (parts[0] === 'nhash') {
95
+ parts.shift();
96
+ }
97
+ const snapshotNhash = parts.shift();
98
+ if (!snapshotNhash) {
99
+ return null;
100
+ }
101
+ const normalizedSnapshotNhash = normalizeSnapshotNhash(snapshotNhash);
102
+ if (!normalizedSnapshotNhash) {
103
+ return null;
104
+ }
105
+ const params = new URLSearchParams(queryPart);
106
+ if (params.get('snapshot')?.trim() !== '1') {
107
+ return null;
108
+ }
109
+ const rawLinkKey = params.get('k');
110
+ const linkKey = normalizeTreeEventSnapshotLinkKey(rawLinkKey);
111
+ if (rawLinkKey?.trim() && !linkKey) {
112
+ return null;
113
+ }
114
+ return {
115
+ snapshotNhash: normalizedSnapshotNhash,
116
+ path: parts,
117
+ ...(linkKey ? { linkKey } : {}),
118
+ };
119
+ }
120
+ //# sourceMappingURL=treeEventSnapshotPermalinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treeEventSnapshotPermalinks.js","sourceRoot":"","sources":["../src/treeEventSnapshotPermalinks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hashtree/nostr",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Nostr integration for hashtree - WebRTC P2P store and ref resolver",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,7 +35,8 @@
35
35
  "@msgpack/msgpack": "^3.1.2",
36
36
  "nostr-tools": "^2.18.2",
37
37
  "@hashtree/core": "0.1.3",
38
- "@hashtree/index": "0.1.3"
38
+ "@hashtree/index": "0.1.3",
39
+ "@hashtree/collection": "0.1.1"
39
40
  },
40
41
  "devDependencies": {
41
42
  "@nostr-dev-kit/ndk": "^2.18.1",