@welshman/signer 0.0.1 → 0.0.2

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 (37) hide show
  1. package/build/src/index.cjs +22 -0
  2. package/build/src/index.cjs.map +1 -0
  3. package/build/src/index.d.ts +4 -4
  4. package/build/src/index.mjs +4 -4
  5. package/build/src/nip59.cjs +76 -0
  6. package/build/src/nip59.cjs.map +1 -0
  7. package/build/src/nip59.d.ts +19 -0
  8. package/build/src/nip59.mjs +66 -0
  9. package/build/src/nip59.mjs.map +1 -0
  10. package/build/src/signers/nip01.cjs +24 -0
  11. package/build/src/signers/nip01.cjs.map +1 -0
  12. package/build/src/signers/{secret.d.ts → nip01.d.ts} +3 -2
  13. package/build/src/signers/{secret.mjs → nip01.mjs} +5 -4
  14. package/build/src/signers/nip01.mjs.map +1 -0
  15. package/build/src/signers/nip07.cjs +50 -0
  16. package/build/src/signers/nip07.cjs.map +1 -0
  17. package/build/src/signers/{extension.d.ts → nip07.d.ts} +5 -5
  18. package/build/src/signers/nip07.mjs +45 -0
  19. package/build/src/signers/nip07.mjs.map +1 -0
  20. package/build/src/signers/nip46.cjs +156 -0
  21. package/build/src/signers/nip46.cjs.map +1 -0
  22. package/build/src/signers/{connect.d.ts → nip46.d.ts} +9 -10
  23. package/build/src/signers/{connect.mjs → nip46.mjs} +23 -24
  24. package/build/src/signers/nip46.mjs.map +1 -0
  25. package/build/src/util.cjs +40 -0
  26. package/build/src/util.cjs.map +1 -0
  27. package/build/src/util.d.ts +2 -3
  28. package/build/src/util.mjs +1 -1
  29. package/build/src/util.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/build/src/signers/connect.mjs.map +0 -1
  32. package/build/src/signers/extension.mjs +0 -48
  33. package/build/src/signers/extension.mjs.map +0 -1
  34. package/build/src/signers/secret.mjs.map +0 -1
  35. package/build/src/wrapper.d.ts +0 -21
  36. package/build/src/wrapper.mjs +0 -56
  37. package/build/src/wrapper.mjs.map +0 -1
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./util.cjs"), exports);
18
+ __exportStar(require("./nip59.cjs"), exports);
19
+ __exportStar(require("./signers/nip01.cjs"), exports);
20
+ __exportStar(require("./signers/nip07.cjs"), exports);
21
+ __exportStar(require("./signers/nip46.cjs"), exports);
22
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAAsB;AACtB,8CAAuB;AACvB,sDAA+B;AAC/B,sDAA+B;AAC/B,sDAA+B"}
@@ -1,5 +1,5 @@
1
1
  export * from './util';
2
- export * from './wrapper';
3
- export * from './signers/secret';
4
- export * from './signers/connect';
5
- export * from './signers/extension';
2
+ export * from './nip59';
3
+ export * from './signers/nip01';
4
+ export * from './signers/nip07';
5
+ export * from './signers/nip46';
@@ -1,6 +1,6 @@
1
1
  export * from "./util.mjs";
