@welshman/signer 0.0.16 → 0.0.18

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 (50) hide show
  1. package/README.md +92 -2
  2. package/build/src/index.d.ts +6 -6
  3. package/build/src/index.js +7 -0
  4. package/build/src/index.js.map +1 -0
  5. package/build/src/nip59.d.ts +3 -3
  6. package/build/src/{nip59.mjs → nip59.js} +11 -9
  7. package/build/src/nip59.js.map +1 -0
  8. package/build/src/signers/nip01.d.ts +2 -2
  9. package/build/src/signers/nip01.js +22 -0
  10. package/build/src/signers/nip01.js.map +1 -0
  11. package/build/src/signers/nip07.d.ts +2 -2
  12. package/build/src/signers/nip07.js +30 -0
  13. package/build/src/signers/nip07.js.map +1 -0
  14. package/build/src/signers/nip46.d.ts +5 -11
  15. package/build/src/signers/nip46.js +317 -0
  16. package/build/src/signers/nip46.js.map +1 -0
  17. package/build/src/signers/nip55.d.ts +2 -2
  18. package/build/src/signers/nip55.js +134 -0
  19. package/build/src/signers/nip55.js.map +1 -0
  20. package/build/src/util.d.ts +4 -4
  21. package/build/src/{util.mjs → util.js} +7 -5
  22. package/build/src/util.js.map +1 -0
  23. package/build/tsconfig.tsbuildinfo +1 -0
  24. package/package.json +12 -12
  25. package/build/src/index.cjs +0 -23
  26. package/build/src/index.cjs.map +0 -1
  27. package/build/src/index.mjs +0 -7
  28. package/build/src/index.mjs.map +0 -1
  29. package/build/src/nip59.cjs +0 -76
  30. package/build/src/nip59.cjs.map +0 -1
  31. package/build/src/nip59.mjs.map +0 -1
  32. package/build/src/signers/nip01.cjs +0 -38
  33. package/build/src/signers/nip01.cjs.map +0 -1
  34. package/build/src/signers/nip01.mjs +0 -34
  35. package/build/src/signers/nip01.mjs.map +0 -1
  36. package/build/src/signers/nip07.cjs +0 -50
  37. package/build/src/signers/nip07.cjs.map +0 -1
  38. package/build/src/signers/nip07.mjs +0 -45
  39. package/build/src/signers/nip07.mjs.map +0 -1
  40. package/build/src/signers/nip46.cjs +0 -314
  41. package/build/src/signers/nip46.cjs.map +0 -1
  42. package/build/src/signers/nip46.mjs +0 -306
  43. package/build/src/signers/nip46.mjs.map +0 -1
  44. package/build/src/signers/nip55.cjs +0 -151
  45. package/build/src/signers/nip55.cjs.map +0 -1
  46. package/build/src/signers/nip55.mjs +0 -146
  47. package/build/src/signers/nip55.mjs.map +0 -1
  48. package/build/src/util.cjs +0 -42
  49. package/build/src/util.cjs.map +0 -1
  50. package/build/src/util.mjs.map +0 -1
package/README.md CHANGED
@@ -1,3 +1,93 @@
1
- # @welshman/store [![version](https://badgen.net/npm/v/@welshman/store)](https://npmjs.com/package/@welshman/store)
1
+ # @welshman/signer [![version](https://badgen.net/npm/v/@welshman/signer)](https://npmjs.com/package/@welshman/signer)
2
2
 
