@nostrify/nostrify 0.46.4
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/.turbo/turbo-build.log +5 -0
- package/BunkerURI.test.ts +28 -0
- package/BunkerURI.ts +58 -0
- package/CHANGELOG.md +562 -0
- package/LICENSE +21 -0
- package/NBrowserSigner.test.ts +170 -0
- package/NBrowserSigner.ts +100 -0
- package/NCache.bench.ts +81 -0
- package/NCache.test.ts +22 -0
- package/NCache.ts +73 -0
- package/NConnectSigner.test.ts +102 -0
- package/NConnectSigner.ts +189 -0
- package/NIP05.test.ts +67 -0
- package/NIP05.ts +52 -0
- package/NIP50.test.ts +58 -0
- package/NIP50.ts +24 -0
- package/NIP98.test.ts +181 -0
- package/NIP98.ts +97 -0
- package/NKinds.test.ts +42 -0
- package/NKinds.ts +26 -0
- package/NPool.test.ts +117 -0
- package/NPool.ts +224 -0
- package/NRelay1.test.ts +174 -0
- package/NRelay1.ts +440 -0
- package/NSchema.test.ts +94 -0
- package/NSchema.ts +255 -0
- package/NSecSigner.bench.ts +55 -0
- package/NSecSigner.test.ts +26 -0
- package/NSecSigner.ts +60 -0
- package/NSet.bench.ts +10 -0
- package/NSet.test.ts +92 -0
- package/NSet.ts +203 -0
- package/README.md +314 -0
- package/RelayError.test.ts +23 -0
- package/RelayError.ts +22 -0
- package/dist/BunkerURI.d.ts +23 -0
- package/dist/BunkerURI.d.ts.map +1 -0
- package/dist/BunkerURI.js +52 -0
- package/dist/BunkerURI.js.map +1 -0
- package/dist/NBrowserSigner.d.ts +27 -0
- package/dist/NBrowserSigner.d.ts.map +1 -0
- package/dist/NBrowserSigner.js +96 -0
- package/dist/NBrowserSigner.js.map +1 -0
- package/dist/NCache.d.ts +34 -0
- package/dist/NCache.d.ts.map +1 -0
- package/dist/NCache.js +63 -0
- package/dist/NCache.js.map +1 -0
- package/dist/NConnectSigner.d.ts +50 -0
- package/dist/NConnectSigner.d.ts.map +1 -0
- package/dist/NConnectSigner.js +130 -0
- package/dist/NConnectSigner.js.map +1 -0
- package/dist/NIP05.d.ts +15 -0
- package/dist/NIP05.d.ts.map +1 -0
- package/dist/NIP05.js +40 -0
- package/dist/NIP05.js.map +1 -0
- package/dist/NIP50.d.ts +10 -0
- package/dist/NIP50.d.ts.map +1 -0
- package/dist/NIP50.js +26 -0
- package/dist/NIP50.js.map +1 -0
- package/dist/NIP98.d.ts +15 -0
- package/dist/NIP98.d.ts.map +1 -0
- package/dist/NIP98.js +71 -0
- package/dist/NIP98.js.map +1 -0
- package/dist/NKinds.d.ts +13 -0
- package/dist/NKinds.d.ts.map +1 -0
- package/dist/NKinds.js +27 -0
- package/dist/NKinds.js.map +1 -0
- package/dist/NPool.d.ts +91 -0
- package/dist/NPool.d.ts.map +1 -0
- package/dist/NPool.js +185 -0
- package/dist/NPool.js.map +1 -0
- package/dist/NRelay1.d.ts +80 -0
- package/dist/NRelay1.d.ts.map +1 -0
- package/dist/NRelay1.js +336 -0
- package/dist/NRelay1.js.map +1 -0
- package/dist/NSchema.d.ts +73 -0
- package/dist/NSchema.d.ts.map +1 -0
- package/dist/NSchema.js +215 -0
- package/dist/NSchema.js.map +1 -0
- package/dist/NSecSigner.d.ts +29 -0
- package/dist/NSecSigner.d.ts.map +1 -0
- package/dist/NSecSigner.js +52 -0
- package/dist/NSecSigner.js.map +1 -0
- package/dist/NSet.d.ts +76 -0
- package/dist/NSet.d.ts.map +1 -0
- package/dist/NSet.js +174 -0
- package/dist/NSet.js.map +1 -0
- package/dist/RelayError.d.ts +10 -0
- package/dist/RelayError.d.ts.map +1 -0
- package/dist/RelayError.js +23 -0
- package/dist/RelayError.js.map +1 -0
- package/dist/ln/LNURL.d.ts +55 -0
- package/dist/ln/LNURL.d.ts.map +1 -0
- package/dist/ln/LNURL.js +105 -0
- package/dist/ln/LNURL.js.map +1 -0
- package/dist/ln/mod.d.ts +4 -0
- package/dist/ln/mod.d.ts.map +1 -0
- package/dist/ln/mod.js +6 -0
- package/dist/ln/mod.js.map +1 -0
- package/dist/ln/types/LNURLCallback.d.ts +8 -0
- package/dist/ln/types/LNURLCallback.d.ts.map +1 -0
- package/dist/ln/types/LNURLCallback.js +3 -0
- package/dist/ln/types/LNURLCallback.js.map +1 -0
- package/dist/ln/types/LNURLDetails.d.ts +20 -0
- package/dist/ln/types/LNURLDetails.d.ts.map +1 -0
- package/dist/ln/types/LNURLDetails.js +3 -0
- package/dist/ln/types/LNURLDetails.js.map +1 -0
- package/dist/mod.d.ts +16 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +32 -0
- package/dist/mod.js.map +1 -0
- package/dist/test/ErrorRelay.d.ts +21 -0
- package/dist/test/ErrorRelay.d.ts.map +1 -0
- package/dist/test/ErrorRelay.js +26 -0
- package/dist/test/ErrorRelay.js.map +1 -0
- package/dist/test/MockRelay.d.ts +20 -0
- package/dist/test/MockRelay.d.ts.map +1 -0
- package/dist/test/MockRelay.js +66 -0
- package/dist/test/MockRelay.js.map +1 -0
- package/dist/test/TestRelayServer.d.ts +25 -0
- package/dist/test/TestRelayServer.d.ts.map +1 -0
- package/dist/test/TestRelayServer.js +134 -0
- package/dist/test/TestRelayServer.js.map +1 -0
- package/dist/test/mod.d.ts +8 -0
- package/dist/test/mod.d.ts.map +1 -0
- package/dist/test/mod.js +28 -0
- package/dist/test/mod.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/uploaders/BlossomUploader.d.ts +26 -0
- package/dist/uploaders/BlossomUploader.d.ts.map +1 -0
- package/dist/uploaders/BlossomUploader.js +71 -0
- package/dist/uploaders/BlossomUploader.js.map +1 -0
- package/dist/uploaders/NostrBuildUploader.d.ts +24 -0
- package/dist/uploaders/NostrBuildUploader.d.ts.map +1 -0
- package/dist/uploaders/NostrBuildUploader.js +67 -0
- package/dist/uploaders/NostrBuildUploader.js.map +1 -0
- package/dist/uploaders/mod.d.ts +3 -0
- package/dist/uploaders/mod.d.ts.map +1 -0
- package/dist/uploaders/mod.js +8 -0
- package/dist/uploaders/mod.js.map +1 -0
- package/dist/utils/CircularSet.d.ts +13 -0
- package/dist/utils/CircularSet.d.ts.map +1 -0
- package/dist/utils/CircularSet.js +35 -0
- package/dist/utils/CircularSet.js.map +1 -0
- package/dist/utils/Machina.d.ts +36 -0
- package/dist/utils/Machina.d.ts.map +1 -0
- package/dist/utils/Machina.js +66 -0
- package/dist/utils/Machina.js.map +1 -0
- package/dist/utils/N64.d.ts +9 -0
- package/dist/utils/N64.d.ts.map +1 -0
- package/dist/utils/N64.js +23 -0
- package/dist/utils/N64.js.map +1 -0
- package/dist/utils/mod.d.ts +3 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/mod.js +8 -0
- package/dist/utils/mod.js.map +1 -0
- package/ln/LNURL.test.ts +87 -0
- package/ln/LNURL.ts +146 -0
- package/ln/mod.ts +4 -0
- package/ln/types/LNURLCallback.ts +7 -0
- package/ln/types/LNURLDetails.ts +19 -0
- package/mod.ts +16 -0
- package/package.json +23 -0
- package/test/ErrorRelay.test.ts +19 -0
- package/test/ErrorRelay.ts +40 -0
- package/test/MockRelay.test.ts +20 -0
- package/test/MockRelay.ts +92 -0
- package/test/TestRelayServer.ts +156 -0
- package/test/mod.ts +28 -0
- package/tsconfig.json +14 -0
- package/uploaders/BlossomUploader.test.ts +26 -0
- package/uploaders/BlossomUploader.ts +98 -0
- package/uploaders/NostrBuildUploader.test.ts +22 -0
- package/uploaders/NostrBuildUploader.ts +89 -0
- package/uploaders/mod.ts +2 -0
- package/utils/CircularSet.test.ts +15 -0
- package/utils/CircularSet.ts +34 -0
- package/utils/Machina.test.ts +91 -0
- package/utils/Machina.ts +66 -0
- package/utils/N64.test.ts +27 -0
- package/utils/N64.ts +23 -0
- package/utils/mod.ts +2 -0
package/utils/Machina.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Infinite async generator. Iterates messages pushed to it until closed.
|
|
3
|
+
* Only one consumer is expected to use a Machina instance at a time.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* // Create the Machina instance
|
|
8
|
+
* const machina = new Machina<string>();
|
|
9
|
+
*
|
|
10
|
+
* // Async generator loop
|
|
11
|
+
* async function getMessages() {
|
|
12
|
+
* for await (const msg of machina.stream()) {
|
|
13
|
+
* console.log(msg);
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* // Start the generator
|
|
18
|
+
* getMessages();
|
|
19
|
+
*
|
|
20
|
+
* // Push messages to it
|
|
21
|
+
* machina.push('hello!');
|
|
22
|
+
* machina.push('whats up?');
|
|
23
|
+
* machina.push('greetings');
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export class Machina<T> implements AsyncIterable<T> {
|
|
27
|
+
#queue: T[] = [];
|
|
28
|
+
#resolve: (() => void) | undefined;
|
|
29
|
+
#aborted = false;
|
|
30
|
+
|
|
31
|
+
constructor(signal?: AbortSignal) {
|
|
32
|
+
if (signal?.aborted) {
|
|
33
|
+
this.abort();
|
|
34
|
+
} else {
|
|
35
|
+
signal?.addEventListener('abort', () => this.abort(), { once: true });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Get messages as an AsyncIterable. */
|
|
40
|
+
async *[Symbol.asyncIterator](): AsyncIterator<T> {
|
|
41
|
+
while (!this.#aborted) {
|
|
42
|
+
if (this.#queue.length) {
|
|
43
|
+
yield this.#queue.shift() as T;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
await new Promise<void>((_resolve) => {
|
|
48
|
+
this.#resolve = _resolve;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
throw new DOMException('The signal has been aborted', 'AbortError');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Push a message into the Machina instance, making it available to the consumer of `stream()`. */
|
|
56
|
+
push(data: T): void {
|
|
57
|
+
this.#queue.push(data);
|
|
58
|
+
this.#resolve?.();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Stops streaming and throws an error to the consumer. */
|
|
62
|
+
private abort(): void {
|
|
63
|
+
this.#aborted = true;
|
|
64
|
+
this.#resolve?.();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { assertEquals } from '@std/assert';
|
|
2
|
+
|
|
3
|
+
import event0 from '../../../fixtures/event-0.json' with { type: 'json' };
|
|
4
|
+
|
|
5
|
+
import { N64 } from './N64.ts';
|
|
6
|
+
|
|
7
|
+
Deno.test('N64', () => {
|
|
8
|
+
const base64 = N64.encodeEvent(event0);
|
|
9
|
+
const event = N64.decodeEvent(base64);
|
|
10
|
+
|
|
11
|
+
assertEquals(event, event0);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
Deno.test('N64.encodeEvent', () => {
|
|
15
|
+
const base64 = N64.encodeEvent(event0);
|
|
16
|
+
assertEquals(
|
|
17
|
+
base64,
|
|
18
|
+
'eyJpZCI6IjYzZDM4YzliNDgzZDJkOThhNDYzODJlYWRlZmQyNzJlMGU0YmRiMTA2YTViNmVkZGI0MDBjNGU3NmY2OTNkMzUiLCJwdWJrZXkiOiI3OWMyY2FlMTE0ZWEyOGE5ODFlNzU1OWI0ZmU3ODU0YTQ3MzUyMWE4ZDIyYTY2YmJhYjlmYTI0OGViODIwZmY2IiwiY3JlYXRlZF9hdCI6MTY5OTM5ODM3Niwia2luZCI6MCwidGFncyI6W1sicHJveHkiLCJodHRwczovL2dsZWFzb25hdG9yLmNvbS91c2Vycy9hbGV4IiwiYWN0aXZpdHlwdWIiXV0sImNvbnRlbnQiOiJ7XCJuYW1lXCI6XCJBbGV4IEdsZWFzb25cIixcImFib3V0XCI6XCJJIGNyZWF0ZSBGZWRpdmVyc2Ugc29mdHdhcmUgdGhhdCBlbXBvd2VycyBwZW9wbGUgb25saW5lLlxcblxcbkknbSB2ZWdhbiBidHcuXFxuXFxuTm90ZTogSWYgeW91IGhhdmUgYSBxdWVzdGlvbiBmb3IgbWUsIHBsZWFzZSB0YWcgbWUgcHVibGljbHkuIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IGZvciBvdGhlcnMgdG8gY2hpbWUgaW4sIGFuZCBieXN0YW5kZXJzIHRvIGxlYXJuLlwiLFwicGljdHVyZVwiOlwiaHR0cHM6Ly9tZWRpYS5nbGVhc29uYXRvci5jb20vYWFlMDA3MTE4ODY4MTYyOWYyMDBhYjQxNTAyZTAzYjk4NjFkMjc1NGE0NGMwMDhkMzg2OWM4YTA4YjA4ZDFmMS5wbmdcIixcImJhbm5lclwiOlwiaHR0cHM6Ly9tZWRpYS5nbGVhc29uYXRvci5jb20vZTVmNmUwZTM4MDUzNjc4MGVmYTc3NGU4ZDNjOGE1YTA0MGUzZjlmOTlkYmI0ODkxMGIyNjFjMzI4NzJlZTNhMy5naWZcIixcIm5pcDA1XCI6XCJhbGV4X2F0X2dsZWFzb25hdG9yLmNvbUBtb3N0ci5wdWJcIixcImx1ZDE2XCI6XCJhbGV4QGFsZXhnbGVhc29uLm1lXCJ9Iiwic2lnIjoiOWQ0OGJiYjYwMGFhYjQ0YWJhZWVlMTFjOTdmMTc1M2YxZDdkZTA4Mzc4ZTliMzNkODRmOWJlODkzYTA5MjcwYWVjZWVjZmRlM2NmYjY5OGM1NTVhZTFiZGUzZTRlNTRiMzQ2M2E2MWJiOTliZGY2NzNkNjRjMjIwMmY5OGIwZTkifQ==',
|
|
19
|
+
);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
Deno.test('N64.decodeEvent', () => {
|
|
23
|
+
const event = N64.decodeEvent(
|
|
24
|
+
'eyJpZCI6IjYzZDM4YzliNDgzZDJkOThhNDYzODJlYWRlZmQyNzJlMGU0YmRiMTA2YTViNmVkZGI0MDBjNGU3NmY2OTNkMzUiLCJwdWJrZXkiOiI3OWMyY2FlMTE0ZWEyOGE5ODFlNzU1OWI0ZmU3ODU0YTQ3MzUyMWE4ZDIyYTY2YmJhYjlmYTI0OGViODIwZmY2IiwiY3JlYXRlZF9hdCI6MTY5OTM5ODM3Niwia2luZCI6MCwidGFncyI6W1sicHJveHkiLCJodHRwczovL2dsZWFzb25hdG9yLmNvbS91c2Vycy9hbGV4IiwiYWN0aXZpdHlwdWIiXV0sImNvbnRlbnQiOiJ7XCJuYW1lXCI6XCJBbGV4IEdsZWFzb25cIixcImFib3V0XCI6XCJJIGNyZWF0ZSBGZWRpdmVyc2Ugc29mdHdhcmUgdGhhdCBlbXBvd2VycyBwZW9wbGUgb25saW5lLlxcblxcbkknbSB2ZWdhbiBidHcuXFxuXFxuTm90ZTogSWYgeW91IGhhdmUgYSBxdWVzdGlvbiBmb3IgbWUsIHBsZWFzZSB0YWcgbWUgcHVibGljbHkuIFRoaXMgZ2l2ZXMgdGhlIG9wcG9ydHVuaXR5IGZvciBvdGhlcnMgdG8gY2hpbWUgaW4sIGFuZCBieXN0YW5kZXJzIHRvIGxlYXJuLlwiLFwicGljdHVyZVwiOlwiaHR0cHM6Ly9tZWRpYS5nbGVhc29uYXRvci5jb20vYWFlMDA3MTE4ODY4MTYyOWYyMDBhYjQxNTAyZTAzYjk4NjFkMjc1NGE0NGMwMDhkMzg2OWM4YTA4YjA4ZDFmMS5wbmdcIixcImJhbm5lclwiOlwiaHR0cHM6Ly9tZWRpYS5nbGVhc29uYXRvci5jb20vZTVmNmUwZTM4MDUzNjc4MGVmYTc3NGU4ZDNjOGE1YTA0MGUzZjlmOTlkYmI0ODkxMGIyNjFjMzI4NzJlZTNhMy5naWZcIixcIm5pcDA1XCI6XCJhbGV4X2F0X2dsZWFzb25hdG9yLmNvbUBtb3N0ci5wdWJcIixcImx1ZDE2XCI6XCJhbGV4QGFsZXhnbGVhc29uLm1lXCJ9Iiwic2lnIjoiOWQ0OGJiYjYwMGFhYjQ0YWJhZWVlMTFjOTdmMTc1M2YxZDdkZTA4Mzc4ZTliMzNkODRmOWJlODkzYTA5MjcwYWVjZWVjZmRlM2NmYjY5OGM1NTVhZTFiZGUzZTRlNTRiMzQ2M2E2MWJiOTliZGY2NzNkNjRjMjIwMmY5OGIwZTkifQ==',
|
|
25
|
+
);
|
|
26
|
+
assertEquals(event, event0);
|
|
27
|
+
});
|
package/utils/N64.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NostrEvent } from '@nostrify/types';
|
|
2
|
+
import { decodeBase64, encodeBase64 } from '@std/encoding/base64';
|
|
3
|
+
|
|
4
|
+
import { NSchema as n } from '../NSchema';
|
|
5
|
+
|
|
6
|
+
/** Nostr base64 helper utilities. */
|
|
7
|
+
export class N64 {
|
|
8
|
+
/** Encode an event as a base64 string. */
|
|
9
|
+
static encodeEvent(event: NostrEvent): string {
|
|
10
|
+
return encodeBase64(JSON.stringify(event));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Decode an event from a base64 string. Validates the event's structure but does not verify its signature. */
|
|
14
|
+
static decodeEvent(base64: string): NostrEvent {
|
|
15
|
+
const bytes = decodeBase64(base64);
|
|
16
|
+
const text = new TextDecoder().decode(bytes);
|
|
17
|
+
|
|
18
|
+
return n
|
|
19
|
+
.json()
|
|
20
|
+
.pipe(n.event())
|
|
21
|
+
.parse(text);
|
|
22
|
+
}
|
|
23
|
+
}
|
package/utils/mod.ts
ADDED