2
- export * from "./wrapper.mjs";
3
- export * from "./signers/secret.mjs";
4
- export * from "./signers/connect.mjs";
5
- export * from "./signers/extension.mjs";
2
+ export * from "./nip59.mjs";
3
+ export * from "./signers/nip01.mjs";
4
+ export * from "./signers/nip07.mjs";
5
+ export * from "./signers/nip46.mjs";
6
6
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Nip59 = exports.unwrap = exports.wrap = exports.getWrap = exports.getSeal = exports.getRumor = exports.now = exports.seen = void 0;
4
+ const util_1 = require("@welshman/util");
5
+ const util_2 = require("./util.cjs");
6
+ const nip01_1 = require("./signers/nip01.cjs");
7
+ exports.seen = new Map();
8
+ const now = (drift = 0) => Math.round(Date.now() / 1000 - Math.random() * Math.pow(10, drift));
9
+ exports.now = now;
10
+ const getRumor = async (signer, template) => (0, util_2.hash)((0, util_2.own)(await signer.getPubkey(), template));
11
+ exports.getRumor = getRumor;
12
+ const getSeal = async (signer, pubkey, rumor) => signer.sign((0, util_2.hash)({
13
+ kind: util_1.SEAL,
14
+ pubkey: await signer.getPubkey(),
15
+ content: await signer.nip44.encrypt(pubkey, JSON.stringify(rumor)),
16
+ created_at: (0, exports.now)(5),
17
+ tags: [],
18
+ }));
19
+ exports.getSeal = getSeal;
20
+ const getWrap = async (wrapper, pubkey, seal, tags) => wrapper.sign((0, util_2.hash)({
21
+ kind: util_1.WRAP,
22
+ pubkey: await wrapper.getPubkey(),
23
+ content: await wrapper.nip44.encrypt(pubkey, JSON.stringify(seal)),
24
+ created_at: (0, exports.now)(5),
25
+ tags: [...tags, ["p", pubkey]],
26
+ }));
27
+ exports.getWrap = getWrap;
28
+ const wrap = async (signer, wrapper, pubkey, template, tags = []) => {
29
+ const rumor = await (0, exports.getRumor)(signer, template);
30
+ const seal = await (0, exports.getSeal)(signer, pubkey, rumor);
31
+ const wrap = await (0, exports.getWrap)(wrapper, pubkey, seal, tags);
32
+ return Object.assign(rumor, { wrap });
33
+ };
34
+ exports.wrap = wrap;
35
+ const unwrap = async (signer, wrap) => {
36
+ // Avoid decrypting the same event multiple times
37
+ if (exports.seen.has(wrap.id)) {
38
+ const rumorOrError = exports.seen.get(wrap.id);
39
+ if (rumorOrError instanceof Error) {
40
+ throw rumorOrError;
41
+ }
42
+ else {
43
+ return rumorOrError;
44
+ }
45
+ }
46
+ try {
47
+ const seal = JSON.parse(await (0, util_2.decrypt)(signer, wrap.pubkey, wrap.content));
48
+ const rumor = JSON.parse(await (0, util_2.decrypt)(signer, seal.pubkey, seal.content));
49
+ if (seal.pubkey !== rumor.pubkey)
50
+ throw new Error("Seal pubkey does not match rumor pubkey");
51
+ exports.seen.set(wrap.id, rumor);
52
+ return Object.assign(rumor, { wrap });
53
+ }
54
+ catch (error) {
55
+ exports.seen.set(wrap.id, error);
56
+ throw error;
57
+ }
58
+ };
59
+ exports.unwrap = unwrap;
60
+ // This is a utility that makes it harder to re-use wrapper signers, since that can result in
61
+ // leaked metadata. It simultaneously makes it easier to wrap stuff, because it allows for
62
+ // wrapping a single user signer and omit the wrapper signer argument to wrap, while still
63
+ // making it possible to pass a wrapper signer if desired.
64
+ class Nip59 {
65
+ constructor(signer, wrapper) {
66
+ this.signer = signer;
67
+ this.wrapper = wrapper;
68
+ this.withWrapper = (wrapper) => new Nip59(this.signer, wrapper);
69
+ this.wrap = (pubkey, template, tags = []) => (0, exports.wrap)(this.signer, this.wrapper || nip01_1.Nip01Signer.ephemeral(), pubkey, template, tags);
70
+ this.unwrap = (event) => (0, exports.unwrap)(this.signer, event);
71
+ }
72
+ }
73
+ exports.Nip59 = Nip59;
74
+ Nip59.fromSigner = (signer) => new Nip59(signer);
75
+ Nip59.fromSecret = (secret) => new Nip59(new nip01_1.Nip01Signer(secret));
76
+ //# sourceMappingURL=nip59.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip59.cjs","sourceRoot":"","sources":["../../src/nip59.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { UnwrappedEvent, SignedEvent, HashedEvent, EventTemplate } from '@welshman/util';
2
+ import { ISigner } from './util';
3
+ export declare const seen: Map<string, UnwrappedEvent | Error>;
4
+ export declare const now: (drift?: number) => number;
5
+ export declare const getRumor: (signer: ISigner, template: EventTemplate) => Promise<HashedEvent>;
6
+ export declare const getSeal: (signer: ISigner, pubkey: string, rumor: HashedEvent) => Promise<SignedEvent>;
7
+ export declare const getWrap: (wrapper: ISigner, pubkey: string, seal: SignedEvent, tags: string[][]) => Promise<SignedEvent>;
8
+ export declare const wrap: (signer: ISigner, wrapper: ISigner, pubkey: string, template: EventTemplate, tags?: string[][]) => Promise<UnwrappedEvent>;
9
+ export declare const unwrap: (signer: ISigner, wrap: SignedEvent) => Promise<UnwrappedEvent | undefined>;
10
+ export declare class Nip59 {
11
+ private signer;
12
+ private wrapper?;
13
+ constructor(signer: ISigner, wrapper?: ISigner | undefined);
14
+ static fromSigner: (signer: ISigner) => Nip59;
15
+ static fromSecret: (secret: string) => Nip59;
16
+ withWrapper: (wrapper: ISigner) => Nip59;
17
+ wrap: (pubkey: string, template: EventTemplate, tags?: string[][]) => Promise<UnwrappedEvent>;
18
+ unwrap: (event: SignedEvent) => Promise<UnwrappedEvent | undefined>;
19
+ }
@@ -0,0 +1,66 @@
1
+ import { WRAP, SEAL } from '@welshman/util';
2
+ import { own, hash, decrypt } from "./util.mjs";
3
+ import { Nip01Signer } from "./signers/nip01.mjs";
4
+ export const seen = new Map();
5
+ export const now = (drift = 0) => Math.round(Date.now() / 1000 - Math.random() * Math.pow(10, drift));
6
+ export const getRumor = async (signer, template) => hash(own(await signer.getPubkey(), template));
7
+ export const getSeal = async (signer, pubkey, rumor) => signer.sign(hash({
8
+ kind: SEAL,
9
+ pubkey: await signer.getPubkey(),
10
+ content: await signer.nip44.encrypt(pubkey, JSON.stringify(rumor)),
11
+ created_at: now(5),
12
+ tags: [],
13
+ }));
14
+ export const getWrap = async (wrapper, pubkey, seal, tags) => wrapper.sign(hash({
15
+ kind: WRAP,
16
+ pubkey: await wrapper.getPubkey(),
17
+ content: await wrapper.nip44.encrypt(pubkey, JSON.stringify(seal)),
18
+ created_at: now(5),
19
+ tags: [...tags, ["p", pubkey]],
20
+ }));
21
+ export const wrap = async (signer, wrapper, pubkey, template, tags = []) => {
22
+ const rumor = await getRumor(signer, template);
23
+ const seal = await getSeal(signer, pubkey, rumor);
24
+ const wrap = await getWrap(wrapper, pubkey, seal, tags);
25
+ return Object.assign(rumor, { wrap });
26
+ };
27
+ export const unwrap = async (signer, wrap) => {
28
+ // Avoid decrypting the same event multiple times
29
+ if (seen.has(wrap.id)) {
30
+ const rumorOrError = seen.get(wrap.id);
31
+ if (rumorOrError instanceof Error) {
32
+ throw rumorOrError;
33
+ }
34
+ else {
35
+ return rumorOrError;
36
+ }
37
+ }
38
+ try {
39
+ const seal = JSON.parse(await decrypt(signer, wrap.pubkey, wrap.content));
40
+ const rumor = JSON.parse(await decrypt(signer, seal.pubkey, seal.content));
41
+ if (seal.pubkey !== rumor.pubkey)
42
+ throw new Error("Seal pubkey does not match rumor pubkey");
43
+ seen.set(wrap.id, rumor);
44
+ return Object.assign(rumor, { wrap });
45
+ }
46
+ catch (error) {
47
+ seen.set(wrap.id, error);
48
+ throw error;
49
+ }
50
+ };
51
+ // This is a utility that makes it harder to re-use wrapper signers, since that can result in
52
+ // leaked metadata. It simultaneously makes it easier to wrap stuff, because it allows for
53
+ // wrapping a single user signer and omit the wrapper signer argument to wrap, while still
54
+ // making it possible to pass a wrapper signer if desired.
55
+ export class Nip59 {
56
+ constructor(signer, wrapper) {
57
+ this.signer = signer;
58
+ 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
+ }
63
+ }
64
+ Nip59.fromSigner = (signer) => new Nip59(signer);
65
+ Nip59.fromSecret = (secret) => new Nip59(new Nip01Signer(secret));
66
+ //# sourceMappingURL=nip59.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip59.mjs","sourceRoot":"","sources":["../../src/nip59.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Nip01Signer = void 0;
4
+ const util_1 = require("../util.cjs");
5
+ class Nip01Signer {
6
+ constructor(secret) {
7
+ this.secret = secret;
8
+ this.getPubkey = async () => this.pubkey;
9
+ this.sign = async (event) => (0, util_1.sign)((0, util_1.hash)((0, util_1.own)(this.pubkey, event)), this.secret);
10
+ this.nip04 = {
11
+ encrypt: async (pubkey, message) => util_1.nip04.encrypt(pubkey, this.secret, message),
12
+ decrypt: async (pubkey, message) => util_1.nip04.decrypt(pubkey, this.secret, message),
13
+ };
14
+ this.nip44 = {
15
+ encrypt: async (pubkey, message) => util_1.nip44.encrypt(pubkey, this.secret, message),
16
+ decrypt: async (pubkey, message) => util_1.nip44.decrypt(pubkey, this.secret, message),
17
+ };
18
+ this.pubkey = (0, util_1.getPubkey)(this.secret);
19
+ }
20
+ }
21
+ exports.Nip01Signer = Nip01Signer;
22
+ Nip01Signer.fromSecret = (secret) => new Nip01Signer(secret);
23
+ Nip01Signer.ephemeral = () => new Nip01Signer((0, util_1.makeSecret)());
24
+ //# sourceMappingURL=nip01.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip01.cjs","sourceRoot":"","sources":["../../../src/signers/nip01.ts"],"names":[],"mappings":";;;AACA,sCAAqF;AAErF,MAAa,WAAW;IAGtB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAQlC,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;QAEnC,SAAI,GAAG,KAAK,EAAE,KAAoB,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,IAAA,WAAI,EAAC,IAAA,UAAG,EAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEvF,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,YAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,YAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,YAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,YAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QAvBC,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;;AALH,kCA4BC;AArBQ,sBAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,AAA9C,CAA8C;AAExD,qBAAS,GAAG,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,IAAA,iBAAU,GAAE,CAAC,AAAtC,CAAsC"}
@@ -1,10 +1,11 @@
1
1
  import { EventTemplate } from '@welshman/util';