3
- Utilities for dealing with svelte stores when using welshman.
3
+ Implementations of signer utilities and classes.
4
+
5
+ ## Nips supported
6
+
7
+ - NIP 01 (private key login)
8
+ - NIP 07
9
+ - NIP 46
10
+ - NIP 55
11
+ - NIP 59 (gift wrapping, works with any signer that supports encryption)
12
+
13
+ ## Examples
14
+
15
+ ### NIP 01
16
+
17
+ ```typescript
18
+ import {makeSecret, Nip01Signer} from '@welshman/signer'
19
+
20
+ const signer = Nip01Signer.fromSecret(makeSecret())
21
+ ```
22
+
23
+ ### NIP 07
24
+
25
+ ```typescript
26
+ import {getNip07, Nip07Signer} from '@welshman/signer'
27
+
28
+ if (getNip07()) {
29
+ const signer = new Nip07Signer()
30
+ }
31
+ ```
32
+
33
+ ### NIP 55
34
+
35
+ ```typescript
36
+ import {getNip07, Nip07Signer} from '@welshman/signer'
37
+
38
+ if (getNip07()) {
39
+ const signer = new Nip07Signer()
40
+ }
41
+ ```
42
+
43
+ ### NIP 46
44
+
45
+ ```typescript
46
+ import {createEvent, NOTE} from '@welshman/util'
47
+ import {makeSecret, Nip46Broker, Nip46Signer} from '@welshman/signer'
48
+
49
+ const clientSecret = makeSecret()
50
+ const relays = ['wss://relay.signer.example/']
51
+ const broker = Nip46Broker.get({relays, clientSecret})
52
+ const signer = new Nip46Signer(broker)
53
+ const ncUrl = broker.makeNostrconnectUrl({name: "My app"})
54
+ const abortController = new AbortController()
55
+
56
+ let response
57
+ try {
58
+ response = await broker.waitForNostrconnect(url, abortController)
59
+ } catch (e: any) {
60
+ if (e?.error) {
61
+ showWarning(`Received error from signer: ${e.error}`)
62
+ } else if (e) {
63
+ console.error(e)
64
+ }
65
+ }
66
+
67
+ if (response) {
68
+ // Now we know the bunker's pubkey and can do stuff with the signer
69
+ const signerPubkey = response.event.pubkey
70
+
71
+ // Next time we want to use our signer, we can instantiate it like so:
72
+ const newBroker = Nip46Broker.get({relays, clientSecret, signerPubkey})
73
+ const newSigner = new Nip46Signer(newBroker)
74
+ }
75
+ ```
76
+
77
+ ### Using signers
78
+
79
+ ```typescript
80
+ import {createEvent, NOTE, DIRECT_MESSAGE} from '@welshman/util'
81
+
82
+ const signer = // Create your signer...
83
+ const nip59 = Nip59.fromSigner(signer)
84
+
85
+ // Sign an event
86
+ const event = await signer.sign(createEvent(NOTE, {content: "hi"}))
87
+
88
+ // Wrap a NIP 17 DM
89
+ const rumor = await nip59.wrap(recipientPubkey, createEvent(DIRECT_MESSAGE, {content: "hi"}))
90
+
91
+ // Note that it returns a rumor; be sure to publish the `wrap`
92
+ const wrap = rumor.wrap
93
+ ```
@@ -1,6 +1,6 @@
1
- export * from './util';
2
- export * from './nip59';
3
- export * from './signers/nip01';
4
- export * from './signers/nip07';
5
- export * from './signers/nip46';
6
- export * from './signers/nip55';
1
+ export * from "./util.js";
2
+ export * from "./nip59.js";
3
+ export * from "./signers/nip01.js";
4
+ export * from "./signers/nip07.js";
5
+ export * from "./signers/nip46.js";
6
+ export * from "./signers/nip55.js";
@@ -0,0 +1,7 @@
1
+ export * from "./util.js";
2
+ export * from "./nip59.js";
3
+ export * from "./signers/nip01.js";
4
+ export * from "./signers/nip07.js";
5
+ export * from "./signers/nip46.js";
6
+ export * from "./signers/nip55.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA"}
@@ -1,6 +1,6 @@
1
- import { UnwrappedEvent, SignedEvent, HashedEvent, StampedEvent } from '@welshman/util';
2
- import { ISigner } from './util';
3
- export declare const seen: Map<string, UnwrappedEvent | Error>;
1
+ import { UnwrappedEvent, SignedEvent, HashedEvent, StampedEvent } from "@welshman/util";
2
+ import { ISigner } from "./util.js";
3
+ export declare const seen: Map<string, Error | UnwrappedEvent>;
4
4
  export declare const now: (drift?: number) => number;