2
2
  import { ISigner } from "../util";
3
- export declare class SecretSigner implements ISigner {
3
+ export declare class Nip01Signer implements ISigner {
4
4
  private secret;
5
5
  private pubkey;
6
6
  constructor(secret: string);
7
- isEnabled: () => boolean;
7
+ static fromSecret: (secret: string) => Nip01Signer;
8
+ static ephemeral: () => Nip01Signer;
8
9
  getPubkey: () => Promise<string>;
9
10
  sign: (event: EventTemplate) => Promise<{
10
11
  sig: string;
@@ -1,8 +1,7 @@
1
- import { nip04, nip44, own, hash, sign, getPubkey } from "../util.mjs";
2
- export class SecretSigner {
1
+ import { nip04, nip44, own, hash, sign, getPubkey, makeSecret } from "../util.mjs";
2
+ export class Nip01Signer {
3
3
  constructor(secret) {
4
4
  this.secret = secret;
5
- this.isEnabled = () => true;
6
5
  this.getPubkey = async () => this.pubkey;
7
6
  this.sign = async (event) => sign(hash(own(this.pubkey, event)), this.secret);
8
7
  this.nip04 = {
@@ -16,4 +15,6 @@ export class SecretSigner {
16
15
  this.pubkey = getPubkey(this.secret);
17
16
  }
18
17
  }
19
- //# sourceMappingURL=secret.mjs.map
18
+ Nip01Signer.fromSecret = (secret) => new Nip01Signer(secret);
19
+ Nip01Signer.ephemeral = () => new Nip01Signer(makeSecret());
20
+ //# sourceMappingURL=nip01.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip01.mjs","sourceRoot":"","sources":["../../../src/signers/nip01.ts"],"names":[],"mappings":"OACO,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAW,UAAU,EAAC;AAEtE,MAAM,OAAO,WAAW;IAGtB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAQlC,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;QAEnC,SAAI,GAAG,KAAK,EAAE,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEvF,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QAvBC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;;AAEM,sBAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,AAA9C,CAA8C;AAExD,qBAAS,GAAG,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,AAAtC,CAAsC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
+ if (kind === "m") throw new TypeError("Private method is not writable");
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
+ };
13
+ var _Nip07Signer_lock, _Nip07Signer_then;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Nip07Signer = exports.getNip07 = void 0;
16
+ const util_1 = require("../util.cjs");
17
+ const getNip07 = () => window.nostr;
18
+ exports.getNip07 = getNip07;
19
+ class Nip07Signer {
20
+ constructor() {
21
+ _Nip07Signer_lock.set(this, Promise.resolve());
22
+ _Nip07Signer_then.set(this, async (f) => {
23
+ const promise = __classPrivateFieldGet(this, _Nip07Signer_lock, "f").then(() => {
24
+ const ext = (0, exports.getNip07)();
25
+ if (!ext)
26
+ throw new Error("Nip07 is not enabled");
27
+ return f(ext);
28
+ });
29
+ // Recover from errors
30
+ __classPrivateFieldSet(this, _Nip07Signer_lock, promise.then(() => undefined, () => undefined), "f");
31
+ return promise;
32
+ });
33
+ this.getPubkey = async () => (0, exports.getNip07)().getPublicKey();
34
+ this.sign = async (template) => {
35
+ const event = (0, util_1.hash)((0, util_1.own)(await this.getPubkey(), template));
36
+ return __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.signEvent(event));
37
+ };
38
+ this.nip04 = {
39
+ encrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip04.encrypt(pubkey, message)),
40
+ decrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip04.decrypt(pubkey, message)),
41
+ };
42
+ this.nip44 = {
43
+ encrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip44.encrypt(pubkey, message)),
44
+ decrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip44.decrypt(pubkey, message)),
45
+ };
46
+ }
47
+ }
48
+ exports.Nip07Signer = Nip07Signer;
49
+ _Nip07Signer_lock = new WeakMap(), _Nip07Signer_then = new WeakMap();
50
+ //# sourceMappingURL=nip07.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip07.cjs","sourceRoot":"","sources":["../../../src/signers/nip07.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,sCAA0E;AASnE,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAE,MAA0B,CAAC,KAAK,CAAA;AAAlD,QAAA,QAAQ,YAA0C;AAE/D,MAAa,WAAW;IAAxB;QACE,4BAAQ,OAAO,CAAC,OAAO,EAAE,EAAA;QAEzB,4BAAQ,KAAK,EAAK,CAAiC,EAAE,EAAE;YACrD,MAAM,OAAO,GAAG,uBAAA,IAAI,yBAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnC,MAAM,GAAG,GAAG,IAAA,gBAAQ,GAAE,CAAA;gBAEtB,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBAEjD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,sBAAsB;YACtB,uBAAA,IAAI,qBAAS,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAA,CAAA;YAE3D,OAAO,OAAO,CAAA;QAChB,CAAC,EAAA;QAED,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAA,gBAAQ,GAAG,CAAC,YAAY,EAAG,CAAA;QAEnD,SAAI,GAAG,KAAK,EAAE,QAAuB,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAA,WAAI,EAAC,IAAA,UAAG,EAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;YAEzD,OAAO,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,CAAC,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;IACH,CAAC;CAAA;AAvCD,kCAuCC"}
@@ -1,16 +1,16 @@
1
1
  import { EventTemplate } from '@welshman/util';
2
2
  import { Sign, ISigner, EncryptionImplementation } from '../util';
3
- export type Extension = {
4
- sign: Sign;
3
+ export type Nip07 = {
4
+ signEvent: Sign;
5
5
  nip04: EncryptionImplementation;
6
6
  nip44: EncryptionImplementation;
7
7
  getPublicKey: () => string | undefined;
8
8
  };
9
- export declare class ExtensionSigner implements ISigner {
9
+ export declare const getNip07: () => Nip07 | undefined;
10
+ export declare class Nip07Signer implements ISigner {
10
11
  #private;
11
- isEnabled: () => boolean;
12
12
  getPubkey: () => Promise<string>;
13
- sign: (event: EventTemplate) => Promise<import("@welshman/util").SignedEvent>;
13
+ sign: (template: EventTemplate) => Promise<import("@welshman/util").SignedEvent>;
14
14
  nip04: {
15
15
  encrypt: (pubkey: string, message: string) => Promise<string>;
16
16
  decrypt: (pubkey: string, message: string) => Promise<string>;
@@ -0,0 +1,45 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7
+ if (kind === "m") throw new TypeError("Private method is not writable");
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
+ };
12
+ var _Nip07Signer_lock, _Nip07Signer_then;
13
+ import { hash, own } from "../util.mjs";
14
+ export const getNip07 = () => window.nostr;
15
+ export class Nip07Signer {
16
+ constructor() {
17
+ _Nip07Signer_lock.set(this, Promise.resolve());
18
+ _Nip07Signer_then.set(this, async (f) => {
19
+ const promise = __classPrivateFieldGet(this, _Nip07Signer_lock, "f").then(() => {
20
+ const ext = getNip07();
21
+ if (!ext)
22
+ throw new Error("Nip07 is not enabled");
23
+ return f(ext);
24
+ });
25
+ // Recover from errors
26
+ __classPrivateFieldSet(this, _Nip07Signer_lock, promise.then(() => undefined, () => undefined), "f");
27
+ return promise;
28
+ });
29
+ this.getPubkey = async () => getNip07().getPublicKey();
30
+ this.sign = async (template) => {
31
+ const event = hash(own(await this.getPubkey(), template));
32
+ return __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.signEvent(event));
33
+ };
34
+ this.nip04 = {
35
+ encrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip04.encrypt(pubkey, message)),
36
+ decrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip04.decrypt(pubkey, message)),
37
+ };
38
+ this.nip44 = {
39
+ encrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip44.encrypt(pubkey, message)),
40
+ decrypt: (pubkey, message) => __classPrivateFieldGet(this, _Nip07Signer_then, "f").call(this, ext => ext.nip44.decrypt(pubkey, message)),
41
+ };
42
+ }
43
+ }
44
+ _Nip07Signer_lock = new WeakMap(), _Nip07Signer_then = new WeakMap();
45
+ //# sourceMappingURL=nip07.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip07.mjs","sourceRoot":"","sources":["../../../src/signers/nip07.ts"],"names":[],"mappings":";;;;;;;;;;;;OACO,EAAC,IAAI,EAAE,GAAG,EAA0C;AAS3D,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAE,MAA0B,CAAC,KAAK,CAAA;AAE/D,MAAM,OAAO,WAAW;IAAxB;QACE,4BAAQ,OAAO,CAAC,OAAO,EAAE,EAAA;QAEzB,4BAAQ,KAAK,EAAK,CAAiC,EAAE,EAAE;YACrD,MAAM,OAAO,GAAG,uBAAA,IAAI,yBAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnC,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAA;gBAEtB,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBAEjD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,sBAAsB;YACtB,uBAAA,IAAI,qBAAS,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAA,CAAA;YAE3D,OAAO,OAAO,CAAA;QAChB,CAAC,EAAA;QAED,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,QAAQ,EAAG,CAAC,YAAY,EAAG,CAAA;QAEnD,SAAI,GAAG,KAAK,EAAE,QAAuB,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;YAEzD,OAAO,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAChD,CAAC,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,yBAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;IACH,CAAC;CAAA"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _Nip46Broker_sub, _Nip46Broker_signer, _Nip46Broker_ready, _Nip46Broker_closed, _Nip46Broker_connectResult;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.Nip46Signer = exports.Nip46Broker = void 0;
16
+ const nostr_tools_1 = require("nostr-tools");
17
+ const utils_1 = require("@noble/hashes/utils");
18
+ const lib_1 = require("@welshman/lib");
19
+ const util_1 = require("@welshman/util");
20
+ const net_1 = require("@welshman/net");
21
+ const util_2 = require("../util.cjs");
22
+ const nip01_1 = require("./nip01.cjs");
23
+ let singleton;
24
+ // FIXME set the full list of requested perms
25
+ const Perms = "nip04_encrypt,nip04_decrypt,sign_event:0,sign_event:1,sign_event:4,sign_event:6,sign_event:7";
26
+ class Nip46Broker extends lib_1.Emitter {
27
+ static get(pubkey, secret, handler) {
28
+ if ((singleton === null || singleton === void 0 ? void 0 : singleton.pubkey) !== pubkey ||
29
+ (singleton === null || singleton === void 0 ? void 0 : singleton.secret) !== secret ||
30
+ !(0, lib_1.equals)(singleton === null || singleton === void 0 ? void 0 : singleton.handler, handler)) {
31
+ singleton === null || singleton === void 0 ? void 0 : singleton.teardown();
32
+ singleton = new Nip46Broker(pubkey, secret, handler);
33
+ }
34
+ return singleton;
35
+ }
36
+ constructor(pubkey, secret, handler) {
37
+ super();
38
+ this.pubkey = pubkey;
39
+ this.secret = secret;
40
+ this.handler = handler;
41
+ _Nip46Broker_sub.set(this, void 0);
42
+ _Nip46Broker_signer.set(this, void 0);
43
+ _Nip46Broker_ready.set(this, (0, lib_1.sleep)(500));
44
+ _Nip46Broker_closed.set(this, false);
45
+ _Nip46Broker_connectResult.set(this, void 0);
46
+ __classPrivateFieldSet(this, _Nip46Broker_signer, new nip01_1.Nip01Signer(secret), "f");
47
+ __classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
48
+ }
49
+ subscribe() {
50
+ const sub = (0, net_1.subscribe)({
51
+ relays: this.handler.relays,
52
+ filters: [
53
+ {
54
+ since: (0, lib_1.now)() - 30,
55
+ kinds: [util_1.NOSTR_CONNECT],
56
+ "#p": [(0, nostr_tools_1.getPublicKey)((0, utils_1.hexToBytes)(this.secret))],
57
+ },
58
+ ],
59
+ });
60
+ sub.emitter.on("event", async (url, e) => {
61
+ const json = await (0, util_2.decrypt)(__classPrivateFieldGet(this, _Nip46Broker_signer, "f"), e.pubkey, e.content);
62
+ const res = await (0, lib_1.tryCatch)(() => JSON.parse(json));
63
+ if (!res.id) {
64
+ console.error(`Invalid nostr-connect response: ${json}`);
65
+ }
66
+ if (res.result === "auth_url") {
67
+ this.emit(`auth-${res.id}`, res);
68
+ }
69
+ else {
70
+ this.emit(`res-${res.id}`, res);
71
+ }
72
+ });
73
+ sub.emitter.on("complete", () => {
74
+ if (!__classPrivateFieldGet(this, _Nip46Broker_closed, "f")) {
75
+ __classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
76
+ }
77
+ });
78
+ return sub;
79
+ }
80
+ async request(method, params, admin = false) {
81
+ // nsecbunker has a race condition
82
+ await __classPrivateFieldGet(this, _Nip46Broker_ready, "f");
83
+ const id = (0, lib_1.randomId)();
84
+ const pubkey = admin ? this.handler.pubkey : this.pubkey;
85
+ const payload = JSON.stringify({ id, method, params });
86
+ const content = await nostr_tools_1.nip04.encrypt(this.secret, pubkey, payload);
87
+ const template = (0, util_1.createEvent)(util_1.NOSTR_CONNECT, { content, tags: [["p", pubkey]] });
88
+ const event = (0, nostr_tools_1.finalizeEvent)(template, this.secret);
89
+ (0, net_1.publish)({ event, relays: this.handler.relays });
90
+ this.once(`auth-${id}`, res => {
91
+ window.open(res.result, "Coracle", "width=600,height=800,popup=yes");
92
+ });
93
+ return new Promise((resolve, reject) => {
94
+ this.once(`res-${id}`, ({ result, error }) => {
95
+ if (error) {
96
+ reject(error);
97
+ }
98
+ else {
99
+ resolve(result);
100
+ }
101
+ });
102
+ });
103
+ }
104
+ createAccount(username) {
105
+ if (!this.handler.domain) {
106
+ throw new Error("Unable to create an account without a handler domain");
107
+ }
108
+ return this.request("create_account", [username, this.handler.domain, "", Perms], true);
109
+ }
110
+ async connect(token = "") {
111
+ if (!__classPrivateFieldGet(this, _Nip46Broker_connectResult, "f")) {
112
+ const params = [this.pubkey, token, Perms];
113
+ __classPrivateFieldSet(this, _Nip46Broker_connectResult, await this.request("connect", params), "f");
114
+ }
115
+ return __classPrivateFieldGet(this, _Nip46Broker_connectResult, "f") === "ack";
116
+ }
117
+ async signEvent(event) {
118
+ return JSON.parse(await this.request("sign_event", [JSON.stringify(event)]));
119
+ }
120
+ nip04Encrypt(pk, message) {
121
+ return this.request("nip04_encrypt", [pk, message]);
122
+ }
123
+ nip04Decrypt(pk, message) {
124
+ return this.request("nip04_decrypt", [pk, message]);
125
+ }
126
+ nip44Encrypt(pk, message) {
127
+ return this.request("nip44_encrypt", [pk, message]);
128
+ }
129
+ nip44Decrypt(pk, message) {
130
+ return this.request("nip44_decrypt", [pk, message]);
131
+ }
132
+ teardown() {
133
+ var _a;
134
+ __classPrivateFieldSet(this, _Nip46Broker_closed, true, "f");
135
+ (_a = __classPrivateFieldGet(this, _Nip46Broker_sub, "f")) === null || _a === void 0 ? void 0 : _a.close();
136
+ }
137
+ }
138
+ exports.Nip46Broker = Nip46Broker;
139
+ _Nip46Broker_sub = new WeakMap(), _Nip46Broker_signer = new WeakMap(), _Nip46Broker_ready = new WeakMap(), _Nip46Broker_closed = new WeakMap(), _Nip46Broker_connectResult = new WeakMap();
140
+ class Nip46Signer {
141
+ constructor(broker) {
142
+ this.broker = broker;
143
+ this.getPubkey = async () => this.broker.pubkey;
144
+ this.sign = (event) => this.broker.signEvent(event);
145
+ this.nip04 = {
146
+ encrypt: this.broker.nip04Encrypt,
147
+ decrypt: this.broker.nip04Decrypt,
148
+ };
149
+ this.nip44 = {
150
+ encrypt: this.broker.nip44Encrypt,
151
+ decrypt: this.broker.nip44Decrypt,
152
+ };
153
+ }
154
+ }
155
+ exports.Nip46Signer = Nip46Signer;
156
+ //# sourceMappingURL=nip46.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip46.cjs","sourceRoot":"","sources":["../../../src/signers/nip46.ts"],"names":[],"mappings":"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"}
@@ -2,23 +2,23 @@ import { Emitter } from "@welshman/lib";
2
2
  import { EventTemplate } from "@welshman/util";