5
5
  export declare const getRumor: (signer: ISigner, template: StampedEvent) => Promise<{
6
6
  id: string;
@@ -1,6 +1,6 @@
1
- import { WRAP, SEAL } from '@welshman/util';
2
- import { own, hash, decrypt } from "./util.mjs";
3
- import { Nip01Signer } from "./signers/nip01.mjs";
1
+ import { WRAP, SEAL } from "@welshman/util";
2
+ import { own, hash, decrypt } from "./util.js";
3
+ import { Nip01Signer } from "./signers/nip01.js";
4
4
  export const seen = new Map();
5
5
  export const now = (drift = 0) => Math.round(Date.now() / 1000 - Math.random() * Math.pow(10, drift));
6
6
  export const getRumor = async (signer, template) => hash(own(template, await signer.getPubkey()));
@@ -53,14 +53,16 @@ export const unwrap = async (signer, wrap) => {
53
53
  // wrapping a single user signer and omit the wrapper signer argument to wrap, while still
54
54
  // making it possible to pass a wrapper signer if desired.
55
55
  export class Nip59 {
56
+ signer;
57
+ wrapper;
56
58
  constructor(signer, wrapper) {
57
59
  this.signer = signer;
58
60
  this.wrapper = wrapper;
59
- this.withWrapper = (wrapper) => new Nip59(this.signer, wrapper);
60
- this.wrap = (pubkey, template, tags = []) => wrap(this.signer, this.wrapper || Nip01Signer.ephemeral(), pubkey, template, tags);
61
- this.unwrap = (event) => unwrap(this.signer, event);
62
61
  }
62
+ static fromSigner = (signer) => new Nip59(signer);
63
+ static fromSecret = (secret) => new Nip59(new Nip01Signer(secret));
64
+ withWrapper = (wrapper) => new Nip59(this.signer, wrapper);
65
+ wrap = (pubkey, template, tags = []) => wrap(this.signer, this.wrapper || Nip01Signer.ephemeral(), pubkey, template, tags);
66
+ unwrap = (event) => unwrap(this.signer, event);
63
67
  }
64
- Nip59.fromSigner = (signer) => new Nip59(signer);
65
- Nip59.fromSecret = (secret) => new Nip59(new Nip01Signer(secret));
66
- //# sourceMappingURL=nip59.mjs.map
68
+ //# sourceMappingURL=nip59.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip59.js","sourceRoot":"","sources":["../../src/nip59.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { StampedEvent } from '@welshman/util';
2
- import { ISigner } from "../util";
1
+ import { StampedEvent } from "@welshman/util";
2
+ import { ISigner } from "../util.js";
3
3
  export declare class Nip01Signer implements ISigner {
4
4
  #private;
5
5
  private secret;
@@ -0,0 +1,22 @@
1
+ import { nip04, nip44, own, hash, sign, getPubkey, makeSecret } from "../util.js";
2
+ export class Nip01Signer {
3
+ secret;
4
+ #pubkey;
5
+ constructor(secret) {
6
+ this.secret = secret;
7
+ this.#pubkey = getPubkey(this.secret);
8
+ }
9
+ static fromSecret = (secret) => new Nip01Signer(secret);
10
+ static ephemeral = () => new Nip01Signer(makeSecret());
11
+ getPubkey = async () => this.#pubkey;
12
+ sign = async (event) => sign(hash(own(event, this.#pubkey)), this.secret);
13
+ nip04 = {
14
+ encrypt: async (pubkey, message) => nip04.encrypt(pubkey, this.secret, message),
15
+ decrypt: async (pubkey, message) => nip04.decrypt(pubkey, this.secret, message),
16
+ };
17
+ nip44 = {
18
+ encrypt: async (pubkey, message) => nip44.encrypt(pubkey, this.secret, message),
19
+ decrypt: async (pubkey, message) => nip44.decrypt(pubkey, this.secret, message),
20
+ };
21
+ }
22
+ //# sourceMappingURL=nip01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip01.js","sourceRoot":"","sources":["../../../src/signers/nip01.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAW,UAAU,EAAC,MAAM,YAAY,CAAA;AAExF,MAAM,OAAO,WAAW;IAGF;IAFpB,OAAO,CAAQ;IAEf,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAChC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,CAAC,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;IAE/D,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,CAAA;IAEtD,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAA;IAEpC,IAAI,GAAG,KAAK,EAAE,KAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAEvF,KAAK,GAAG;QACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAC/F,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;KAChG,CAAA;IAED,KAAK,GAAG;QACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;QAC/F,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;KAChG,CAAA"}
@@ -1,5 +1,5 @@
1
- import { StampedEvent } from '@welshman/util';
2
- import { Sign, ISigner, EncryptionImplementation } from '../util';
1
+ import { StampedEvent } from "@welshman/util";
2
+ import { Sign, ISigner, EncryptionImplementation } from "../util.js";
3
3
  export type Nip07 = {
4
4
  signEvent: Sign;
5
5
  nip04: EncryptionImplementation;
@@ -0,0 +1,30 @@
1
+ import { hash, own } from "../util.js";
2
+ export const getNip07 = () => window.nostr;
3
+ export class Nip07Signer {
4
+ #lock = Promise.resolve();
5
+ #then = async (f) => {
6
+ const promise = this.#lock.then(() => {
7
+ const ext = getNip07();
8
+ if (!ext)
9
+ throw new Error("Nip07 is not enabled");
10
+ return f(ext);
11
+ });
12
+ // Recover from errors
13
+ this.#lock = promise.then(() => undefined, () => undefined);
14
+ return promise;
15
+ };
16
+ getPubkey = async () => getNip07().getPublicKey();
17
+ sign = async (template) => {
18
+ const event = hash(own(template, await this.getPubkey()));
19
+ return this.#then(ext => ext.signEvent(event));
20
+ };
21
+ nip04 = {
22
+ encrypt: (pubkey, message) => this.#then(ext => ext.nip04.encrypt(pubkey, message)),
23
+ decrypt: (pubkey, message) => this.#then(ext => ext.nip04.decrypt(pubkey, message)),
24
+ };
25
+ nip44 = {
26
+ encrypt: (pubkey, message) => this.#then(ext => ext.nip44.encrypt(pubkey, message)),
27
+ decrypt: (pubkey, message) => this.#then(ext => ext.nip44.decrypt(pubkey, message)),
28
+ };
29
+ }
30
+ //# sourceMappingURL=nip07.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip07.js","sourceRoot":"","sources":["../../../src/signers/nip07.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,GAAG,EAA0C,MAAM,YAAY,CAAA;AAS7E,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAE,MAA0B,CAAC,KAAK,CAAA;AAE/D,MAAM,OAAO,WAAW;IACtB,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;IAEzB,KAAK,GAAG,KAAK,EAAK,CAAiC,EAAE,EAAE;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACnC,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAA;YAEtB,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;YAEjD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;QAEF,sBAAsB;QACtB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CACvB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAA;QAED,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAG,CAAC,YAAY,EAAG,CAAA;IAEnD,IAAI,GAAG,KAAK,EAAE,QAAsB,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEzD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAChD,CAAC,CAAA;IAED,KAAK,GAAG;QACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxD,CAAA;IAED,KAAK,GAAG;QACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACxD,CAAA;CACF"}
@@ -1,8 +1,8 @@
1
1
  import { Emitter } from "@welshman/lib";
2
2
  import { TrustedEvent, StampedEvent } from "@welshman/util";
3
3
  import { Subscription } from "@welshman/net";
4
- import { ISigner } from '../util';
5
- import { Nip01Signer } from './nip01';
4
+ import { ISigner, EncryptionImplementation } from "../util.js";
5
+ import { Nip01Signer } from "./nip01.js";
6
6
  export type Nip46Algorithm = "nip04" | "nip44";
7
7
  export declare enum Nip46Event {
8
8
  Send = "send",
@@ -86,7 +86,7 @@ export declare class Nip46Broker extends Emitter {
86
86
  ping: () => Promise<string>;
87
87
  getPublicKey: () => Promise<string>;
88
88
  createAccount: (username: string, domain: string, perms?: string) => Promise<string>;
89
- connect: (signerPubkey: string, connectSecret?: string, perms?: string) => Promise<string>;
89
+ connect: (connectSecret?: string, perms?: string) => Promise<string>;
90
90
  signEvent: (event: StampedEvent) => Promise<any>;
91
91
  nip04Encrypt: (pk: string, message: string) => Promise<string>;
92
92
  nip04Decrypt: (pk: string, message: string) => Promise<string>;
@@ -96,15 +96,9 @@ export declare class Nip46Broker extends Emitter {
96
96
  export declare class Nip46Signer implements ISigner {
97
97
  broker: Nip46Broker;
98
98
  pubkey?: string;
99
+ nip04: EncryptionImplementation;
100
+ nip44: EncryptionImplementation;
99
101
  constructor(broker: Nip46Broker);
100
102
  getPubkey: () => Promise<string>;
101
103
  sign: (template: StampedEvent) => Promise<any>;
102
- nip04: {
103
- encrypt: (pk: string, message: string) => Promise<string>;
104
- decrypt: (pk: string, message: string) => Promise<string>;
105
- };
106
- nip44: {
107
- encrypt: (pk: string, message: string) => Promise<string>;
108
- decrypt: (pk: string, message: string) => Promise<string>;
109
- };
110
104
  }
@@ -0,0 +1,317 @@
1
+ import { Emitter, throttle, makePromise, defer, sleep, tryCatch, randomId, equals, } from "@welshman/lib";
2
+ import { createEvent, normalizeRelayUrl, NOSTR_CONNECT, } from "@welshman/util";
3
+ import { subscribe, publish, SubscriptionEvent } from "@welshman/net";
4
+ import { decrypt, hash, own } from "../util.js";
5
+ import { Nip01Signer } from "./nip01.js";
6
+ export var Nip46Event;
7
+ (function (Nip46Event) {
8
+ Nip46Event["Send"] = "send";
9
+ Nip46Event["Receive"] = "receive";
10
+ })(Nip46Event || (Nip46Event = {}));
11
+ let singleton;
12
+ const popupManager = (() => {
13
+ let pendingUrl = "";
14
+ let pendingSince = 0;
15
+ let currentWindow;
16
+ const openPending = throttle(1000, () => {
17
+ // If it's been a while since they asked for it, drop the request
18
+ if (Date.now() - pendingSince > 10_000)
19
+ return;
20
+ // If we have an active, open window, continue to wait
21
+ if (currentWindow && !currentWindow.closed) {
22
+ setTimeout(() => openPending(), 100);
23
+ }
24
+ else {
25
+ // Attempt to open the window
26
+ const w = window.open(pendingUrl, "", "width=600,height=800,popup=yes");
27
+ // If open was successful, keep track of our window
28
+ if (w) {
29
+ currentWindow = w;
30
+ }
31
+ // In any case, this url has been handled
32
+ pendingUrl = "";
33
+ pendingSince = 0;
34
+ }
35
+ });
36
+ return {
37
+ open: (url) => {
38
+ pendingUrl = url;
39
+ pendingSince = Date.now();
40
+ openPending();
41
+ },
42
+ };
43
+ })();
44
+ export class Nip46Receiver extends Emitter {
45
+ signer;
46
+ params;
47
+ sub;
48
+ constructor(signer, params) {
49
+ super();
50
+ this.signer = signer;
51
+ this.params = params;
52
+ }
53
+ start = async () => {
54
+ if (this.sub)
55
+ return;
56
+ const userPubkey = await this.signer.getPubkey();
57
+ const filters = [{ kinds: [NOSTR_CONNECT], "#p": [userPubkey] }];
58
+ this.sub = subscribe({ relays: this.params.relays, filters });
59
+ return new Promise(resolve => {
60
+ this.sub.emitter.on(SubscriptionEvent.Send, resolve);
61
+ this.sub.emitter.on(SubscriptionEvent.Event, async (url, event) => {
62
+ const json = await decrypt(this.signer, event.pubkey, event.content);
63
+ const response = tryCatch(() => JSON.parse(json)) || {};
64
+ // Delay errors in case there's a zombie signer out there clogging things up
65
+ if (response.error) {
66
+ await sleep(3000);
67
+ }
68
+ this.emit(Nip46Event.Receive, { ...response, url, event });
69
+ });
70
+ this.sub.emitter.on(SubscriptionEvent.Complete, () => {
71
+ this.sub = undefined;
72
+ });
73
+ });
74
+ };
75
+ stop = () => {
76
+ this.sub?.close();
77
+ this.removeAllListeners();
78
+ };
79
+ }
80
+ export class Nip46Sender extends Emitter {
81
+ signer;
82
+ params;
83
+ processing = false;
84
+ queue = [];
85
+ constructor(signer, params) {
86
+ super();
87
+ this.signer = signer;
88
+ this.params = params;
89
+ }
90
+ send = async (request) => {
91
+ const { id, method, params } = request;
92
+ const { relays, signerPubkey, algorithm = "nip44" } = this.params;
93
+ if (!signerPubkey) {
94
+ throw new Error("Unable to send nip46 request without a signer pubkey");
95
+ }
96
+ const payload = JSON.stringify({ id, method, params });
97
+ const content = await this.signer[algorithm].encrypt(signerPubkey, payload);
98
+ const template = createEvent(NOSTR_CONNECT, { content, tags: [["p", signerPubkey]] });
99
+ const event = await this.signer.sign(template);
100
+ const pub = publish({ relays, event });
101
+ this.emit(Nip46Event.Send, { ...request, pub });
102
+ };
103
+ process = async () => {
104
+ if (this.processing) {
105
+ return;
106
+ }
107
+ this.processing = true;
108
+ try {
109
+ while (this.queue.length > 0) {
110
+ const [request] = this.queue.splice(0, 1);
111
+ try {
112
+ await this.send(request);
113
+ }
114
+ catch (error) {
115
+ console.error("nip46 error:", error, request);
116
+ }
117
+ }
118
+ }
119
+ finally {
120
+ this.processing = false;
121
+ }
122
+ };
123
+ enqueue = (request) => {
124
+ this.queue.push(request);
125
+ this.process();
126
+ };
127
+ stop = () => {
128
+ this.removeAllListeners();
129
+ };
130
+ }
131
+ export class Nip46Request {
132
+ method;
133
+ params;
134
+ id = randomId();
135
+ promise = defer();
136
+ constructor(method, params) {
137
+ this.method = method;
138
+ this.params = params;
139
+ }
140
+ listen = async (receiver) => {
141
+ await receiver.start();
142
+ const onReceive = (response) => {
143
+ if (response.id !== this.id) {
144
+ return;
145
+ }
146
+ if (response.result === "auth_url") {
147
+ popupManager.open(response.error);
148
+ }
149
+ else {
150
+ if (response.error) {
151
+ this.promise.reject(response);
152
+ }
153
+ else {
154
+ this.promise.resolve(response);
155
+ }
156
+ receiver.off(Nip46Event.Receive, onReceive);
157
+ }
158
+ };
159
+ receiver.on(Nip46Event.Receive, onReceive);
160
+ };
161
+ send = async (sender) => {
162
+ sender.enqueue(this);
163
+ };
164
+ }
165
+ export class Nip46Broker extends Emitter {
166
+ params;
167
+ signer;
168
+ sender;
169
+ receiver;
170
+ constructor(params) {
171
+ super();
172
+ this.params = params;
173
+ this.signer = this.makeSigner();
174
+ this.sender = this.makeSender();
175
+ this.receiver = this.makeReceiver();
176
+ }
177
+ // Use a static getter to avoid duplicate connections
178
+ static get(params) {
179
+ if (!singleton?.hasParams(params)) {
180
+ singleton?.teardown();
181
+ singleton = new Nip46Broker(params);
182
+ }
183
+ return singleton;
184
+ }
185
+ // Expose params without exposing params
186
+ hasParams(params) {
187
+ return equals(this.params, params);
188
+ }
189
+ // Getters for helper objects
190
+ makeSigner = () => new Nip01Signer(this.params.clientSecret);
191
+ makeSender = () => {
192
+ const sender = new Nip46Sender(this.signer, this.params);
193
+ sender.on(Nip46Event.Send, (data) => {
194
+ console.log("nip46 send:", data);
195
+ });
196
+ return sender;
197
+ };
198
+ makeReceiver = () => {
199
+ const receiver = new Nip46Receiver(this.signer, this.params);
200
+ receiver.on(Nip46Event.Receive, (data) => {
201
+ console.log("nip46 receive:", data);
202
+ });
203
+ return receiver;
204
+ };
205
+ // Lifecycle methods
206
+ setParams = (params) => {
207
+ this.params = { ...this.params, ...params };
208
+ // Stop everything that's stateful
209
+ this.teardown();
210
+ // Set it back up again
211
+ this.sender = this.makeSender();
212
+ this.receiver = this.makeReceiver();
213
+ };
214
+ teardown = () => {
215
+ this.sender.stop();
216
+ this.receiver.stop();
217
+ };
218
+ // General purpose utility methods
219
+ enqueue = async (method, params) => {
220
+ const request = new Nip46Request(method, params);
221
+ await request.listen(this.receiver);
222
+ await request.send(this.sender);
223
+ return request;
224
+ };
225
+ send = async (method, params) => {
226
+ const request = await this.enqueue(method, params);
227
+ const response = await request.promise;
228
+ return response.result;
229
+ };
230
+ // Methods for initiating a connection
231
+ parseBunkerUrl = (url) => {
232
+ let connectSecret = "";
233
+ let signerPubkey = "";
234
+ let relays = [];
235
+ try {
236
+ const _url = new URL(url);
237
+ relays = _url.searchParams.getAll("relay") || [];
238
+ signerPubkey = _url.hostname || _url.pathname.replace(/\//g, "");
239
+ connectSecret = _url.searchParams.get("secret") || "";
240
+ }
241
+ catch {
242
+ // pass
243
+ }
244
+ return { signerPubkey, connectSecret, relays: relays.map(normalizeRelayUrl) };
245
+ };
246
+ makeNostrconnectUrl = async (meta = {}) => {
247
+ const clientPubkey = await this.signer.getPubkey();
248
+ const secret = Math.random().toString(36).substring(7);
249
+ const params = new URLSearchParams({ ...meta, secret });
250
+ for (const relay of this.params.relays) {
251
+ params.append("relay", relay);
252
+ }
253
+ return `nostrconnect://${clientPubkey}?${params.toString()}`;
254
+ };
255
+ waitForNostrconnect = (url, abort) => {
256
+ const secret = new URL(url).searchParams.get("secret");
257
+ return makePromise((resolve, reject) => {
258
+ const onReceive = (response) => {
259
+ if (["ack", secret].includes(response.result)) {
260
+ this.setParams({ signerPubkey: response.event.pubkey });
261
+ if (response.result === "ack") {
262
+ console.warn("Bunker responded to nostrconnect with 'ack', which can lead to session hijacking");
263
+ }
264
+ resolve(response);
265
+ }
266
+ else {
267
+ reject(response);
268
+ }
269
+ cleanup();
270
+ };
271
+ const cleanup = () => {
272
+ this.receiver.off(Nip46Event.Receive, onReceive);
273
+ };
274
+ this.receiver.on(Nip46Event.Receive, onReceive);
275
+ this.receiver.start();
276
+ abort?.signal.addEventListener("abort", () => {
277
+ reject(undefined);
278
+ cleanup();
279
+ });
280
+ });
281
+ };
282
+ // Normal NIP 46 methods
283
+ ping = () => this.send("ping", []);
284
+ getPublicKey = () => this.send("get_public_key", []);
285
+ createAccount = (username, domain, perms = "") => this.send("create_account", [username, domain, "", perms]);
286
+ connect = async (connectSecret = "", perms = "") => this.send("connect", [await this.signer.getPubkey(), connectSecret, perms]);
287
+ signEvent = async (event) => JSON.parse(await this.send("sign_event", [JSON.stringify(event)]));
288
+ nip04Encrypt = (pk, message) => this.send("nip04_encrypt", [pk, message]);
289
+ nip04Decrypt = (pk, message) => this.send("nip04_decrypt", [pk, message]);
290
+ nip44Encrypt = (pk, message) => this.send("nip44_encrypt", [pk, message]);
291
+ nip44Decrypt = (pk, message) => this.send("nip44_decrypt", [pk, message]);
292
+ }
293
+ export class Nip46Signer {
294
+ broker;
295
+ pubkey;
296
+ nip04;
297
+ nip44;
298
+ constructor(broker) {
299
+ this.broker = broker;
300
+ this.nip04 = {
301
+ encrypt: this.broker.nip04Encrypt,
302
+ decrypt: this.broker.nip04Decrypt,
303
+ };
304
+ this.nip44 = {
305
+ encrypt: this.broker.nip44Encrypt,
306
+ decrypt: this.broker.nip44Decrypt,
307
+ };
308
+ }
309
+ getPubkey = async () => {
310
+ if (!this.pubkey) {
311
+ this.pubkey = await this.broker.getPublicKey();
312
+ }
313
+ return this.pubkey;
314
+ };
315
+ sign = async (template) => this.broker.signEvent(hash(own(template, await this.getPubkey())));
316
+ }
317
+ //# sourceMappingURL=nip46.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip46.js","sourceRoot":"","sources":["../../../src/signers/nip46.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { SignedEvent, StampedEvent } from "@welshman/util";
2
- import { ISigner } from "../util";
3
1
  import { AppInfo } from "nostr-signer-capacitor-plugin";
2
+ import { SignedEvent, StampedEvent } from "@welshman/util";
3
+ import { ISigner } from "../util.js";
4
4
  export declare const getNip55: () => Promise<AppInfo[]>;
5
5
  export declare class Nip55Signer implements ISigner {
6
6
  #private;