3
3
  import { Subscription } from "@welshman/net";
4
4
  import { ISigner } from '../util';
5
- export type NostrConnectHandler = {
6
- pubkey: string;
5
+ export type Nip46Handler = {
7
6
  relays: string[];
7
+ pubkey?: string;
8
8
  domain?: string;
9
9
  };
10
- export type ConnectResponse = {
10
+ export type Nip46Response = {
11
11
  id: string;
12
12
  error?: string;
13
13
  result?: string;
14
14
  };
15
- export declare class NostrConnectBroker extends Emitter {
15
+ export declare class Nip46Broker extends Emitter {
16
16
  #private;
17
17
  readonly pubkey: string;
18
18
  readonly secret: string;
19
- readonly handler: NostrConnectHandler;
20
- static get(pubkey: string, secret: string, handler: NostrConnectHandler): NostrConnectBroker;
21
- constructor(pubkey: string, secret: string, handler: NostrConnectHandler);
19
+ readonly handler: Nip46Handler;
20
+ static get(pubkey: string, secret: string, handler: Nip46Handler): Nip46Broker;
21
+ constructor(pubkey: string, secret: string, handler: Nip46Handler);
22
22
  subscribe(): Subscription;
23
23
  request(method: string, params: string[], admin?: boolean): Promise<string>;
24
24
  createAccount(username: string): Promise<string>;
@@ -30,10 +30,9 @@ export declare class NostrConnectBroker extends Emitter {
30
30
  nip44Decrypt(pk: string, message: string): Promise<string>;
31
31
  teardown(): void;
32
32
  }
33
- export declare class ConnectSigner implements ISigner {
33
+ export declare class Nip46Signer implements ISigner {
34
34
  private broker;
35
- constructor(broker: NostrConnectBroker);
36
- isEnabled: () => boolean;
35
+ constructor(broker: Nip46Broker);
37
36
  getPubkey: () => Promise<string>;
38
37
  sign: (event: EventTemplate) => Promise<any>;
39
38
  nip04: {
@@ -9,24 +9,24 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _NostrConnectBroker_sub, _NostrConnectBroker_signer, _NostrConnectBroker_ready, _NostrConnectBroker_closed, _NostrConnectBroker_connectResult;
12
+ var _Nip46Broker_sub, _Nip46Broker_signer, _Nip46Broker_ready, _Nip46Broker_closed, _Nip46Broker_connectResult;
13
13
  import { nip04, finalizeEvent, getPublicKey } from "nostr-tools";
14
14
  import { hexToBytes } from '@noble/hashes/utils';
15
15
  import { Emitter, tryCatch, randomId, sleep, equals, now } from "@welshman/lib";
16
16
  import { createEvent, NOSTR_CONNECT } from "@welshman/util";
17
17
  import { subscribe, publish } from "@welshman/net";
18
18
  import { decrypt } from "../util.mjs";
19
- import { SecretSigner } from "./secret.mjs";
19
+ import { Nip01Signer } from "./nip01.mjs";
20
20
  let singleton;
21
21
  // FIXME set the full list of requested perms
22
22
  const Perms = "nip04_encrypt,nip04_decrypt,sign_event:0,sign_event:1,sign_event:4,sign_event:6,sign_event:7";
23
- export class NostrConnectBroker extends Emitter {
23
+ export class Nip46Broker extends Emitter {
24
24
  static get(pubkey, secret, handler) {
25
25
  if ((singleton === null || singleton === void 0 ? void 0 : singleton.pubkey) !== pubkey ||
26
26
  (singleton === null || singleton === void 0 ? void 0 : singleton.secret) !== secret ||
27
27
  !equals(singleton === null || singleton === void 0 ? void 0 : singleton.handler, handler)) {
28
28
  singleton === null || singleton === void 0 ? void 0 : singleton.teardown();
29
- singleton = new NostrConnectBroker(pubkey, secret, handler);
29
+ singleton = new Nip46Broker(pubkey, secret, handler);
30
30
  }
31
31
  return singleton;
32
32
  }
@@ -35,13 +35,13 @@ export class NostrConnectBroker extends Emitter {
35
35
  this.pubkey = pubkey;
36
36
  this.secret = secret;
37
37
  this.handler = handler;
38
- _NostrConnectBroker_sub.set(this, void 0);
39
- _NostrConnectBroker_signer.set(this, void 0);
40
- _NostrConnectBroker_ready.set(this, sleep(500));
41
- _NostrConnectBroker_closed.set(this, false);
42
- _NostrConnectBroker_connectResult.set(this, void 0);
43
- __classPrivateFieldSet(this, _NostrConnectBroker_signer, new SecretSigner(secret), "f");
44
- __classPrivateFieldSet(this, _NostrConnectBroker_sub, this.subscribe(), "f");
38
+ _Nip46Broker_sub.set(this, void 0);
39
+ _Nip46Broker_signer.set(this, void 0);
40
+ _Nip46Broker_ready.set(this, sleep(500));
41
+ _Nip46Broker_closed.set(this, false);
42
+ _Nip46Broker_connectResult.set(this, void 0);
43
+ __classPrivateFieldSet(this, _Nip46Broker_signer, new Nip01Signer(secret), "f");
44
+ __classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
45
45
  }
46
46
  subscribe() {
47
47
  const sub = subscribe({
@@ -55,7 +55,7 @@ export class NostrConnectBroker extends Emitter {
55
55
  ],
56
56
  });
57
57
  sub.emitter.on("event", async (url, e) => {
58
- const json = await decrypt(__classPrivateFieldGet(this, _NostrConnectBroker_signer, "f"), e.pubkey, e.content);
58
+ const json = await decrypt(__classPrivateFieldGet(this, _Nip46Broker_signer, "f"), e.pubkey, e.content);
59
59
  const res = await tryCatch(() => JSON.parse(json));
60
60
  if (!res.id) {
61
61
  console.error(`Invalid nostr-connect response: ${json}`);
@@ -68,15 +68,15 @@ export class NostrConnectBroker extends Emitter {
68
68
  }
69
69
  });
70
70
  sub.emitter.on("complete", () => {
71
- if (!__classPrivateFieldGet(this, _NostrConnectBroker_closed, "f")) {
72
- __classPrivateFieldSet(this, _NostrConnectBroker_sub, this.subscribe(), "f");
71
+ if (!__classPrivateFieldGet(this, _Nip46Broker_closed, "f")) {
72
+ __classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
73
73
  }
74
74
  });
75
75
  return sub;
76
76
  }
77
77
  async request(method, params, admin = false) {
78
78
  // nsecbunker has a race condition
79
- await __classPrivateFieldGet(this, _NostrConnectBroker_ready, "f");
79
+ await __classPrivateFieldGet(this, _Nip46Broker_ready, "f");
80
80
  const id = randomId();
81
81
  const pubkey = admin ? this.handler.pubkey : this.pubkey;
82
82
  const payload = JSON.stringify({ id, method, params });
@@ -105,11 +105,11 @@ export class NostrConnectBroker extends Emitter {
105
105
  return this.request("create_account", [username, this.handler.domain, "", Perms], true);
106
106
  }
107
107
  async connect(token = "") {
108
- if (!__classPrivateFieldGet(this, _NostrConnectBroker_connectResult, "f")) {
108
+ if (!__classPrivateFieldGet(this, _Nip46Broker_connectResult, "f")) {
109
109
  const params = [this.pubkey, token, Perms];
110
- __classPrivateFieldSet(this, _NostrConnectBroker_connectResult, await this.request("connect", params), "f");
110
+ __classPrivateFieldSet(this, _Nip46Broker_connectResult, await this.request("connect", params), "f");
111
111
  }
112
- return __classPrivateFieldGet(this, _NostrConnectBroker_connectResult, "f") === "ack";
112
+ return __classPrivateFieldGet(this, _Nip46Broker_connectResult, "f") === "ack";
113
113
  }
114
114
  async signEvent(event) {
115
115
  return JSON.parse(await this.request("sign_event", [JSON.stringify(event)]));
@@ -128,15 +128,14 @@ export class NostrConnectBroker extends Emitter {
128
128
  }
129
129
  teardown() {
130
130
  var _a;
131
- __classPrivateFieldSet(this, _NostrConnectBroker_closed, true, "f");
132
- (_a = __classPrivateFieldGet(this, _NostrConnectBroker_sub, "f")) === null || _a === void 0 ? void 0 : _a.close();
131
+ __classPrivateFieldSet(this, _Nip46Broker_closed, true, "f");
132
+ (_a = __classPrivateFieldGet(this, _Nip46Broker_sub, "f")) === null || _a === void 0 ? void 0 : _a.close();
133
133
  }
134
134
  }
135
- _NostrConnectBroker_sub = new WeakMap(), _NostrConnectBroker_signer = new WeakMap(), _NostrConnectBroker_ready = new WeakMap(), _NostrConnectBroker_closed = new WeakMap(), _NostrConnectBroker_connectResult = new WeakMap();
136
- export class ConnectSigner {
135
+ _Nip46Broker_sub = new WeakMap(), _Nip46Broker_signer = new WeakMap(), _Nip46Broker_ready = new WeakMap(), _Nip46Broker_closed = new WeakMap(), _Nip46Broker_connectResult = new WeakMap();
136
+ export class Nip46Signer {
137
137
  constructor(broker) {
138
138
  this.broker = broker;
139
- this.isEnabled = () => true;
140
139
  this.getPubkey = async () => this.broker.pubkey;
141
140
  this.sign = (event) => this.broker.signEvent(event);
142
141
  this.nip04 = {
@@ -149,4 +148,4 @@ export class ConnectSigner {
149
148
  };
150
149
  }
151
150
  }
152
- //# sourceMappingURL=connect.mjs.map
151
+ //# sourceMappingURL=nip46.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nip46.mjs","sourceRoot":"","sources":["../../../src/signers/nip46.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decrypt = exports.nip44 = exports.nip04 = exports.sign = exports.hash = exports.own = exports.getSig = exports.getHash = exports.getPubkey = exports.makeSecret = void 0;
4
+ const secp256k1_1 = require("@noble/curves/secp256k1");
5
+ const utils_1 = require("@noble/hashes/utils");
6
+ const nostr_tools_1 = require("nostr-tools");
7
+ const lib_1 = require("@welshman/lib");
8
+ const makeSecret = () => (0, utils_1.bytesToHex)((0, nostr_tools_1.generateSecretKey)());
9
+ exports.makeSecret = makeSecret;
10
+ const getPubkey = (secret) => (0, nostr_tools_1.getPublicKey)((0, utils_1.hexToBytes)(secret));
11
+ exports.getPubkey = getPubkey;
12
+ const getHash = (event) => (0, nostr_tools_1.getEventHash)(event);
13
+ exports.getHash = getHash;
14
+ const getSig = (event, secret) => (0, utils_1.bytesToHex)(secp256k1_1.schnorr.sign(event.id, secret));
15
+ exports.getSig = getSig;
16
+ const own = (pubkey, event) => ({ ...event, pubkey });
17
+ exports.own = own;
18
+ const hash = (event) => ({ ...event, id: (0, exports.getHash)(event) });
19
+ exports.hash = hash;
20
+ const sign = (event, secret) => ({ ...event, sig: (0, exports.getSig)(event, secret) });
21
+ exports.sign = sign;
22
+ exports.nip04 = {
23
+ detect: (m) => m.includes("?iv="),
24
+ encrypt: (pubkey, secret, m) => nostr_tools_1.nip04.encrypt(secret, pubkey, m),
25
+ decrypt: (pubkey, secret, m) => nostr_tools_1.nip04.decrypt(secret, pubkey, m),
26
+ };
27
+ exports.nip44 = {
28
+ getSharedSecret: (0, lib_1.cached)({
29
+ maxSize: 10000,
30
+ getKey: ([secret, pubkey]) => [secret, pubkey].join(":"),
31
+ getValue: ([secret, pubkey]) => nostr_tools_1.nip44.v2.utils.getConversationKey((0, utils_1.hexToBytes)(secret), pubkey),
32
+ }),
33
+ encrypt: (pubkey, secret, m) => nostr_tools_1.nip44.v2.encrypt(m, exports.nip44.getSharedSecret(secret, pubkey)),
34
+ decrypt: (pubkey, secret, m) => nostr_tools_1.nip44.v2.decrypt(m, exports.nip44.getSharedSecret(secret, pubkey)),
35
+ };
36
+ const decrypt = async (signer, pubkey, message) => exports.nip04.detect(message)
37
+ ? signer.nip04.decrypt(pubkey, message)
38
+ : signer.nip44.decrypt(pubkey, message);
39
+ exports.decrypt = decrypt;
40
+ //# sourceMappingURL=util.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.cjs","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { SignedEvent, HashedEvent, EventTemplate, OwnedEvent } from '@welshman/util';
2
- export declare const getSecret: () => string;
2
+ export declare const makeSecret: () => string;
3
3
  export declare const getPubkey: (secret: string) => string;
4
4
  export declare const getHash: (event: OwnedEvent) => string;
5
5
  export declare const getSig: (event: HashedEvent, secret: string) => string;
@@ -43,10 +43,9 @@ export type EncryptionImplementation = {
43
43
  decrypt: Decrypt;
44
44
  };
45
45
  export interface ISigner {
46
- isEnabled: () => boolean;
47
- getPubkey: () => Promise<string>;
48
46
  sign: Sign;
49
47
  nip04: EncryptionImplementation;
50
48
  nip44: EncryptionImplementation;
49
+ getPubkey: () => Promise<string>;
51
50
  }
52
51
  export declare const decrypt: (signer: ISigner, pubkey: string, message: string) => Promise<string>;
@@ -2,7 +2,7 @@ import { schnorr } from '@noble/curves/secp256k1';
2
2
  import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
3
3
  import { nip04 as nt04, nip44 as nt44, generateSecretKey, getPublicKey, getEventHash } from "nostr-tools";
4
4
  import { cached } from '@welshman/lib';
5
- export const getSecret = () => bytesToHex(generateSecretKey());
5
+ export const makeSecret = () => bytesToHex(generateSecretKey());
6
6
  export const getPubkey = (secret) => getPublicKey(hexToBytes(secret));
7
7
  export const getHash = (event) => getEventHash(event);
8
8
  export const getSig = (event, secret) => bytesToHex(schnorr.sign(event.id, secret));
@@ -1 +1 @@
1
- {"version":3,"file":"util.mjs","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.mjs","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@welshman/signer",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "author": "hodlbod",
5
5
  "license": "MIT",
6
6
  "description": "A nostr signer implemenation supporting several login methods.",
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.mjs","sourceRoot":"","sources":["../../../src/signers/connect.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
- };
6
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7
- if (kind === "m") throw new TypeError("Private method is not writable");
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
- };
12
- var _ExtensionSigner_lock, _ExtensionSigner_ext, _ExtensionSigner_then;
13
- import { hash, own } from "../util.mjs";
14
- export class ExtensionSigner {
15
- constructor() {
16
- _ExtensionSigner_lock.set(this, Promise.resolve());
17
- _ExtensionSigner_ext.set(this, () => window.nostr);
18
- _ExtensionSigner_then.set(this, async (f) => {
19
- const promise = __classPrivateFieldGet(this, _ExtensionSigner_lock, "f").then(() => {
20
- const ext = __classPrivateFieldGet(this, _ExtensionSigner_ext, "f").call(this);
21
- if (!ext)
22
- throw new Error("Extension is not enabled");
23
- return f(ext);
24
- });
25
- // Recover from errors
26
- __classPrivateFieldSet(this, _ExtensionSigner_lock, promise.then(() => undefined, () => undefined), "f");
27
- return promise;
28
- });
29
- this.isEnabled = () => Boolean(__classPrivateFieldGet(this, _ExtensionSigner_ext, "f").call(this));
30
- this.getPubkey = () => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => {
31
- const pubkey = ext.getPublicKey();
32
- if (!pubkey)
33
- throw new Error("Failed to retrieve pubkey");
34
- return pubkey;
35
- });
36
- this.sign = (event) => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => ext.sign(hash(own(ext.getPublicKey(), event))));
37
- this.nip04 = {
38
- encrypt: (pubkey, message) => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => ext.nip04.encrypt(pubkey, message)),
39
- decrypt: (pubkey, message) => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => ext.nip04.decrypt(pubkey, message)),
40
- };
41
- this.nip44 = {
42
- encrypt: (pubkey, message) => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => ext.nip44.encrypt(pubkey, message)),
43
- decrypt: (pubkey, message) => __classPrivateFieldGet(this, _ExtensionSigner_then, "f").call(this, ext => ext.nip44.decrypt(pubkey, message)),
44
- };
45
- }
46
- }
47
- _ExtensionSigner_lock = new WeakMap(), _ExtensionSigner_ext = new WeakMap(), _ExtensionSigner_then = new WeakMap();
48
- //# sourceMappingURL=extension.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension.mjs","sourceRoot":"","sources":["../../../src/signers/extension.ts"],"names":[],"mappings":";;;;;;;;;;;;OACO,EAAC,IAAI,EAAE,GAAG,EAA0C;AAS3D,MAAM,OAAO,eAAe;IAA5B;QACE,gCAAQ,OAAO,CAAC,OAAO,EAAE,EAAA;QAEzB,+BAAO,GAAG,EAAE,CAAE,MAA8B,CAAC,KAAK,EAAA;QAElD,gCAAQ,KAAK,EAAK,CAAqC,EAAE,EAAE;YACzD,MAAM,OAAO,GAAG,uBAAA,IAAI,6BAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnC,MAAM,GAAG,GAAG,uBAAA,IAAI,4BAAK,MAAT,IAAI,CAAO,CAAA;gBAEvB,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;gBAErD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;YAEF,sBAAsB;YACtB,uBAAA,IAAI,yBAAS,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,MAAA,CAAA;YAE3D,OAAO,OAAO,CAAA;QAChB,CAAC,EAAA;QAED,cAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,uBAAA,IAAI,4BAAK,MAAT,IAAI,CAAO,CAAC,CAAA;QAEtC,cAAS,GAAG,GAAG,EAAE,CACf,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAA;YAEjC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;YAEzD,OAAO,MAAgB,CAAA;QACzB,CAAC,CAAC,CAAA;QAEJ,SAAI,GAAG,CAAC,KAAoB,EAAE,EAAE,CAC9B,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;QAE7E,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAC3C,uBAAA,IAAI,6BAAM,MAAV,IAAI,EAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACxD,CAAA;IACH,CAAC;CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"secret.mjs","sourceRoot":"","sources":["../../../src/signers/secret.ts"],"names":[],"mappings":"OACO,EAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAU;AAE1D,MAAM,OAAO,YAAY;IAGvB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;QAIlC,cAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;QAEtB,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;QAEnC,SAAI,GAAG,KAAK,EAAE,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEvF,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,EAAE,CACjD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;SAC9C,CAAA;QArBC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;CAqBF"}
@@ -1,21 +0,0 @@
1
- import { UnwrappedEvent, SignedEvent, HashedEvent, EventTemplate } from '@welshman/util';
2
- import { ISigner } from './util';
3
- export type WrapperParams = {
4
- author?: string;
5
- wrap?: {
6
- author: string;
7
- recipient: string;
8
- tags?: string[][];
9
- };
10
- };
11
- export declare class Wrapper {
12
- readonly userSigner: ISigner;
13
- readonly wrapSigner: ISigner;
14
- seen: Map<string, UnwrappedEvent | Error>;
15
- constructor(userSigner: ISigner, wrapSigner: ISigner);
16
- now: (drift?: number) => number;
17
- getSeal: (pk: string, rumor: HashedEvent) => Promise<SignedEvent>;
18
- getWrap: (pk: string, seal: SignedEvent) => Promise<SignedEvent>;
19
- wrap: (pk: string, template: EventTemplate) => Promise<SignedEvent>;
20
- unwrap: (wrap: SignedEvent) => Promise<any>;
21
- }
@@ -1,56 +0,0 @@
1
- import { WRAP, SEAL } from '@welshman/util';
2
- import { own, hash, decrypt } from "./util.mjs";
3
- export class Wrapper {
4
- constructor(userSigner, wrapSigner) {
5
- this.userSigner = userSigner;
6
- this.wrapSigner = wrapSigner;
7
- this.seen = new Map();
8
- this.now = (drift = 0) => Math.round(Date.now() / 1000 - Math.random() * Math.pow(10, drift));
9
- this.getSeal = async (pk, rumor) => this.userSigner.sign(hash({
10
- kind: SEAL,
11
- pubkey: await this.userSigner.getPubkey(),
12
- content: await this.userSigner.nip44.encrypt(pk, JSON.stringify(rumor)),
13
- created_at: this.now(5),
14
- tags: [],
15
- }));
16
- this.getWrap = async (pk, seal) => this.wrapSigner.sign(hash({
17
- kind: WRAP,
18
- pubkey: await this.wrapSigner.getPubkey(),
19
- content: await this.wrapSigner.nip44.encrypt(pk, JSON.stringify(seal)),
20
- created_at: this.now(5),
21
- tags: [["p", pk]],
22
- }));
23
- this.wrap = async (pk, template) => {
24
- const pubkey = await this.userSigner.getPubkey();
25
- const rumor = hash(own(pubkey, template));
26
- const seal = await this.getSeal(pk, rumor);
27
- const wrap = await this.getWrap(pk, seal);
28
- return wrap;
29
- };
30
- this.unwrap = async (wrap) => {
31
- // Avoid decrypting the same event multiple times
32
- if (this.seen.has(wrap.id)) {
33
- const rumorOrError = this.seen.get(wrap.id);
34
- if (rumorOrError instanceof Error) {
35
- throw rumorOrError;
36
- }
37
- else {
38
- return rumorOrError;
39
- }
40
- }
41
- try {
42
- const seal = JSON.parse(await decrypt(this.wrapSigner, wrap.pubkey, wrap.content));
43
- const rumor = JSON.parse(await decrypt(this.wrapSigner, seal.pubkey, seal.content));
44
- if (seal.pubkey !== rumor.pubkey)
45
- throw new Error("Seal pubkey does not match rumor pubkey");
46
- this.seen.set(wrap.id, rumor);
47
- return rumor;
48
- }
49
- catch (error) {
50
- this.seen.set(wrap.id, error);
51
- throw error;
52
- }
53
- };
54
- }
55
- }
56
- //# sourceMappingURL=wrapper.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wrapper.mjs","sourceRoot":"","sources":["../../src/wrapper.ts"],"names":[],"mappings":"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"}